uavcan.equipment.camera_gimbal.Status.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <stdint.h>
  4. #include <canard.h>
  5. #include <uavcan.equipment.camera_gimbal.Mode.h>
  6. #define UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_MAX_SIZE 29
  7. #define UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_SIGNATURE (0xB9F127865BE0D61EULL)
  8. #define UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_ID 1044
  9. #if defined(__cplusplus) && defined(DRONECAN_CXX_WRAPPERS)
  10. class uavcan_equipment_camera_gimbal_Status_cxx_iface;
  11. #endif
  12. struct uavcan_equipment_camera_gimbal_Status {
  13. #if defined(__cplusplus) && defined(DRONECAN_CXX_WRAPPERS)
  14. using cxx_iface = uavcan_equipment_camera_gimbal_Status_cxx_iface;
  15. #endif
  16. uint8_t gimbal_id;
  17. struct uavcan_equipment_camera_gimbal_Mode mode;
  18. float camera_orientation_in_body_frame_xyzw[4];
  19. struct { uint8_t len; float data[9]; }camera_orientation_in_body_frame_covariance;
  20. };
  21. #ifdef __cplusplus
  22. extern "C"
  23. {
  24. #endif
  25. uint32_t _uavcan_equipment_camera_gimbal_Status_encode(struct uavcan_equipment_camera_gimbal_Status* msg, uint8_t* buffer
  26. #if CANARD_ENABLE_TAO_OPTION
  27. , bool tao
  28. #endif
  29. );
  30. bool _uavcan_equipment_camera_gimbal_Status_decode(const CanardRxTransfer* transfer, struct uavcan_equipment_camera_gimbal_Status* msg);
  31. static inline uint32_t uavcan_equipment_camera_gimbal_Status_encode(struct uavcan_equipment_camera_gimbal_Status* msg, uint8_t* buffer
  32. #if CANARD_ENABLE_TAO_OPTION
  33. , bool tao
  34. #endif
  35. ) {
  36. return _uavcan_equipment_camera_gimbal_Status_encode(msg, buffer
  37. #if CANARD_ENABLE_TAO_OPTION
  38. , tao
  39. #endif
  40. );
  41. }
  42. static inline bool uavcan_equipment_camera_gimbal_Status_decode(const CanardRxTransfer* transfer, struct uavcan_equipment_camera_gimbal_Status* msg) {
  43. return _uavcan_equipment_camera_gimbal_Status_decode(transfer, msg);
  44. }
  45. #if defined(CANARD_DSDLC_INTERNAL)
  46. static inline void __uavcan_equipment_camera_gimbal_Status_encode(uint8_t* buffer, uint32_t* bit_ofs, struct uavcan_equipment_camera_gimbal_Status* msg, bool tao);
  47. static inline bool __uavcan_equipment_camera_gimbal_Status_decode(const CanardRxTransfer* transfer, uint32_t* bit_ofs, struct uavcan_equipment_camera_gimbal_Status* msg, bool tao);
  48. void __uavcan_equipment_camera_gimbal_Status_encode(uint8_t* buffer, uint32_t* bit_ofs, struct uavcan_equipment_camera_gimbal_Status* msg, bool tao) {
  49. (void)buffer;
  50. (void)bit_ofs;
  51. (void)msg;
  52. (void)tao;
  53. canardEncodeScalar(buffer, *bit_ofs, 8, &msg->gimbal_id);
  54. *bit_ofs += 8;
  55. __uavcan_equipment_camera_gimbal_Mode_encode(buffer, bit_ofs, &msg->mode, false);
  56. for (size_t i=0; i < 4; i++) {
  57. {
  58. uint16_t float16_val = canardConvertNativeFloatToFloat16(msg->camera_orientation_in_body_frame_xyzw[i]);
  59. canardEncodeScalar(buffer, *bit_ofs, 16, &float16_val);
  60. }
  61. *bit_ofs += 16;
  62. }
  63. #pragma GCC diagnostic push
  64. #pragma GCC diagnostic ignored "-Wtype-limits"
  65. const uint8_t camera_orientation_in_body_frame_covariance_len = msg->camera_orientation_in_body_frame_covariance.len > 9 ? 9 : msg->camera_orientation_in_body_frame_covariance.len;
  66. #pragma GCC diagnostic pop
  67. if (!tao) {
  68. canardEncodeScalar(buffer, *bit_ofs, 4, &camera_orientation_in_body_frame_covariance_len);
  69. *bit_ofs += 4;
  70. }
  71. for (size_t i=0; i < camera_orientation_in_body_frame_covariance_len; i++) {
  72. {
  73. uint16_t float16_val = canardConvertNativeFloatToFloat16(msg->camera_orientation_in_body_frame_covariance.data[i]);
  74. canardEncodeScalar(buffer, *bit_ofs, 16, &float16_val);
  75. }
  76. *bit_ofs += 16;
  77. }
  78. }
  79. /*
  80. decode uavcan_equipment_camera_gimbal_Status, return true on failure, false on success
  81. */
  82. bool __uavcan_equipment_camera_gimbal_Status_decode(const CanardRxTransfer* transfer, uint32_t* bit_ofs, struct uavcan_equipment_camera_gimbal_Status* msg, bool tao) {
  83. (void)transfer;
  84. (void)bit_ofs;
  85. (void)msg;
  86. (void)tao;
  87. canardDecodeScalar(transfer, *bit_ofs, 8, false, &msg->gimbal_id);
  88. *bit_ofs += 8;
  89. if (__uavcan_equipment_camera_gimbal_Mode_decode(transfer, bit_ofs, &msg->mode, false)) {return true;}
  90. for (size_t i=0; i < 4; i++) {
  91. {
  92. uint16_t float16_val;
  93. canardDecodeScalar(transfer, *bit_ofs, 16, true, &float16_val);
  94. msg->camera_orientation_in_body_frame_xyzw[i] = canardConvertFloat16ToNativeFloat(float16_val);
  95. }
  96. *bit_ofs += 16;
  97. }
  98. if (!tao) {
  99. canardDecodeScalar(transfer, *bit_ofs, 4, false, &msg->camera_orientation_in_body_frame_covariance.len);
  100. *bit_ofs += 4;
  101. } else {
  102. msg->camera_orientation_in_body_frame_covariance.len = ((transfer->payload_len*8)-*bit_ofs)/16;
  103. }
  104. #pragma GCC diagnostic push
  105. #pragma GCC diagnostic ignored "-Wtype-limits"
  106. if (msg->camera_orientation_in_body_frame_covariance.len > 9) {
  107. return true; /* invalid value */
  108. }
  109. #pragma GCC diagnostic pop
  110. for (size_t i=0; i < msg->camera_orientation_in_body_frame_covariance.len; i++) {
  111. {
  112. uint16_t float16_val;
  113. canardDecodeScalar(transfer, *bit_ofs, 16, true, &float16_val);
  114. msg->camera_orientation_in_body_frame_covariance.data[i] = canardConvertFloat16ToNativeFloat(float16_val);
  115. }
  116. *bit_ofs += 16;
  117. }
  118. return false; /* success */
  119. }
  120. #endif
  121. #ifdef CANARD_DSDLC_TEST_BUILD
  122. struct uavcan_equipment_camera_gimbal_Status sample_uavcan_equipment_camera_gimbal_Status_msg(void);
  123. #endif
  124. #ifdef __cplusplus
  125. } // extern "C"
  126. #ifdef DRONECAN_CXX_WRAPPERS
  127. #include <canard/cxx_wrappers.h>
  128. BROADCAST_MESSAGE_CXX_IFACE(uavcan_equipment_camera_gimbal_Status, UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_ID, UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_SIGNATURE, UAVCAN_EQUIPMENT_CAMERA_GIMBAL_STATUS_MAX_SIZE);
  129. #endif
  130. #endif