You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

227 lines
6.9 KiB

/*
* UAVCAN data structure definition for libcanard.
*
* Autogenerated, do not edit.
*
* Source file: E:\000_MyProjects\UAVCAN\libcanard_zrzk_new\dsdl_compiler\zrzk\equipment\range_sensor\26110.Proximity.uavcan
*/
#include "node_proximity.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 zrzk_equipment_range_sensor_Proximity_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 zrzk_equipment_range_sensor_Proximity_encode_internal(uavcan_proximity_t* source,
void* msg_buf,
uint32_t offset,
uint8_t CANARD_MAYBE_UNUSED(root_item))
{
canardEncodeScalar(msg_buf, offset, 8, (void*)&source->sensor_id); // 255
offset += 8;
source->sensor_type = CANARD_INTERNAL_SATURATE_UNSIGNED(source->sensor_type, 31)
canardEncodeScalar(msg_buf, offset, 5, (void*)&source->sensor_type); // 31
offset += 5;
source->reading_type = CANARD_INTERNAL_SATURATE_UNSIGNED(source->reading_type, 7)
canardEncodeScalar(msg_buf, offset, 3, (void*)&source->reading_type); // 7
offset += 3;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d0); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d45); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d90); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d135); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d180); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d225); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d270); // 65535
offset += 16;
canardEncodeScalar(msg_buf, offset, 16, (void*)&source->d315); // 65535
offset += 16;
return offset;
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_encode
* @param source : Pointer to source data struct
* @param msg_buf: Pointer to msg storage
* @retval returns message length as bytes
*/
uint32_t zrzk_equipment_range_sensor_Proximity_encode(uavcan_proximity_t* source, void* msg_buf)
{
uint32_t offset = 0;
offset = zrzk_equipment_range_sensor_Proximity_encode_internal(source, msg_buf, offset, 1);
return (offset + 7 ) / 8;
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_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
* uavcan_proximity_t 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 zrzk_equipment_range_sensor_Proximity_decode_internal(
const CanardRxTransfer* transfer,
uint16_t CANARD_MAYBE_UNUSED(payload_len),
uavcan_proximity_t* dest,
uint8_t** CANARD_MAYBE_UNUSED(dyn_arr_buf),
int32_t offset)
{
int32_t ret = 0;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 8, false, (void*)&dest->sensor_id);
if (ret != 8)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 8;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 5, false, (void*)&dest->sensor_type);
if (ret != 5)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 5;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 3, false, (void*)&dest->reading_type);
if (ret != 3)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 3;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d0);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d45);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d90);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d135);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d180);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d225);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d270);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
ret = canardDecodeScalar(transfer, (uint32_t)offset, 16, false, (void*)&dest->d315);
if (ret != 16)
{
goto zrzk_equipment_range_sensor_Proximity_error_exit;
}
offset += 16;
return offset;
zrzk_equipment_range_sensor_Proximity_error_exit:
if (ret < 0)
{
return ret;
}
else
{
return -CANARD_ERROR_INTERNAL;
}
}
/**
* @brief zrzk_equipment_range_sensor_Proximity_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
* uavcan_proximity_t dyn memory will point to dyn_arr_buf memory.
* NULL will ignore dynamic arrays decoding.
* @retval offset or ERROR value if < 0
*/
int32_t zrzk_equipment_range_sensor_Proximity_decode(const CanardRxTransfer* transfer,
uint16_t payload_len,
uavcan_proximity_t* dest,
uint8_t** dyn_arr_buf)
{
const int32_t offset = 0;
int32_t ret = 0;
// Clear the destination struct
for (uint32_t c = 0; c < sizeof(uavcan_proximity_t); c++)
{
((uint8_t*)dest)[c] = 0x00;
}
ret = zrzk_equipment_range_sensor_Proximity_decode_internal(transfer, payload_len, dest, dyn_arr_buf, offset);
return ret;
}