mavlink_msg_gps2_raw.h 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638
  1. #pragma once
  2. // MESSAGE GPS2_RAW PACKING
  3. #define MAVLINK_MSG_ID_GPS2_RAW 124
  4. MAVPACKED(
  5. typedef struct __mavlink_gps2_raw_t {
  6. uint64_t time_usec; /*< [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.*/
  7. int32_t lat; /*< [degE7] Latitude (WGS84)*/
  8. int32_t lon; /*< [degE7] Longitude (WGS84)*/
  9. int32_t alt; /*< [mm] Altitude (MSL). Positive for up.*/
  10. uint32_t dgps_age; /*< [ms] Age of DGPS info*/
  11. uint16_t eph; /*< GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
  12. uint16_t epv; /*< GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX*/
  13. uint16_t vel; /*< [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX*/
  14. uint16_t cog; /*< [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX*/
  15. uint8_t fix_type; /*< GPS fix type.*/
  16. uint8_t satellites_visible; /*< Number of satellites visible. If unknown, set to UINT8_MAX*/
  17. uint8_t dgps_numch; /*< Number of DGPS satellites*/
  18. uint16_t yaw; /*< [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.*/
  19. int32_t alt_ellipsoid; /*< [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.*/
  20. uint32_t h_acc; /*< [mm] Position uncertainty.*/
  21. uint32_t v_acc; /*< [mm] Altitude uncertainty.*/
  22. uint32_t vel_acc; /*< [mm] Speed uncertainty.*/
  23. uint32_t hdg_acc; /*< [degE5] Heading / track uncertainty*/
  24. }) mavlink_gps2_raw_t;
  25. #define MAVLINK_MSG_ID_GPS2_RAW_LEN 57
  26. #define MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN 35
  27. #define MAVLINK_MSG_ID_124_LEN 57
  28. #define MAVLINK_MSG_ID_124_MIN_LEN 35
  29. #define MAVLINK_MSG_ID_GPS2_RAW_CRC 87
  30. #define MAVLINK_MSG_ID_124_CRC 87
  31. #if MAVLINK_COMMAND_24BIT
  32. #define MAVLINK_MESSAGE_INFO_GPS2_RAW { \
  33. 124, \
  34. "GPS2_RAW", \
  35. 18, \
  36. { { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps2_raw_t, time_usec) }, \
  37. { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_raw_t, fix_type) }, \
  38. { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_raw_t, lat) }, \
  39. { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_raw_t, lon) }, \
  40. { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_raw_t, alt) }, \
  41. { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps2_raw_t, eph) }, \
  42. { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps2_raw_t, epv) }, \
  43. { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_raw_t, vel) }, \
  44. { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_gps2_raw_t, cog) }, \
  45. { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_raw_t, satellites_visible) }, \
  46. { "dgps_numch", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_raw_t, dgps_numch) }, \
  47. { "dgps_age", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_raw_t, dgps_age) }, \
  48. { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 35, offsetof(mavlink_gps2_raw_t, yaw) }, \
  49. { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 37, offsetof(mavlink_gps2_raw_t, alt_ellipsoid) }, \
  50. { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 41, offsetof(mavlink_gps2_raw_t, h_acc) }, \
  51. { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 45, offsetof(mavlink_gps2_raw_t, v_acc) }, \
  52. { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 49, offsetof(mavlink_gps2_raw_t, vel_acc) }, \
  53. { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 53, offsetof(mavlink_gps2_raw_t, hdg_acc) }, \
  54. } \
  55. }
  56. #else
  57. #define MAVLINK_MESSAGE_INFO_GPS2_RAW { \
  58. "GPS2_RAW", \
  59. 18, \
  60. { { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_gps2_raw_t, time_usec) }, \
  61. { "fix_type", NULL, MAVLINK_TYPE_UINT8_T, 0, 32, offsetof(mavlink_gps2_raw_t, fix_type) }, \
  62. { "lat", NULL, MAVLINK_TYPE_INT32_T, 0, 8, offsetof(mavlink_gps2_raw_t, lat) }, \
  63. { "lon", NULL, MAVLINK_TYPE_INT32_T, 0, 12, offsetof(mavlink_gps2_raw_t, lon) }, \
  64. { "alt", NULL, MAVLINK_TYPE_INT32_T, 0, 16, offsetof(mavlink_gps2_raw_t, alt) }, \
  65. { "eph", NULL, MAVLINK_TYPE_UINT16_T, 0, 24, offsetof(mavlink_gps2_raw_t, eph) }, \
  66. { "epv", NULL, MAVLINK_TYPE_UINT16_T, 0, 26, offsetof(mavlink_gps2_raw_t, epv) }, \
  67. { "vel", NULL, MAVLINK_TYPE_UINT16_T, 0, 28, offsetof(mavlink_gps2_raw_t, vel) }, \
  68. { "cog", NULL, MAVLINK_TYPE_UINT16_T, 0, 30, offsetof(mavlink_gps2_raw_t, cog) }, \
  69. { "satellites_visible", NULL, MAVLINK_TYPE_UINT8_T, 0, 33, offsetof(mavlink_gps2_raw_t, satellites_visible) }, \
  70. { "dgps_numch", NULL, MAVLINK_TYPE_UINT8_T, 0, 34, offsetof(mavlink_gps2_raw_t, dgps_numch) }, \
  71. { "dgps_age", NULL, MAVLINK_TYPE_UINT32_T, 0, 20, offsetof(mavlink_gps2_raw_t, dgps_age) }, \
  72. { "yaw", NULL, MAVLINK_TYPE_UINT16_T, 0, 35, offsetof(mavlink_gps2_raw_t, yaw) }, \
  73. { "alt_ellipsoid", NULL, MAVLINK_TYPE_INT32_T, 0, 37, offsetof(mavlink_gps2_raw_t, alt_ellipsoid) }, \
  74. { "h_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 41, offsetof(mavlink_gps2_raw_t, h_acc) }, \
  75. { "v_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 45, offsetof(mavlink_gps2_raw_t, v_acc) }, \
  76. { "vel_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 49, offsetof(mavlink_gps2_raw_t, vel_acc) }, \
  77. { "hdg_acc", NULL, MAVLINK_TYPE_UINT32_T, 0, 53, offsetof(mavlink_gps2_raw_t, hdg_acc) }, \
  78. } \
  79. }
  80. #endif
  81. /**
  82. * @brief Pack a gps2_raw message
  83. * @param system_id ID of this system
  84. * @param component_id ID of this component (e.g. 200 for IMU)
  85. * @param msg The MAVLink message to compress the data into
  86. *
  87. * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
  88. * @param fix_type GPS fix type.
  89. * @param lat [degE7] Latitude (WGS84)
  90. * @param lon [degE7] Longitude (WGS84)
  91. * @param alt [mm] Altitude (MSL). Positive for up.
  92. * @param eph GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  93. * @param epv GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  94. * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
  95. * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
  96. * @param satellites_visible Number of satellites visible. If unknown, set to UINT8_MAX
  97. * @param dgps_numch Number of DGPS satellites
  98. * @param dgps_age [ms] Age of DGPS info
  99. * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
  100. * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
  101. * @param h_acc [mm] Position uncertainty.
  102. * @param v_acc [mm] Altitude uncertainty.
  103. * @param vel_acc [mm] Speed uncertainty.
  104. * @param hdg_acc [degE5] Heading / track uncertainty
  105. * @return length of the message in bytes (excluding serial stream start sign)
  106. */
  107. static inline uint16_t mavlink_msg_gps2_raw_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
  108. uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
  109. {
  110. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  111. char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
  112. _mav_put_uint64_t(buf, 0, time_usec);
  113. _mav_put_int32_t(buf, 8, lat);
  114. _mav_put_int32_t(buf, 12, lon);
  115. _mav_put_int32_t(buf, 16, alt);
  116. _mav_put_uint32_t(buf, 20, dgps_age);
  117. _mav_put_uint16_t(buf, 24, eph);
  118. _mav_put_uint16_t(buf, 26, epv);
  119. _mav_put_uint16_t(buf, 28, vel);
  120. _mav_put_uint16_t(buf, 30, cog);
  121. _mav_put_uint8_t(buf, 32, fix_type);
  122. _mav_put_uint8_t(buf, 33, satellites_visible);
  123. _mav_put_uint8_t(buf, 34, dgps_numch);
  124. _mav_put_uint16_t(buf, 35, yaw);
  125. _mav_put_int32_t(buf, 37, alt_ellipsoid);
  126. _mav_put_uint32_t(buf, 41, h_acc);
  127. _mav_put_uint32_t(buf, 45, v_acc);
  128. _mav_put_uint32_t(buf, 49, vel_acc);
  129. _mav_put_uint32_t(buf, 53, hdg_acc);
  130. memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RAW_LEN);
  131. #else
  132. mavlink_gps2_raw_t packet;
  133. packet.time_usec = time_usec;
  134. packet.lat = lat;
  135. packet.lon = lon;
  136. packet.alt = alt;
  137. packet.dgps_age = dgps_age;
  138. packet.eph = eph;
  139. packet.epv = epv;
  140. packet.vel = vel;
  141. packet.cog = cog;
  142. packet.fix_type = fix_type;
  143. packet.satellites_visible = satellites_visible;
  144. packet.dgps_numch = dgps_numch;
  145. packet.yaw = yaw;
  146. packet.alt_ellipsoid = alt_ellipsoid;
  147. packet.h_acc = h_acc;
  148. packet.v_acc = v_acc;
  149. packet.vel_acc = vel_acc;
  150. packet.hdg_acc = hdg_acc;
  151. memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RAW_LEN);
  152. #endif
  153. msg->msgid = MAVLINK_MSG_ID_GPS2_RAW;
  154. return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  155. }
  156. /**
  157. * @brief Pack a gps2_raw message on a channel
  158. * @param system_id ID of this system
  159. * @param component_id ID of this component (e.g. 200 for IMU)
  160. * @param chan The MAVLink channel this message will be sent over
  161. * @param msg The MAVLink message to compress the data into
  162. * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
  163. * @param fix_type GPS fix type.
  164. * @param lat [degE7] Latitude (WGS84)
  165. * @param lon [degE7] Longitude (WGS84)
  166. * @param alt [mm] Altitude (MSL). Positive for up.
  167. * @param eph GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  168. * @param epv GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  169. * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
  170. * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
  171. * @param satellites_visible Number of satellites visible. If unknown, set to UINT8_MAX
  172. * @param dgps_numch Number of DGPS satellites
  173. * @param dgps_age [ms] Age of DGPS info
  174. * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
  175. * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
  176. * @param h_acc [mm] Position uncertainty.
  177. * @param v_acc [mm] Altitude uncertainty.
  178. * @param vel_acc [mm] Speed uncertainty.
  179. * @param hdg_acc [degE5] Heading / track uncertainty
  180. * @return length of the message in bytes (excluding serial stream start sign)
  181. */
  182. static inline uint16_t mavlink_msg_gps2_raw_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
  183. mavlink_message_t* msg,
  184. uint64_t time_usec,uint8_t fix_type,int32_t lat,int32_t lon,int32_t alt,uint16_t eph,uint16_t epv,uint16_t vel,uint16_t cog,uint8_t satellites_visible,uint8_t dgps_numch,uint32_t dgps_age,uint16_t yaw,int32_t alt_ellipsoid,uint32_t h_acc,uint32_t v_acc,uint32_t vel_acc,uint32_t hdg_acc)
  185. {
  186. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  187. char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
  188. _mav_put_uint64_t(buf, 0, time_usec);
  189. _mav_put_int32_t(buf, 8, lat);
  190. _mav_put_int32_t(buf, 12, lon);
  191. _mav_put_int32_t(buf, 16, alt);
  192. _mav_put_uint32_t(buf, 20, dgps_age);
  193. _mav_put_uint16_t(buf, 24, eph);
  194. _mav_put_uint16_t(buf, 26, epv);
  195. _mav_put_uint16_t(buf, 28, vel);
  196. _mav_put_uint16_t(buf, 30, cog);
  197. _mav_put_uint8_t(buf, 32, fix_type);
  198. _mav_put_uint8_t(buf, 33, satellites_visible);
  199. _mav_put_uint8_t(buf, 34, dgps_numch);
  200. _mav_put_uint16_t(buf, 35, yaw);
  201. _mav_put_int32_t(buf, 37, alt_ellipsoid);
  202. _mav_put_uint32_t(buf, 41, h_acc);
  203. _mav_put_uint32_t(buf, 45, v_acc);
  204. _mav_put_uint32_t(buf, 49, vel_acc);
  205. _mav_put_uint32_t(buf, 53, hdg_acc);
  206. memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_GPS2_RAW_LEN);
  207. #else
  208. mavlink_gps2_raw_t packet;
  209. packet.time_usec = time_usec;
  210. packet.lat = lat;
  211. packet.lon = lon;
  212. packet.alt = alt;
  213. packet.dgps_age = dgps_age;
  214. packet.eph = eph;
  215. packet.epv = epv;
  216. packet.vel = vel;
  217. packet.cog = cog;
  218. packet.fix_type = fix_type;
  219. packet.satellites_visible = satellites_visible;
  220. packet.dgps_numch = dgps_numch;
  221. packet.yaw = yaw;
  222. packet.alt_ellipsoid = alt_ellipsoid;
  223. packet.h_acc = h_acc;
  224. packet.v_acc = v_acc;
  225. packet.vel_acc = vel_acc;
  226. packet.hdg_acc = hdg_acc;
  227. memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_GPS2_RAW_LEN);
  228. #endif
  229. msg->msgid = MAVLINK_MSG_ID_GPS2_RAW;
  230. return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  231. }
  232. /**
  233. * @brief Encode a gps2_raw struct
  234. *
  235. * @param system_id ID of this system
  236. * @param component_id ID of this component (e.g. 200 for IMU)
  237. * @param msg The MAVLink message to compress the data into
  238. * @param gps2_raw C-struct to read the message contents from
  239. */
  240. static inline uint16_t mavlink_msg_gps2_raw_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_gps2_raw_t* gps2_raw)
  241. {
  242. return mavlink_msg_gps2_raw_pack(system_id, component_id, msg, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
  243. }
  244. /**
  245. * @brief Encode a gps2_raw struct on a channel
  246. *
  247. * @param system_id ID of this system
  248. * @param component_id ID of this component (e.g. 200 for IMU)
  249. * @param chan The MAVLink channel this message will be sent over
  250. * @param msg The MAVLink message to compress the data into
  251. * @param gps2_raw C-struct to read the message contents from
  252. */
  253. static inline uint16_t mavlink_msg_gps2_raw_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_gps2_raw_t* gps2_raw)
  254. {
  255. return mavlink_msg_gps2_raw_pack_chan(system_id, component_id, chan, msg, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
  256. }
  257. /**
  258. * @brief Send a gps2_raw message
  259. * @param chan MAVLink channel to send the message
  260. *
  261. * @param time_usec [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
  262. * @param fix_type GPS fix type.
  263. * @param lat [degE7] Latitude (WGS84)
  264. * @param lon [degE7] Longitude (WGS84)
  265. * @param alt [mm] Altitude (MSL). Positive for up.
  266. * @param eph GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  267. * @param epv GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  268. * @param vel [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
  269. * @param cog [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
  270. * @param satellites_visible Number of satellites visible. If unknown, set to UINT8_MAX
  271. * @param dgps_numch Number of DGPS satellites
  272. * @param dgps_age [ms] Age of DGPS info
  273. * @param yaw [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
  274. * @param alt_ellipsoid [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
  275. * @param h_acc [mm] Position uncertainty.
  276. * @param v_acc [mm] Altitude uncertainty.
  277. * @param vel_acc [mm] Speed uncertainty.
  278. * @param hdg_acc [degE5] Heading / track uncertainty
  279. */
  280. #ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS
  281. static inline void mavlink_msg_gps2_raw_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
  282. {
  283. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  284. char buf[MAVLINK_MSG_ID_GPS2_RAW_LEN];
  285. _mav_put_uint64_t(buf, 0, time_usec);
  286. _mav_put_int32_t(buf, 8, lat);
  287. _mav_put_int32_t(buf, 12, lon);
  288. _mav_put_int32_t(buf, 16, alt);
  289. _mav_put_uint32_t(buf, 20, dgps_age);
  290. _mav_put_uint16_t(buf, 24, eph);
  291. _mav_put_uint16_t(buf, 26, epv);
  292. _mav_put_uint16_t(buf, 28, vel);
  293. _mav_put_uint16_t(buf, 30, cog);
  294. _mav_put_uint8_t(buf, 32, fix_type);
  295. _mav_put_uint8_t(buf, 33, satellites_visible);
  296. _mav_put_uint8_t(buf, 34, dgps_numch);
  297. _mav_put_uint16_t(buf, 35, yaw);
  298. _mav_put_int32_t(buf, 37, alt_ellipsoid);
  299. _mav_put_uint32_t(buf, 41, h_acc);
  300. _mav_put_uint32_t(buf, 45, v_acc);
  301. _mav_put_uint32_t(buf, 49, vel_acc);
  302. _mav_put_uint32_t(buf, 53, hdg_acc);
  303. _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, buf, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  304. #else
  305. mavlink_gps2_raw_t packet;
  306. packet.time_usec = time_usec;
  307. packet.lat = lat;
  308. packet.lon = lon;
  309. packet.alt = alt;
  310. packet.dgps_age = dgps_age;
  311. packet.eph = eph;
  312. packet.epv = epv;
  313. packet.vel = vel;
  314. packet.cog = cog;
  315. packet.fix_type = fix_type;
  316. packet.satellites_visible = satellites_visible;
  317. packet.dgps_numch = dgps_numch;
  318. packet.yaw = yaw;
  319. packet.alt_ellipsoid = alt_ellipsoid;
  320. packet.h_acc = h_acc;
  321. packet.v_acc = v_acc;
  322. packet.vel_acc = vel_acc;
  323. packet.hdg_acc = hdg_acc;
  324. _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)&packet, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  325. #endif
  326. }
  327. /**
  328. * @brief Send a gps2_raw message
  329. * @param chan MAVLink channel to send the message
  330. * @param struct The MAVLink struct to serialize
  331. */
  332. static inline void mavlink_msg_gps2_raw_send_struct(mavlink_channel_t chan, const mavlink_gps2_raw_t* gps2_raw)
  333. {
  334. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  335. mavlink_msg_gps2_raw_send(chan, gps2_raw->time_usec, gps2_raw->fix_type, gps2_raw->lat, gps2_raw->lon, gps2_raw->alt, gps2_raw->eph, gps2_raw->epv, gps2_raw->vel, gps2_raw->cog, gps2_raw->satellites_visible, gps2_raw->dgps_numch, gps2_raw->dgps_age, gps2_raw->yaw, gps2_raw->alt_ellipsoid, gps2_raw->h_acc, gps2_raw->v_acc, gps2_raw->vel_acc, gps2_raw->hdg_acc);
  336. #else
  337. _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)gps2_raw, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  338. #endif
  339. }
  340. #if MAVLINK_MSG_ID_GPS2_RAW_LEN <= MAVLINK_MAX_PAYLOAD_LEN
  341. /*
  342. This variant of _send() can be used to save stack space by re-using
  343. memory from the receive buffer. The caller provides a
  344. mavlink_message_t which is the size of a full mavlink message. This
  345. is usually the receive buffer for the channel, and allows a reply to an
  346. incoming message with minimum stack space usage.
  347. */
  348. static inline void mavlink_msg_gps2_raw_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint64_t time_usec, uint8_t fix_type, int32_t lat, int32_t lon, int32_t alt, uint16_t eph, uint16_t epv, uint16_t vel, uint16_t cog, uint8_t satellites_visible, uint8_t dgps_numch, uint32_t dgps_age, uint16_t yaw, int32_t alt_ellipsoid, uint32_t h_acc, uint32_t v_acc, uint32_t vel_acc, uint32_t hdg_acc)
  349. {
  350. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  351. char *buf = (char *)msgbuf;
  352. _mav_put_uint64_t(buf, 0, time_usec);
  353. _mav_put_int32_t(buf, 8, lat);
  354. _mav_put_int32_t(buf, 12, lon);
  355. _mav_put_int32_t(buf, 16, alt);
  356. _mav_put_uint32_t(buf, 20, dgps_age);
  357. _mav_put_uint16_t(buf, 24, eph);
  358. _mav_put_uint16_t(buf, 26, epv);
  359. _mav_put_uint16_t(buf, 28, vel);
  360. _mav_put_uint16_t(buf, 30, cog);
  361. _mav_put_uint8_t(buf, 32, fix_type);
  362. _mav_put_uint8_t(buf, 33, satellites_visible);
  363. _mav_put_uint8_t(buf, 34, dgps_numch);
  364. _mav_put_uint16_t(buf, 35, yaw);
  365. _mav_put_int32_t(buf, 37, alt_ellipsoid);
  366. _mav_put_uint32_t(buf, 41, h_acc);
  367. _mav_put_uint32_t(buf, 45, v_acc);
  368. _mav_put_uint32_t(buf, 49, vel_acc);
  369. _mav_put_uint32_t(buf, 53, hdg_acc);
  370. _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, buf, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  371. #else
  372. mavlink_gps2_raw_t *packet = (mavlink_gps2_raw_t *)msgbuf;
  373. packet->time_usec = time_usec;
  374. packet->lat = lat;
  375. packet->lon = lon;
  376. packet->alt = alt;
  377. packet->dgps_age = dgps_age;
  378. packet->eph = eph;
  379. packet->epv = epv;
  380. packet->vel = vel;
  381. packet->cog = cog;
  382. packet->fix_type = fix_type;
  383. packet->satellites_visible = satellites_visible;
  384. packet->dgps_numch = dgps_numch;
  385. packet->yaw = yaw;
  386. packet->alt_ellipsoid = alt_ellipsoid;
  387. packet->h_acc = h_acc;
  388. packet->v_acc = v_acc;
  389. packet->vel_acc = vel_acc;
  390. packet->hdg_acc = hdg_acc;
  391. _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_GPS2_RAW, (const char *)packet, MAVLINK_MSG_ID_GPS2_RAW_MIN_LEN, MAVLINK_MSG_ID_GPS2_RAW_LEN, MAVLINK_MSG_ID_GPS2_RAW_CRC);
  392. #endif
  393. }
  394. #endif
  395. #endif
  396. // MESSAGE GPS2_RAW UNPACKING
  397. /**
  398. * @brief Get field time_usec from gps2_raw message
  399. *
  400. * @return [us] Timestamp (UNIX Epoch time or time since system boot). The receiving end can infer timestamp format (since 1.1.1970 or since system boot) by checking for the magnitude of the number.
  401. */
  402. static inline uint64_t mavlink_msg_gps2_raw_get_time_usec(const mavlink_message_t* msg)
  403. {
  404. return _MAV_RETURN_uint64_t(msg, 0);
  405. }
  406. /**
  407. * @brief Get field fix_type from gps2_raw message
  408. *
  409. * @return GPS fix type.
  410. */
  411. static inline uint8_t mavlink_msg_gps2_raw_get_fix_type(const mavlink_message_t* msg)
  412. {
  413. return _MAV_RETURN_uint8_t(msg, 32);
  414. }
  415. /**
  416. * @brief Get field lat from gps2_raw message
  417. *
  418. * @return [degE7] Latitude (WGS84)
  419. */
  420. static inline int32_t mavlink_msg_gps2_raw_get_lat(const mavlink_message_t* msg)
  421. {
  422. return _MAV_RETURN_int32_t(msg, 8);
  423. }
  424. /**
  425. * @brief Get field lon from gps2_raw message
  426. *
  427. * @return [degE7] Longitude (WGS84)
  428. */
  429. static inline int32_t mavlink_msg_gps2_raw_get_lon(const mavlink_message_t* msg)
  430. {
  431. return _MAV_RETURN_int32_t(msg, 12);
  432. }
  433. /**
  434. * @brief Get field alt from gps2_raw message
  435. *
  436. * @return [mm] Altitude (MSL). Positive for up.
  437. */
  438. static inline int32_t mavlink_msg_gps2_raw_get_alt(const mavlink_message_t* msg)
  439. {
  440. return _MAV_RETURN_int32_t(msg, 16);
  441. }
  442. /**
  443. * @brief Get field eph from gps2_raw message
  444. *
  445. * @return GPS HDOP horizontal dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  446. */
  447. static inline uint16_t mavlink_msg_gps2_raw_get_eph(const mavlink_message_t* msg)
  448. {
  449. return _MAV_RETURN_uint16_t(msg, 24);
  450. }
  451. /**
  452. * @brief Get field epv from gps2_raw message
  453. *
  454. * @return GPS VDOP vertical dilution of position (unitless * 100). If unknown, set to: UINT16_MAX
  455. */
  456. static inline uint16_t mavlink_msg_gps2_raw_get_epv(const mavlink_message_t* msg)
  457. {
  458. return _MAV_RETURN_uint16_t(msg, 26);
  459. }
  460. /**
  461. * @brief Get field vel from gps2_raw message
  462. *
  463. * @return [cm/s] GPS ground speed. If unknown, set to: UINT16_MAX
  464. */
  465. static inline uint16_t mavlink_msg_gps2_raw_get_vel(const mavlink_message_t* msg)
  466. {
  467. return _MAV_RETURN_uint16_t(msg, 28);
  468. }
  469. /**
  470. * @brief Get field cog from gps2_raw message
  471. *
  472. * @return [cdeg] Course over ground (NOT heading, but direction of movement): 0.0..359.99 degrees. If unknown, set to: UINT16_MAX
  473. */
  474. static inline uint16_t mavlink_msg_gps2_raw_get_cog(const mavlink_message_t* msg)
  475. {
  476. return _MAV_RETURN_uint16_t(msg, 30);
  477. }
  478. /**
  479. * @brief Get field satellites_visible from gps2_raw message
  480. *
  481. * @return Number of satellites visible. If unknown, set to UINT8_MAX
  482. */
  483. static inline uint8_t mavlink_msg_gps2_raw_get_satellites_visible(const mavlink_message_t* msg)
  484. {
  485. return _MAV_RETURN_uint8_t(msg, 33);
  486. }
  487. /**
  488. * @brief Get field dgps_numch from gps2_raw message
  489. *
  490. * @return Number of DGPS satellites
  491. */
  492. static inline uint8_t mavlink_msg_gps2_raw_get_dgps_numch(const mavlink_message_t* msg)
  493. {
  494. return _MAV_RETURN_uint8_t(msg, 34);
  495. }
  496. /**
  497. * @brief Get field dgps_age from gps2_raw message
  498. *
  499. * @return [ms] Age of DGPS info
  500. */
  501. static inline uint32_t mavlink_msg_gps2_raw_get_dgps_age(const mavlink_message_t* msg)
  502. {
  503. return _MAV_RETURN_uint32_t(msg, 20);
  504. }
  505. /**
  506. * @brief Get field yaw from gps2_raw message
  507. *
  508. * @return [cdeg] Yaw in earth frame from north. Use 0 if this GPS does not provide yaw. Use UINT16_MAX if this GPS is configured to provide yaw and is currently unable to provide it. Use 36000 for north.
  509. */
  510. static inline uint16_t mavlink_msg_gps2_raw_get_yaw(const mavlink_message_t* msg)
  511. {
  512. return _MAV_RETURN_uint16_t(msg, 35);
  513. }
  514. /**
  515. * @brief Get field alt_ellipsoid from gps2_raw message
  516. *
  517. * @return [mm] Altitude (above WGS84, EGM96 ellipsoid). Positive for up.
  518. */
  519. static inline int32_t mavlink_msg_gps2_raw_get_alt_ellipsoid(const mavlink_message_t* msg)
  520. {
  521. return _MAV_RETURN_int32_t(msg, 37);
  522. }
  523. /**
  524. * @brief Get field h_acc from gps2_raw message
  525. *
  526. * @return [mm] Position uncertainty.
  527. */
  528. static inline uint32_t mavlink_msg_gps2_raw_get_h_acc(const mavlink_message_t* msg)
  529. {
  530. return _MAV_RETURN_uint32_t(msg, 41);
  531. }
  532. /**
  533. * @brief Get field v_acc from gps2_raw message
  534. *
  535. * @return [mm] Altitude uncertainty.
  536. */
  537. static inline uint32_t mavlink_msg_gps2_raw_get_v_acc(const mavlink_message_t* msg)
  538. {
  539. return _MAV_RETURN_uint32_t(msg, 45);
  540. }
  541. /**
  542. * @brief Get field vel_acc from gps2_raw message
  543. *
  544. * @return [mm] Speed uncertainty.
  545. */
  546. static inline uint32_t mavlink_msg_gps2_raw_get_vel_acc(const mavlink_message_t* msg)
  547. {
  548. return _MAV_RETURN_uint32_t(msg, 49);
  549. }
  550. /**
  551. * @brief Get field hdg_acc from gps2_raw message
  552. *
  553. * @return [degE5] Heading / track uncertainty
  554. */
  555. static inline uint32_t mavlink_msg_gps2_raw_get_hdg_acc(const mavlink_message_t* msg)
  556. {
  557. return _MAV_RETURN_uint32_t(msg, 53);
  558. }
  559. /**
  560. * @brief Decode a gps2_raw message into a struct
  561. *
  562. * @param msg The message to decode
  563. * @param gps2_raw C-struct to decode the message contents into
  564. */
  565. static inline void mavlink_msg_gps2_raw_decode(const mavlink_message_t* msg, mavlink_gps2_raw_t* gps2_raw)
  566. {
  567. #if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
  568. gps2_raw->time_usec = mavlink_msg_gps2_raw_get_time_usec(msg);
  569. gps2_raw->lat = mavlink_msg_gps2_raw_get_lat(msg);
  570. gps2_raw->lon = mavlink_msg_gps2_raw_get_lon(msg);
  571. gps2_raw->alt = mavlink_msg_gps2_raw_get_alt(msg);
  572. gps2_raw->dgps_age = mavlink_msg_gps2_raw_get_dgps_age(msg);
  573. gps2_raw->eph = mavlink_msg_gps2_raw_get_eph(msg);
  574. gps2_raw->epv = mavlink_msg_gps2_raw_get_epv(msg);
  575. gps2_raw->vel = mavlink_msg_gps2_raw_get_vel(msg);
  576. gps2_raw->cog = mavlink_msg_gps2_raw_get_cog(msg);
  577. gps2_raw->fix_type = mavlink_msg_gps2_raw_get_fix_type(msg);
  578. gps2_raw->satellites_visible = mavlink_msg_gps2_raw_get_satellites_visible(msg);
  579. gps2_raw->dgps_numch = mavlink_msg_gps2_raw_get_dgps_numch(msg);
  580. gps2_raw->yaw = mavlink_msg_gps2_raw_get_yaw(msg);
  581. gps2_raw->alt_ellipsoid = mavlink_msg_gps2_raw_get_alt_ellipsoid(msg);
  582. gps2_raw->h_acc = mavlink_msg_gps2_raw_get_h_acc(msg);
  583. gps2_raw->v_acc = mavlink_msg_gps2_raw_get_v_acc(msg);
  584. gps2_raw->vel_acc = mavlink_msg_gps2_raw_get_vel_acc(msg);
  585. gps2_raw->hdg_acc = mavlink_msg_gps2_raw_get_hdg_acc(msg);
  586. #else
  587. uint8_t len = msg->len < MAVLINK_MSG_ID_GPS2_RAW_LEN? msg->len : MAVLINK_MSG_ID_GPS2_RAW_LEN;
  588. memset(gps2_raw, 0, MAVLINK_MSG_ID_GPS2_RAW_LEN);
  589. memcpy(gps2_raw, _MAV_PAYLOAD(msg), len);
  590. #endif
  591. }