【类 型】:faat 飞控磁罗盘校准

【原  因】:
【过  程】:1接收到命令开始校准 2通过mqtt向前端发送进度 和 结果
【影  响】:
This commit is contained in:
tk 2024-08-20 20:32:48 +08:00
parent 443111cc8d
commit e10fe665b9
3 changed files with 180 additions and 147 deletions

View File

@ -4,22 +4,23 @@
#define MAVLINK_MSG_ID_MAG_CAL_REPORT 192
MAVPACKED(
typedef struct __mavlink_mag_cal_report_t {
float fitness; /*< [mgauss] RMS milligauss residuals.*/
float ofs_x; /*< X offset.*/
float ofs_y; /*< Y offset.*/
float ofs_z; /*< Z offset.*/
float diag_x; /*< X diagonal (matrix 11).*/
float diag_y; /*< Y diagonal (matrix 22).*/
float diag_z; /*< Z diagonal (matrix 33).*/
float offdiag_x; /*< X off-diagonal (matrix 12 and 21).*/
float offdiag_y; /*< Y off-diagonal (matrix 13 and 31).*/
float offdiag_z; /*< Z off-diagonal (matrix 32 and 23).*/
uint8_t compass_id; /*< Compass being calibrated.*/
uint8_t cal_mask; /*< Bitmask of compasses being calibrated.*/
uint8_t cal_status; /*< Calibration Status.*/
uint8_t autosaved; /*< 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters.*/
}) mavlink_mag_cal_report_t;
typedef struct __mavlink_mag_cal_report_t {
float fitness; /*< [mgauss] RMS milligauss residuals.*/
float ofs_x; /*< X offset.*/
float ofs_y; /*< Y offset.*/
float ofs_z; /*< Z offset.*/
float diag_x; /*< X diagonal (matrix 11).*/
float diag_y; /*< Y diagonal (matrix 22).*/
float diag_z; /*< Z diagonal (matrix 33).*/
float offdiag_x; /*< X off-diagonal (matrix 12 and 21).*/
float offdiag_y; /*< Y off-diagonal (matrix 13 and 31).*/
float offdiag_z; /*< Z off-diagonal (matrix 32 and 23).*/
uint8_t compass_id; /*< Compass being calibrated.*/
uint8_t cal_mask; /*< Bitmask of compasses being calibrated.*/
uint8_t cal_status; /*< Calibration Status.*/
uint8_t autosaved; /*< 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters.*/
})
mavlink_mag_cal_report_t;
#define MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN 44
#define MAVLINK_MSG_ID_MAG_CAL_REPORT_MIN_LEN 44
@ -29,49 +30,51 @@ typedef struct __mavlink_mag_cal_report_t {
#define MAVLINK_MSG_ID_MAG_CAL_REPORT_CRC 36
#define MAVLINK_MSG_ID_192_CRC 36
#if MAVLINK_COMMAND_24BIT
#define MAVLINK_MESSAGE_INFO_MAG_CAL_REPORT { \
192, \
"MAG_CAL_REPORT", \
14, \
{ { "compass_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_mag_cal_report_t, compass_id) }, \
{ "cal_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_mag_cal_report_t, cal_mask) }, \
{ "cal_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_mag_cal_report_t, cal_status) }, \
{ "autosaved", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_mag_cal_report_t, autosaved) }, \
{ "fitness", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_mag_cal_report_t, fitness) }, \
{ "ofs_x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_mag_cal_report_t, ofs_x) }, \
{ "ofs_y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_mag_cal_report_t, ofs_y) }, \
{ "ofs_z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_mag_cal_report_t, ofs_z) }, \
{ "diag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_mag_cal_report_t, diag_x) }, \
{ "diag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_mag_cal_report_t, diag_y) }, \
{ "diag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_mag_cal_report_t, diag_z) }, \
{ "offdiag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_mag_cal_report_t, offdiag_x) }, \
{ "offdiag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_mag_cal_report_t, offdiag_y) }, \
{ "offdiag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_mag_cal_report_t, offdiag_z) }, \
} \
}
#define MAVLINK_MESSAGE_INFO_MAG_CAL_REPORT \
{ \
192, \
"MAG_CAL_REPORT", \
14, \
{ \
{"compass_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_mag_cal_report_t, compass_id)}, \
{"cal_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_mag_cal_report_t, cal_mask)}, \
{"cal_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_mag_cal_report_t, cal_status)}, \
{"autosaved", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_mag_cal_report_t, autosaved)}, \
{"fitness", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_mag_cal_report_t, fitness)}, \
{"ofs_x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_mag_cal_report_t, ofs_x)}, \
{"ofs_y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_mag_cal_report_t, ofs_y)}, \
{"ofs_z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_mag_cal_report_t, ofs_z)}, \
{"diag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_mag_cal_report_t, diag_x)}, \
{"diag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_mag_cal_report_t, diag_y)}, \
{"diag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_mag_cal_report_t, diag_z)}, \
{"offdiag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_mag_cal_report_t, offdiag_x)}, \
{"offdiag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_mag_cal_report_t, offdiag_y)}, \
{"offdiag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_mag_cal_report_t, offdiag_z)}, \
} \
}
#else
#define MAVLINK_MESSAGE_INFO_MAG_CAL_REPORT { \
"MAG_CAL_REPORT", \
14, \
{ { "compass_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_mag_cal_report_t, compass_id) }, \
{ "cal_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_mag_cal_report_t, cal_mask) }, \
{ "cal_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_mag_cal_report_t, cal_status) }, \
{ "autosaved", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_mag_cal_report_t, autosaved) }, \
{ "fitness", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_mag_cal_report_t, fitness) }, \
{ "ofs_x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_mag_cal_report_t, ofs_x) }, \
{ "ofs_y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_mag_cal_report_t, ofs_y) }, \
{ "ofs_z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_mag_cal_report_t, ofs_z) }, \
{ "diag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_mag_cal_report_t, diag_x) }, \
{ "diag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_mag_cal_report_t, diag_y) }, \
{ "diag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_mag_cal_report_t, diag_z) }, \
{ "offdiag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_mag_cal_report_t, offdiag_x) }, \
{ "offdiag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_mag_cal_report_t, offdiag_y) }, \
{ "offdiag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_mag_cal_report_t, offdiag_z) }, \
} \
}
#define MAVLINK_MESSAGE_INFO_MAG_CAL_REPORT \
{ \
"MAG_CAL_REPORT", \
14, \
{ \
{"compass_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 40, offsetof(mavlink_mag_cal_report_t, compass_id)}, \
{"cal_mask", NULL, MAVLINK_TYPE_UINT8_T, 0, 41, offsetof(mavlink_mag_cal_report_t, cal_mask)}, \
{"cal_status", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_mag_cal_report_t, cal_status)}, \
{"autosaved", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_mag_cal_report_t, autosaved)}, \
{"fitness", NULL, MAVLINK_TYPE_FLOAT, 0, 0, offsetof(mavlink_mag_cal_report_t, fitness)}, \
{"ofs_x", NULL, MAVLINK_TYPE_FLOAT, 0, 4, offsetof(mavlink_mag_cal_report_t, ofs_x)}, \
{"ofs_y", NULL, MAVLINK_TYPE_FLOAT, 0, 8, offsetof(mavlink_mag_cal_report_t, ofs_y)}, \
{"ofs_z", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_mag_cal_report_t, ofs_z)}, \
{"diag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_mag_cal_report_t, diag_x)}, \
{"diag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_mag_cal_report_t, diag_y)}, \
{"diag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_mag_cal_report_t, diag_z)}, \
{"offdiag_x", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_mag_cal_report_t, offdiag_x)}, \
{"offdiag_y", NULL, MAVLINK_TYPE_FLOAT, 0, 32, offsetof(mavlink_mag_cal_report_t, offdiag_y)}, \
{"offdiag_z", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_mag_cal_report_t, offdiag_z)}, \
} \
}
#endif
/**
@ -96,8 +99,8 @@ typedef struct __mavlink_mag_cal_report_t {
* @param offdiag_z Z off-diagonal (matrix 32 and 23).
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mag_cal_report_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
uint8_t compass_id, uint8_t cal_mask, uint8_t cal_status, uint8_t autosaved, float fitness, float ofs_x, float ofs_y, float ofs_z, float diag_x, float diag_y, float diag_z, float offdiag_x, float offdiag_y, float offdiag_z)
static inline uint16_t mavlink_msg_mag_cal_report_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t *msg,
uint8_t compass_id, uint8_t cal_mask, uint8_t cal_status, uint8_t autosaved, float fitness, float ofs_x, float ofs_y, float ofs_z, float diag_x, float diag_y, float diag_z, float offdiag_x, float offdiag_y, float offdiag_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN];
@ -116,7 +119,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack(uint8_t system_id, uint8_
_mav_put_uint8_t(buf, 42, cal_status);
_mav_put_uint8_t(buf, 43, autosaved);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
#else
mavlink_mag_cal_report_t packet;
packet.fitness = fitness;
@ -134,7 +137,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack(uint8_t system_id, uint8_
packet.cal_status = cal_status;
packet.autosaved = autosaved;
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
#endif
msg->msgid = MAVLINK_MSG_ID_MAG_CAL_REPORT;
@ -164,8 +167,8 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack(uint8_t system_id, uint8_
* @return length of the message in bytes (excluding serial stream start sign)
*/
static inline uint16_t mavlink_msg_mag_cal_report_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
mavlink_message_t* msg,
uint8_t compass_id,uint8_t cal_mask,uint8_t cal_status,uint8_t autosaved,float fitness,float ofs_x,float ofs_y,float ofs_z,float diag_x,float diag_y,float diag_z,float offdiag_x,float offdiag_y,float offdiag_z)
mavlink_message_t *msg,
uint8_t compass_id, uint8_t cal_mask, uint8_t cal_status, uint8_t autosaved, float fitness, float ofs_x, float ofs_y, float ofs_z, float diag_x, float diag_y, float diag_z, float offdiag_x, float offdiag_y, float offdiag_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char buf[MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN];
@ -184,7 +187,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack_chan(uint8_t system_id, u
_mav_put_uint8_t(buf, 42, cal_status);
_mav_put_uint8_t(buf, 43, autosaved);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
#else
mavlink_mag_cal_report_t packet;
packet.fitness = fitness;
@ -202,7 +205,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack_chan(uint8_t system_id, u
packet.cal_status = cal_status;
packet.autosaved = autosaved;
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
#endif
msg->msgid = MAVLINK_MSG_ID_MAG_CAL_REPORT;
@ -217,7 +220,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_pack_chan(uint8_t system_id, u
* @param msg The MAVLink message to compress the data into
* @param mag_cal_report C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mag_cal_report_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_mag_cal_report_t* mag_cal_report)
static inline uint16_t mavlink_msg_mag_cal_report_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t *msg, const mavlink_mag_cal_report_t *mag_cal_report)
{
return mavlink_msg_mag_cal_report_pack(system_id, component_id, msg, mag_cal_report->compass_id, mag_cal_report->cal_mask, mag_cal_report->cal_status, mag_cal_report->autosaved, mag_cal_report->fitness, mag_cal_report->ofs_x, mag_cal_report->ofs_y, mag_cal_report->ofs_z, mag_cal_report->diag_x, mag_cal_report->diag_y, mag_cal_report->diag_z, mag_cal_report->offdiag_x, mag_cal_report->offdiag_y, mag_cal_report->offdiag_z);
}
@ -231,7 +234,7 @@ static inline uint16_t mavlink_msg_mag_cal_report_encode(uint8_t system_id, uint
* @param msg The MAVLink message to compress the data into
* @param mag_cal_report C-struct to read the message contents from
*/
static inline uint16_t mavlink_msg_mag_cal_report_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_mag_cal_report_t* mag_cal_report)
static inline uint16_t mavlink_msg_mag_cal_report_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t *msg, const mavlink_mag_cal_report_t *mag_cal_report)
{
return mavlink_msg_mag_cal_report_pack_chan(system_id, component_id, chan, msg, mag_cal_report->compass_id, mag_cal_report->cal_mask, mag_cal_report->cal_status, mag_cal_report->autosaved, mag_cal_report->fitness, mag_cal_report->ofs_x, mag_cal_report->ofs_y, mag_cal_report->ofs_z, mag_cal_report->diag_x, mag_cal_report->diag_y, mag_cal_report->diag_z, mag_cal_report->offdiag_x, mag_cal_report->offdiag_y, mag_cal_report->offdiag_z);
}
@ -303,7 +306,7 @@ static inline void mavlink_msg_mag_cal_report_send(mavlink_channel_t chan, uint8
* @param chan MAVLink channel to send the message
* @param struct The MAVLink struct to serialize
*/
static inline void mavlink_msg_mag_cal_report_send_struct(mavlink_channel_t chan, const mavlink_mag_cal_report_t* mag_cal_report)
static inline void mavlink_msg_mag_cal_report_send_struct(mavlink_channel_t chan, const mavlink_mag_cal_report_t *mag_cal_report)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
mavlink_msg_mag_cal_report_send(chan, mag_cal_report->compass_id, mag_cal_report->cal_mask, mag_cal_report->cal_status, mag_cal_report->autosaved, mag_cal_report->fitness, mag_cal_report->ofs_x, mag_cal_report->ofs_y, mag_cal_report->ofs_z, mag_cal_report->diag_x, mag_cal_report->diag_y, mag_cal_report->diag_z, mag_cal_report->offdiag_x, mag_cal_report->offdiag_y, mag_cal_report->offdiag_z);
@ -320,7 +323,7 @@ static inline void mavlink_msg_mag_cal_report_send_struct(mavlink_channel_t chan
is usually the receive buffer for the channel, and allows a reply to an
incoming message with minimum stack space usage.
*/
static inline void mavlink_msg_mag_cal_report_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t compass_id, uint8_t cal_mask, uint8_t cal_status, uint8_t autosaved, float fitness, float ofs_x, float ofs_y, float ofs_z, float diag_x, float diag_y, float diag_z, float offdiag_x, float offdiag_y, float offdiag_z)
static inline void mavlink_msg_mag_cal_report_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan, uint8_t compass_id, uint8_t cal_mask, uint8_t cal_status, uint8_t autosaved, float fitness, float ofs_x, float ofs_y, float ofs_z, float diag_x, float diag_y, float diag_z, float offdiag_x, float offdiag_y, float offdiag_z)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
char *buf = (char *)msgbuf;
@ -366,15 +369,14 @@ static inline void mavlink_msg_mag_cal_report_send_buf(mavlink_message_t *msgbuf
// MESSAGE MAG_CAL_REPORT UNPACKING
/**
* @brief Get field compass_id from mag_cal_report message
*
* @return Compass being calibrated.
*/
static inline uint8_t mavlink_msg_mag_cal_report_get_compass_id(const mavlink_message_t* msg)
static inline uint8_t mavlink_msg_mag_cal_report_get_compass_id(const mavlink_message_t *msg)
{
return _MAV_RETURN_uint8_t(msg, 40);
return _MAV_RETURN_uint8_t(msg, 40);
}
/**
@ -382,9 +384,9 @@ static inline uint8_t mavlink_msg_mag_cal_report_get_compass_id(const mavlink_me
*
* @return Bitmask of compasses being calibrated.
*/
static inline uint8_t mavlink_msg_mag_cal_report_get_cal_mask(const mavlink_message_t* msg)
static inline uint8_t mavlink_msg_mag_cal_report_get_cal_mask(const mavlink_message_t *msg)
{
return _MAV_RETURN_uint8_t(msg, 41);
return _MAV_RETURN_uint8_t(msg, 41);
}
/**
@ -392,9 +394,9 @@ static inline uint8_t mavlink_msg_mag_cal_report_get_cal_mask(const mavlink_mess
*
* @return Calibration Status.
*/
static inline uint8_t mavlink_msg_mag_cal_report_get_cal_status(const mavlink_message_t* msg)
static inline uint8_t mavlink_msg_mag_cal_report_get_cal_status(const mavlink_message_t *msg)
{
return _MAV_RETURN_uint8_t(msg, 42);
return _MAV_RETURN_uint8_t(msg, 42);
}
/**
@ -402,9 +404,9 @@ static inline uint8_t mavlink_msg_mag_cal_report_get_cal_status(const mavlink_me
*
* @return 0=requires a MAV_CMD_DO_ACCEPT_MAG_CAL, 1=saved to parameters.
*/
static inline uint8_t mavlink_msg_mag_cal_report_get_autosaved(const mavlink_message_t* msg)
static inline uint8_t mavlink_msg_mag_cal_report_get_autosaved(const mavlink_message_t *msg)
{
return _MAV_RETURN_uint8_t(msg, 43);
return _MAV_RETURN_uint8_t(msg, 43);
}
/**
@ -412,9 +414,9 @@ static inline uint8_t mavlink_msg_mag_cal_report_get_autosaved(const mavlink_mes
*
* @return [mgauss] RMS milligauss residuals.
*/
static inline float mavlink_msg_mag_cal_report_get_fitness(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_fitness(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 0);
return _MAV_RETURN_float(msg, 0);
}
/**
@ -422,9 +424,9 @@ static inline float mavlink_msg_mag_cal_report_get_fitness(const mavlink_message
*
* @return X offset.
*/
static inline float mavlink_msg_mag_cal_report_get_ofs_x(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_ofs_x(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 4);
return _MAV_RETURN_float(msg, 4);
}
/**
@ -432,9 +434,9 @@ static inline float mavlink_msg_mag_cal_report_get_ofs_x(const mavlink_message_t
*
* @return Y offset.
*/
static inline float mavlink_msg_mag_cal_report_get_ofs_y(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_ofs_y(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 8);
return _MAV_RETURN_float(msg, 8);
}
/**
@ -442,9 +444,9 @@ static inline float mavlink_msg_mag_cal_report_get_ofs_y(const mavlink_message_t
*
* @return Z offset.
*/
static inline float mavlink_msg_mag_cal_report_get_ofs_z(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_ofs_z(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 12);
return _MAV_RETURN_float(msg, 12);
}
/**
@ -452,9 +454,9 @@ static inline float mavlink_msg_mag_cal_report_get_ofs_z(const mavlink_message_t
*
* @return X diagonal (matrix 11).
*/
static inline float mavlink_msg_mag_cal_report_get_diag_x(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_diag_x(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 16);
return _MAV_RETURN_float(msg, 16);
}
/**
@ -462,9 +464,9 @@ static inline float mavlink_msg_mag_cal_report_get_diag_x(const mavlink_message_
*
* @return Y diagonal (matrix 22).
*/
static inline float mavlink_msg_mag_cal_report_get_diag_y(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_diag_y(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 20);
return _MAV_RETURN_float(msg, 20);
}
/**
@ -472,9 +474,9 @@ static inline float mavlink_msg_mag_cal_report_get_diag_y(const mavlink_message_
*
* @return Z diagonal (matrix 33).
*/
static inline float mavlink_msg_mag_cal_report_get_diag_z(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_diag_z(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 24);
return _MAV_RETURN_float(msg, 24);
}
/**
@ -482,9 +484,9 @@ static inline float mavlink_msg_mag_cal_report_get_diag_z(const mavlink_message_
*
* @return X off-diagonal (matrix 12 and 21).
*/
static inline float mavlink_msg_mag_cal_report_get_offdiag_x(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_offdiag_x(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 28);
return _MAV_RETURN_float(msg, 28);
}
/**
@ -492,9 +494,9 @@ static inline float mavlink_msg_mag_cal_report_get_offdiag_x(const mavlink_messa
*
* @return Y off-diagonal (matrix 13 and 31).
*/
static inline float mavlink_msg_mag_cal_report_get_offdiag_y(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_offdiag_y(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 32);
return _MAV_RETURN_float(msg, 32);
}
/**
@ -502,9 +504,9 @@ static inline float mavlink_msg_mag_cal_report_get_offdiag_y(const mavlink_messa
*
* @return Z off-diagonal (matrix 32 and 23).
*/
static inline float mavlink_msg_mag_cal_report_get_offdiag_z(const mavlink_message_t* msg)
static inline float mavlink_msg_mag_cal_report_get_offdiag_z(const mavlink_message_t *msg)
{
return _MAV_RETURN_float(msg, 36);
return _MAV_RETURN_float(msg, 36);
}
/**
@ -513,7 +515,7 @@ static inline float mavlink_msg_mag_cal_report_get_offdiag_z(const mavlink_messa
* @param msg The message to decode
* @param mag_cal_report C-struct to decode the message contents into
*/
static inline void mavlink_msg_mag_cal_report_decode(const mavlink_message_t* msg, mavlink_mag_cal_report_t* mag_cal_report)
static inline void mavlink_msg_mag_cal_report_decode(const mavlink_message_t *msg, mavlink_mag_cal_report_t *mag_cal_report)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
mag_cal_report->fitness = mavlink_msg_mag_cal_report_get_fitness(msg);
@ -531,8 +533,8 @@ static inline void mavlink_msg_mag_cal_report_decode(const mavlink_message_t* ms
mag_cal_report->cal_status = mavlink_msg_mag_cal_report_get_cal_status(msg);
mag_cal_report->autosaved = mavlink_msg_mag_cal_report_get_autosaved(msg);
#else
uint8_t len = msg->len < MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN? msg->len : MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN;
memset(mag_cal_report, 0, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
uint8_t len = msg->len < MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN ? msg->len : MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN;
memset(mag_cal_report, 0, MAVLINK_MSG_ID_MAG_CAL_REPORT_LEN);
memcpy(mag_cal_report, _MAV_PAYLOAD(msg), len);
#endif
}

View File

@ -753,7 +753,7 @@ void FoodCube::mav_command(uint8_t controlType, uint16_t param[])
cmd.param1 = param[0]; // 0:加锁 1解锁
cmd.param2 = param[1]; // 0:符合条件加解锁 21196:强制加解锁
}
if (controlType == 6)
else if (controlType == 6)
{ // 测试起飞
float p = (float)param[0];
cmd.command = MAV_CMD_NAV_TAKEOFF;
@ -765,16 +765,21 @@ void FoodCube::mav_command(uint8_t controlType, uint16_t param[])
cmd.param6 = 0;
cmd.param7 = p; // 起飞高度
}
if (controlType == 8)
else if (controlType == 8)
{ // 降落
cmd.command = MAV_CMD_NAV_LAND;
}
if (controlType == 11)
{ // 磁罗盘校准
else if (controlType == 11)
{
// 磁罗盘校准
cmd.command = MAV_CMD_DO_START_MAG_CAL;
cmd.param1 = 0;
cmd.param2 = 1;
cmd.param3 = 1;
cmd.param1 = 0; // 磁罗盘的bitmask0表示所有
cmd.param2 = 0; // 自动重试0=不重试, 1=重试)
cmd.param3 = 0; // 是否自动保存0=需要用户输入, 1=自动保存)
cmd.param4 = 0; // 延迟(秒)
cmd.param5 = 0; // 自动重启0=用户重启, 1=自动重启)
cmd.param6 = 0; // 保留空参数
cmd.param7 = 0; // 保留空参数
}
mavlink_msg_command_long_encode(MAVLINK_SYSTEM_ID, MAVLINK_COMPONENT_ID, &msg, &cmd);
int len = mavlink_msg_to_send_buffer(buf, &msg);

View File

@ -14,12 +14,12 @@ extern void Hook_recovery();
static const char *MOUDLENAME = "COMMSER";
/*项目对象*/
// char *ssid = "szMate40pro"; // wifi帐号
// char *password = "63587839ab"; // wifi密码
char *ssid = "szMate40pro"; // wifi帐号
char *password = "63587839ab"; // wifi密码
// char* ssid = "szdot"; //wifi帐号
// char* password = "63587839ab"; //wifi密码
char *ssid = "flicube"; // wifi帐号
char *password = "fxmf0622"; // wifi密码
// char *ssid = "flicube"; // wifi帐号
// char *password = "fxmf0622"; // wifi密码
// char *ssid = "fxmf_sc01"; // 4g wifi帐号
// char *password = "12345678"; // 4g wifi密码
char *mqttServer = "szdot.top"; // mqtt地址
@ -34,8 +34,8 @@ uint32_t udpServerPort = 37260; // 云台相机端口
FoodCube fc(ssid, password, mqttServer, mqttPort, mqttName, mqttPassword, mavlinkSerial, voiceSerial, udpServerIP, udpServerPort); // 创建项目对象
/* 发布 主题 ps:以下是登记发布json内容的组成元素 */
// 登记 json成员名字
// 0:心跳信息 1:电压信息 2:电流信息 3:电池电量 4:海拔高度 5:对地速度 6:卫星数量 7:纬度 8:经度 9:定位状态 10:飞机状态 11:网速测试 12:飞机模式 13:重量 14:钩子状态 15:{经度,维度,相对高度} 16:电池总容量 17:返航点 18:文本信息 19返航速度
const String topicPub[] = {"heartBeat", "voltagBattery", "currentBattery", "batteryRemaining", "positionAlt", "groundSpeed", "satCount", "latitude", "longitude", "fixType", "state", "pingNet", "getPlaneMode", "loadweight", "hookstatus", "position", "battCapacity", "homePosition", "statusText", "wpnavSpeed"};
// 0:心跳信息 1:电压信息 2:电流信息 3:电池电量 4:海拔高度 5:对地速度 6:卫星数量 7:定位状态 8:磁罗盘校准进度 9磁罗盘校准是否成功 10:飞机状态 11:网速测试 12:飞机模式 13:重量 14:钩子状态 15:{经度,维度,相对高度} 16:电池总容量 17:返航点 18:文本信息 19返航速度
const String topicPub[] = {"heartBeat", "voltagBattery", "currentBattery", "batteryRemaining", "positionAlt", "groundSpeed", "satCount", "fixType", "completionPct", "reportCal", "state", "pingNet", "getPlaneMode", "loadweight", "hookstatus", "position", "battCapacity", "homePosition", "statusText", "wpnavSpeed"};
const int topicPubCount = sizeof(topicPub) / sizeof(topicPub[0]); // 登记 json成员总数
String topicPubMsg[topicPubCount] = {""}; // 登记 json成员的值 对应topicPub
/*触发发送 主题*/
@ -123,7 +123,7 @@ void mqtt_receiveCallback(char *topic, byte *payload, unsigned int length)
}
else
{
uint16_t chan[] = {1500, 1500, 1300, 1500}; // 除了加解锁模式 油门全部控制居中
uint16_t chan[] = {1500, 1500, 1500, 1500}; // 除了加解锁模式 油门全部控制居中
fc.mav_channels_override(chan); // 控制油门
}
if (n == 6)
@ -139,17 +139,22 @@ void mqtt_receiveCallback(char *topic, byte *payload, unsigned int length)
{ // 5 航点执行
fc.mav_set_mode(3); // 飞控设置成auto自动模式
}
else if (n == 8)
{ // 8降落*
else if (n == 8) // 8降落
{
fc.mav_command(n, param);
}
else if (n == 9)
{ // 9返航
fc.mav_set_mode(6); // 飞控设置成RTL返航
}
else if (n == 11)
{ // 11磁罗盘校准
else if (n == 11) // 11磁罗盘校准
{
/*初始化磁罗盘校准进度 和 校准结果*/
topicPubMsg[8] = "";
topicPubMsg[9] = "";
/*校准*/
fc.mav_command(n, param);
fc.playText("校准磁罗盘");
}
}
else if (key == "refreshRequest")
@ -378,10 +383,7 @@ void mavlink_receiveCallback(uint8_t c)
home_pos.latitude, // 纬度以degE7单位传递
home_pos.z); // 相对高度,单位为米
if (topicPubMsg[17] != buf)
{
topicPubMsg[17] = buf;
}
topicPubMsg[17] = buf;
}
case MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN: // #49 飞机原点
{
@ -399,6 +401,31 @@ void mavlink_receiveCallback(uint8_t c)
// }
}
break;
case MAVLINK_MSG_ID_MAG_CAL_REPORT: // #192 磁罗盘校准结果
{
mavlink_mag_cal_report_t report;
mavlink_msg_mag_cal_report_decode(&msg, &report);
if (report.cal_status == MAG_CAL_SUCCESS)
{
topicPubMsg[9] = "successful"; // 校准成功
}
else
{
topicPubMsg[9] = "failed"; // 校准失败
}
}
break;
case MAVLINK_MSG_ID_MAG_CAL_PROGRESS: // #191 磁罗盘校准进度
{
mavlink_mag_cal_progress_t progress;
mavlink_msg_mag_cal_progress_decode(&msg, &progress);
sprintf(buf, "%d", progress.completion_pct);
topicPubMsg[8] = buf;
}
break;
case MAVLINK_MSG_ID_HEARTBEAT: // #0: Heartbeat 心跳
{
mavlink_heartbeat_t heartbeat; // 解构的数据放到这个对象
@ -588,46 +615,38 @@ void mavlink_receiveCallback(uint8_t c)
{
topicPubMsg[6] = buf;
}
// 纬度
sprintf(buf, "%.7f", (double)gps_raw_int.lat / 10000000);
if (topicPubMsg[7] != buf)
{
topicPubMsg[7] = buf;
}
// 经度
sprintf(buf, "%.7f", (double)gps_raw_int.lon / 10000000);
if (topicPubMsg[8] != buf)
{
topicPubMsg[8] = buf;
}
// 卫星状态
switch (gps_raw_int.fix_type)
{
case 0:
topicPubMsg[9] = "No Fix"; // 无定位
topicPubMsg[7] = "No Fix"; // 无定位
break;
case 1:
topicPubMsg[9] = "Bad Fix"; // 差的定位(无效数据)
topicPubMsg[7] = "Bad Fix"; // 差的定位(无效数据)
break;
case 2:
topicPubMsg[9] = "2D Fix"; // 2D定位只有经纬度
topicPubMsg[7] = "2D Fix"; // 2D定位只有经纬度
break;
case 3:
topicPubMsg[9] = "3D Fix"; // 3D定位经纬度和高度
topicPubMsg[7] = "3D Fix"; // 3D定位经纬度和高度
break;
case 4:
topicPubMsg[9] = "DGPS"; // 差分GPS使用地面站进行修正,不使用rkt最多只能到DGPS
topicPubMsg[7] = "DGPS"; // 差分GPS使用地面站进行修正,不使用rkt最多只能到DGPS
break;
case 5:
topicPubMsg[9] = "Float"; // RTK浮动解精度较高但不如固定解
topicPubMsg[7] = "Float"; // RTK浮动解精度较高但不如固定解
break;
case 6:
topicPubMsg[9] = "RTK Fixed"; // RTK固定解高精度定位
topicPubMsg[7] = "RTK Fixed"; // RTK固定解高精度定位
break;
default:
topicPubMsg[9] = "Unknown"; // 未知状态
topicPubMsg[7] = "Unknown"; // 未知状态
break;
}
// 纬度
// sprintf(buf, "%.7f", (double)gps_raw_int.lat / 10000000);
// 经度
// sprintf(buf, "%.7f", (double)gps_raw_int.lon / 10000000);
}
break;
@ -761,20 +780,27 @@ void pubThread()
}
/*解析mavlink 数据流等 此函数内会把解析的数据按信息类型 发布到mqtt服务器 planeState/macadd主题 */
// 创建一个JSON对象
DynamicJsonDocument doc(2000); // 缓冲区
DynamicJsonDocument doc(512); // 缓冲区
// 遍历 有更新的数据 组成一个json对象
for (int i = 0; i < topicPubCount; i++)
{
if (i == 0 || i == 10) // 心跳每次发 飞机状态 需要每次必发的写在这里
if (i == 0 || i == 10) // 每次必发的写在这里
{
doc[topicPub[i]] = topicPubMsg[i];
}
else // 其余有新值
else if (i == 8 || i == 9) // 有新值发 但是不重置
{
if (topicPubMsg[i] != "")
{
doc[topicPub[i]] = topicPubMsg[i];
topicPubMsg[i] = "";
}
}
else // 其余有新值就发 发出后重置
{
if (topicPubMsg[i] != "")
{
doc[topicPub[i]] = topicPubMsg[i];
topicPubMsg[i] = ""; // 重置
}
}
}