Files
gcs-nf/MavLinkNode/mavlinknode.h
T

376 lines
9.7 KiB
C++
Raw Normal View History

2024-09-12 14:24:53 +08:00
#ifndef MAVLINKNODE_H
2020-03-07 14:46:50 +08:00
#define MAVLINKNODE_H
#include <QObject>
#include "QThread"
2020-08-20 17:48:09 +08:00
#include "QFile"
2020-03-07 14:46:50 +08:00
#include "QDebug"
#include "mavlink.h"
2020-08-20 17:48:09 +08:00
#include "replay.h"
2020-03-07 14:46:50 +08:00
#include "missionprocess.h"
#include "parameterprocess.h"
2020-04-03 09:39:31 +08:00
#include "commandprocess.h"
2020-12-10 18:47:49 +08:00
#include "statusprocess.h"
2020-12-16 16:49:51 +08:00
#include "Terminal.h"
2021-11-13 20:06:59 +08:00
#include "sbusparser.h"
//#include "QAxObject"
2020-12-15 13:47:14 +08:00
2021-11-13 20:06:59 +08:00
#include "rcprocess.h"
#include "rtkprocess.h"
#include "ThreadTemplet.h"
2020-12-15 13:47:14 +08:00
2022-05-26 14:03:37 +08:00
#include "ParsePack.h"
2022-06-07 17:48:52 +08:00
#include "QTime"
2022-07-18 12:35:04 +08:00
#include "QDateTime"
2024-09-19 10:12:11 +08:00
#include <QTimer>
2022-05-26 14:03:37 +08:00
2020-03-07 14:46:50 +08:00
#ifdef QtMavlinkNode
#include <mavlinknodeglobal.h>
2021-11-13 20:06:59 +08:00
class MAVLINKNODESHARED_EXPORT MavLinkNode : public ThreadTemplet {
2020-03-07 14:46:50 +08:00
#else
2021-11-13 20:06:59 +08:00
class MavLinkNode : public ThreadTemplet
2020-03-07 14:46:50 +08:00
{
#endif
Q_OBJECT
2021-11-13 20:06:59 +08:00
public:
2020-03-07 14:46:50 +08:00
2022-05-26 18:55:27 +08:00
typedef struct
{
quint16 year;
quint8 mon;
quint8 day;
quint8 hour;
quint8 min;
quint8 sec;
quint16 ms;
}_gpsTimer;
2020-03-07 14:46:50 +08:00
typedef struct {
2021-11-13 20:06:59 +08:00
int sysid = 0; /* ID of message sender system/aircraft */
int compid = 0; /* ID of the message sender component */
2023-05-17 16:27:12 +08:00
qint64 timebase;
2021-11-13 20:06:59 +08:00
mavlink_autopilot_version_t autopilot_version = {0};
mavlink_sys_status_t sys_status = {0};
mavlink_heartbeat_t heartbeat = {0};
mavlink_ping_t ping = {0};
mavlink_attitude_t attitude = {0};
mavlink_ins1_t ins1 = {0};
mavlink_ins2_t ins2 = {0};
mavlink_gps_raw_int_t gps_raw_int = {0};
mavlink_global_position_int_t global_position_int = {0};
mavlink_servo_output_raw_t servo_output_raw = {0};
mavlink_rc_channels_raw_t rc_channels_raw = {0};
mavlink_nav_controller_output_t nav_controller_output = {0};
mavlink_airspeed_autocal_t airspeed_autocal = {0};
mavlink_rpm_t rpm = {0};
mavlink_scaled_pressure_t scaled_pressure = {0};
mavlink_extended_sys_state_t extended_sys_state = {0};
mavlink_battery_status_t battery_status = {0};
mavlink_vibration_t vibration = {0};
mavlink_enginestate_t enginestate = {0};
mavlink_vfr_hud_t vfr_hud = {0};
mavlink_aoa_ssa_t aoa_ssa = {0};
mavlink_emb_atmo_com_t emb_atom_com = {0};
mavlink_turbinestate_t turbinstate = {0};
mavlink_bmustate_t bmustate = {0};
mavlink_ccmstate_t ccmstate = {0};
mavlink_serial_control_t serial_control = {0};
2020-10-07 12:24:23 +08:00
2020-03-07 14:46:50 +08:00
}_vehicle;
2023-02-13 21:55:03 +08:00
typedef struct
{
2024-09-22 10:53:28 +08:00
uint16_t flag;//
2023-02-13 21:55:03 +08:00
uint16_t id;//1
int32_t time;//(second+min*60+hour*3600)*1000
int32_t lng;//*10000000
int32_t lat;//*10000000
int32_t alt;//*100
int32_t ve;//*100
int32_t vn;//*100
int32_t vu;//*100
int32_t v;//*100
int32_t course;//*100
int32_t backup1;//*100
int32_t backup2;//*100
}_showinfo;//192.168.5.72:10049
2020-10-15 22:21:38 +08:00
2021-11-13 20:06:59 +08:00
2020-03-07 14:46:50 +08:00
explicit MavLinkNode(QObject *parent = nullptr);
~MavLinkNode();
2022-05-26 18:55:27 +08:00
_gpsTimer gpsTimer;
2021-11-13 20:06:59 +08:00
_vehicle vehicle;//没有初始化,所以会有野值
QHash<int,_vehicle> vehicleList;
2020-08-20 17:48:09 +08:00
Replay *replay = nullptr;
2020-08-20 17:48:09 +08:00
MissionProcess *Mission = nullptr;
ParameterProcess *Parameter = nullptr;
commandprocess *Commander = nullptr;
2020-12-10 18:47:49 +08:00
statusprocess *Status = nullptr;
2020-12-16 16:49:51 +08:00
terminal *Terminal = nullptr;
2021-11-13 20:06:59 +08:00
rcprocess *RC = nullptr;
rtkprocess *rtk = nullptr;
2020-12-10 18:47:49 +08:00
2020-10-12 14:39:16 +08:00
bool isCommunicationLost = false;
2020-08-04 23:18:58 +08:00
2020-12-13 11:00:31 +08:00
uint64_t rate_in = 0;
uint64_t count_in = 0;
uint64_t rate_out = 0;
uint64_t count_out = 0;
2020-10-13 18:41:23 +08:00
uint64_t bittotal = 0;
uint64_t parserSuccess = 0;
uint64_t parserFailure = 0;
uint64_t TotalFrame_1s = 0;
uint64_t LossFrame_1s = 0;
2020-10-13 18:41:23 +08:00
float rssi = 100;
2021-11-13 20:06:59 +08:00
QByteArray rtkrawdata;
2021-11-13 20:06:59 +08:00
QFile * autopilot_version_file = nullptr;
QFile * sys_status_file = nullptr;
QFile * heartbeat_file = nullptr;
QFile * ping_file = nullptr;
QFile * attitude_file = nullptr;
QFile * ins1_file = nullptr;
QFile * ins2_file = nullptr;
QFile * gps_raw_int_file = nullptr;
QFile * global_position_int_file = nullptr;
QFile * servo_output_raw_file = nullptr;
QFile * rc_channels_raw_file = nullptr;
QFile * nav_controller_output_file = nullptr;
QFile * airspeed_autocal_file = nullptr;
QFile * rpm_file = nullptr;
QFile * scaled_pressure_file = nullptr;
QFile * extended_sys_state_file = nullptr;
QFile * battery_status_file = nullptr;
QFile * vibration_file = nullptr;
QFile * enginestate_file = nullptr;
QFile * vfr_hud_file = nullptr;
QFile * aoa_ssa_file = nullptr;
QFile * emb_atom_com_file = nullptr;
QFile * turbinstate_file = nullptr;
QFile * bmustate_file = nullptr;
QFile * ccmstate_file = nullptr;
QFile * serial_control_file = nullptr;
2023-02-13 21:55:03 +08:00
int infoExportID = 1;
2020-03-07 14:46:50 +08:00
signals:
2020-10-12 21:08:37 +08:00
2023-05-17 16:27:12 +08:00
void setMa(qint64 time, QVariant Ma);
2021-11-13 20:06:59 +08:00
void signal_autopilot_version(mavlink_autopilot_version_t);
void signal_sys_status(mavlink_sys_status_t);
void signal_heartbeat(mavlink_heartbeat_t);
void signal_ping(mavlink_ping_t);
void signal_attitude(mavlink_attitude_t);
void signal_ins1(mavlink_ins1_t ins);
void signal_ins2(mavlink_ins2_t ins);
void signal_gps_raw_int(mavlink_gps_raw_int_t);
void signal_global_position_int(mavlink_global_position_int_t);
void signal_servo_output_raw(mavlink_servo_output_raw_t servo);
void signal_rc_channels_raw(mavlink_rc_channels_raw_t);
void signal_nav_controller_output(mavlink_nav_controller_output_t);
void signal_airspeed_autocal(mavlink_airspeed_autocal_t);
void signal_rpm(mavlink_rpm_t);
void signal_scaled_pressure(mavlink_scaled_pressure_t);
void signal_extended_sys_state(mavlink_extended_sys_state_t);
void signal_battery_status(mavlink_battery_status_t);
void signal_vibration(mavlink_vibration_t);
void signal_enginestate(mavlink_enginestate_t);
void signal_vfr_hud(mavlink_vfr_hud_t);
void signal_aoa_ssa(mavlink_aoa_ssa_t);
void signal_emb_atom_com(mavlink_emb_atmo_com_t);
void signal_turbinstate(mavlink_turbinestate_t);
void signal_bmustate(mavlink_bmustate_t);
void signal_ccmstate(mavlink_ccmstate_t);
void signal_serial_control(mavlink_serial_control_t);
void signal_vehicle(MavLinkNode::_vehicle vehicle);
void updateDlink(float rssi,uint64_t in,uint64_t out);
void CommuniationLost(bool);
2020-06-05 18:05:16 +08:00
2021-11-13 20:06:59 +08:00
void beep(int);
2020-08-07 17:15:58 +08:00
2020-06-01 18:25:33 +08:00
void addVehicles(int sysid,int compid);
void recievemsg(mavlink_message_t msg);
2020-03-07 14:46:50 +08:00
void state_updated();
void parameter_updated();
//void mission_updated();
2020-06-02 18:39:43 +08:00
void setCurrentID(int sysid,int compid);
2020-06-05 18:05:16 +08:00
void setAltitude(int sysid,int compid,double roll,double pitch,double yaw);
void setPos(int sysid,int compid,double x,double y,double z);
void setHeading(int sysid,int compid,double x,double y,double z);
2022-07-18 01:23:55 +08:00
void Recieve(QString msg);
2022-07-18 11:28:14 +08:00
void heartbeatTimeStamp(quint32 time);
2023-02-13 21:55:03 +08:00
void SendMessageToExport(quint8 ch, quint8 *data,quint16 len);
2020-03-07 14:46:50 +08:00
public slots:
2024-09-22 10:53:28 +08:00
/**
* @brief 设置厂家标识
*/
void setManufacturerIdentification(quint16 id);
2020-03-07 14:46:50 +08:00
//线程对外接口
2021-11-13 20:06:59 +08:00
void CreateCSV(void);
2022-05-26 14:03:37 +08:00
void CloseCSV(void);
bool setFileData(QFile *file,const QByteArray &data);
2020-10-12 14:39:16 +08:00
2020-03-07 14:46:50 +08:00
//缓存对外接口
2020-08-20 17:48:09 +08:00
void readPendingDatagramsReplay(void);
2020-03-07 14:46:50 +08:00
2020-06-02 18:39:43 +08:00
void setCurrentSelected(int sysid,int compid);
2020-08-20 17:48:09 +08:00
void setLogfile(QString file);
2020-03-07 14:46:50 +08:00
2020-11-21 18:19:28 +08:00
void setGCSID(int id);
2020-10-12 14:39:16 +08:00
2022-07-18 01:23:55 +08:00
void setHeartbeat(QVariant state, QVariant frq );
void serial_control(void);
void Transmit(QString msg);
2020-10-12 14:39:16 +08:00
2023-02-13 21:55:03 +08:00
void infoExport(_showinfo info);
2020-03-07 14:46:50 +08:00
private slots:
//线程私有接口
void process();
//缓存私有接口
2021-11-13 20:06:59 +08:00
2020-03-07 14:46:50 +08:00
2020-10-12 14:39:16 +08:00
void TimerOut(void);
void LogTimerOut(void);
2020-12-13 11:00:31 +08:00
void timer_1s_Out(void);
2020-03-07 14:46:50 +08:00
//解析
void Mavlinkparse(quint32 src,QByteArray datagram);
void MAVLinkRcv_Handler(mavlink_message_t msg);
void StatusParse(mavlink_message_t msg);
void CommandParse(mavlink_message_t msg);
//
2020-03-07 14:46:50 +08:00
2020-06-01 18:25:33 +08:00
//check for new vehicle
void CheckVehicle(int sysid, int compid);
2022-05-26 14:03:37 +08:00
bool setLogData(mavlink_message_t msg);
2020-06-01 18:25:33 +08:00
2022-07-18 01:23:55 +08:00
void heartbeat(uint32_t custom_mode,
uint8_t type,
uint8_t autopilot,
uint8_t base_mode,
uint8_t system_status,
uint8_t mavlink_version);
2020-03-07 14:46:50 +08:00
protected:
2020-08-04 23:18:58 +08:00
int Current_sysID = 0xF1;
2020-08-05 22:39:33 +08:00
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
2020-06-02 18:39:43 +08:00
2020-03-07 14:46:50 +08:00
enum SourceType{
c_sock = 0,
s_port = 1
};
2020-10-13 18:41:23 +08:00
bool hasConneted = false;
2020-10-12 21:08:37 +08:00
int32_t CommucationOverCount = 5;
2020-10-12 14:39:16 +08:00
uint64_t CommucationOverTimer = 5000;
2020-08-04 23:18:58 +08:00
uint8_t GCS_System_ID = 0xFF;
2020-03-07 14:46:50 +08:00
2022-02-10 14:26:23 +08:00
QDateTime startuptime;
2020-03-07 14:46:50 +08:00
2022-06-07 17:48:52 +08:00
QTime *LocationTime;
2022-05-26 18:55:27 +08:00
2020-06-01 18:25:33 +08:00
2021-11-13 20:06:59 +08:00
QTimer *gdt_timer = nullptr;
2020-10-12 14:39:16 +08:00
QTimer *timer = nullptr;
2020-06-01 18:25:33 +08:00
2020-12-15 13:47:14 +08:00
QByteArray databuff;
2020-03-07 14:46:50 +08:00
_buffdef serial_buff;
_buffdef client_buff;
2020-08-20 17:48:09 +08:00
QString mavlogFileName;
2020-08-20 17:48:09 +08:00
QFile *mavLogFile = NULL;
2022-07-18 12:35:04 +08:00
QString HeartBeatTimeName;
QFile *HeartBeatTimeFile = NULL;
QTimer *logTimer = nullptr;
2020-12-13 11:00:31 +08:00
QTimer *timer_1s = nullptr;
2022-05-26 14:03:37 +08:00
Parser2_t parser;
Packer2_t packer;
2021-11-13 20:06:59 +08:00
mutable QReadWriteLock RWlock;
2021-11-10 17:20:09 +08:00
2022-05-26 18:55:27 +08:00
2022-07-18 01:23:55 +08:00
qreal heartbeatFrq = 1;
bool isSendHeartBeat = false;
mavlink_heartbeat_t m_heartbeat;
QTimer *heartbeatTimer = nullptr;
2022-05-26 18:55:27 +08:00
2022-07-18 01:23:55 +08:00
bool isSendTerminal = false;
QString SerialData;
2022-05-26 18:55:27 +08:00
2023-04-17 17:24:51 +08:00
bool use_ins1 = false;
2023-05-17 16:27:12 +08:00
QDateTime *gpstimebase = nullptr;
2024-09-12 14:24:53 +08:00
_showinfo info;
2024-09-19 10:12:11 +08:00
QPointer<QTimer> showInfoTimer = nullptr;
QThread showInfoThread;
2024-09-19 10:12:11 +08:00
2024-09-22 10:53:28 +08:00
quint16 ManufacturerID;
2024-09-19 10:12:11 +08:00
private slots:
void showInfoTimerTimeout();
2020-03-07 14:46:50 +08:00
};
#endif // MAVLINKNODE_H