284 lines
7.7 KiB
C++
284 lines
7.7 KiB
C++
#ifndef MAVLINKNODE_H
|
|
#define MAVLINKNODE_H
|
|
|
|
#include <QObject>
|
|
#include "QThread"
|
|
#include "QFile"
|
|
#include "QDebug"
|
|
|
|
#include "mavlink.h"
|
|
#include "replay.h"
|
|
#include "missionprocess.h"
|
|
#include "parameterprocess.h"
|
|
#include "commandprocess.h"
|
|
#include "statusprocess.h"
|
|
#include "Terminal.h"
|
|
#include "sbusparser.h"
|
|
//#include "QAxObject"
|
|
|
|
#include "rcprocess.h"
|
|
#include "rtkprocess.h"
|
|
|
|
#include "ThreadTemplet.h"
|
|
|
|
#include "ParsePack.h"
|
|
|
|
|
|
#ifdef QtMavlinkNode
|
|
#include <mavlinknodeglobal.h>
|
|
class MAVLINKNODESHARED_EXPORT MavLinkNode : public ThreadTemplet {
|
|
#else
|
|
class MavLinkNode : public ThreadTemplet
|
|
{
|
|
#endif
|
|
Q_OBJECT
|
|
public:
|
|
|
|
typedef struct {
|
|
int sysid = 0; /* ID of message sender system/aircraft */
|
|
int compid = 0; /* ID of the message sender component */
|
|
|
|
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};
|
|
|
|
}_vehicle;
|
|
|
|
|
|
|
|
|
|
explicit MavLinkNode(QObject *parent = nullptr);
|
|
~MavLinkNode();
|
|
|
|
_vehicle vehicle;//没有初始化,所以会有野值
|
|
QHash<int,_vehicle> vehicleList;
|
|
|
|
Replay *replay = nullptr;
|
|
|
|
MissionProcess *Mission = nullptr;
|
|
ParameterProcess *Parameter = nullptr;
|
|
commandprocess *Commander = nullptr;
|
|
statusprocess *Status = nullptr;
|
|
terminal *Terminal = nullptr;
|
|
rcprocess *RC = nullptr;
|
|
rtkprocess *rtk = nullptr;
|
|
|
|
bool isCommunicationLost = false;
|
|
|
|
uint64_t rate_in = 0;
|
|
uint64_t count_in = 0;
|
|
|
|
uint64_t rate_out = 0;
|
|
uint64_t count_out = 0;
|
|
|
|
|
|
|
|
uint64_t bittotal = 0;
|
|
|
|
uint64_t parserSuccess = 0;
|
|
uint64_t parserFailure = 0;
|
|
|
|
|
|
uint64_t TotalFrame_1s = 0;
|
|
uint64_t LossFrame_1s = 0;
|
|
|
|
float rssi = 100;
|
|
|
|
|
|
|
|
QByteArray rtkrawdata;
|
|
|
|
|
|
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;
|
|
|
|
|
|
signals:
|
|
|
|
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);
|
|
|
|
void beep(int);
|
|
|
|
void addVehicles(int sysid,int compid);
|
|
|
|
void recievemsg(mavlink_message_t msg);
|
|
|
|
void state_updated();
|
|
void parameter_updated();
|
|
//void mission_updated();
|
|
|
|
void setCurrentID(int sysid,int compid);
|
|
|
|
|
|
|
|
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);
|
|
|
|
public slots:
|
|
//线程对外接口
|
|
void CreateCSV(void);
|
|
void CloseCSV(void);
|
|
|
|
bool setFileData(QFile *file,const QByteArray &data);
|
|
|
|
|
|
//缓存对外接口
|
|
void readPendingDatagramsReplay(void);
|
|
|
|
void setCurrentSelected(int sysid,int compid);
|
|
|
|
void setLogfile(QString file);
|
|
|
|
void setGCSID(int id);
|
|
|
|
|
|
private slots:
|
|
//线程私有接口
|
|
void process();
|
|
|
|
//缓存私有接口
|
|
|
|
|
|
void TimerOut(void);
|
|
void LogTimerOut(void);
|
|
void timer_1s_Out(void);
|
|
//解析
|
|
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);
|
|
//
|
|
|
|
//check for new vehicle
|
|
void CheckVehicle(int sysid, int compid);
|
|
|
|
bool setLogData(mavlink_message_t msg);
|
|
|
|
protected:
|
|
|
|
int Current_sysID = 0xF1;
|
|
int Current_CompID = MAV_COMP_ID_MISSIONPLANNER;
|
|
|
|
enum SourceType{
|
|
c_sock = 0,
|
|
s_port = 1
|
|
};
|
|
|
|
bool hasConneted = false;
|
|
int32_t CommucationOverCount = 5;
|
|
uint64_t CommucationOverTimer = 5000;
|
|
|
|
uint8_t GCS_System_ID = 0xFF;
|
|
|
|
|
|
QDateTime startuptime;
|
|
|
|
|
|
QTimer *gdt_timer = nullptr;
|
|
QTimer *timer = nullptr;
|
|
|
|
|
|
QByteArray databuff;
|
|
|
|
_buffdef serial_buff;
|
|
_buffdef client_buff;
|
|
|
|
QString mavlogFileName;
|
|
QFile *mavLogFile = NULL;
|
|
|
|
QTimer *logTimer = nullptr;
|
|
|
|
|
|
|
|
QTimer *timer_1s = nullptr;
|
|
|
|
|
|
Parser2_t parser;
|
|
Packer2_t packer;
|
|
|
|
mutable QReadWriteLock RWlock;
|
|
|
|
};
|
|
|
|
#endif // MAVLINKNODE_H
|