#ifndef MAVLINKNODE_H #define MAVLINKNODE_H #include #include "QThread" #include "QFile" #include "QDebug" #include "mavlink.h" #include "replay.h" #include "missionprocess.h" #include "parameterprocess.h" #include "commandprocess.h" #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT MavLinkNode : public QObject { #else class MavLinkNode : public QObject { #endif Q_OBJECT typedef struct { qint32 max_size; quint8 select; QByteArray buff[2]; }_buffdef; typedef struct { uint8_t sysid; /* ID of message sender system/aircraft */ uint8_t compid; /* ID of the message sender component */ mavlink_autopilot_version_t autopilot_version; mavlink_sys_status_t sys_status; mavlink_heartbeat_t heartbeat; mavlink_ping_t ping; mavlink_attitude_t attitude; mavlink_ins1_t ins1; mavlink_ins2_t ins2; mavlink_gps_raw_int_t gps_raw_int; mavlink_global_position_int_t global_position_int; mavlink_servo_output_raw_t servo_output_raw; mavlink_rc_channels_raw_t rc_channels_raw; mavlink_nav_controller_output_t nav_controller_output; mavlink_airspeed_autocal_t airspeed_autocal; mavlink_rpm_t rpm; mavlink_scaled_pressure_t scaled_pressure; mavlink_extended_sys_state_t extended_sys_state; mavlink_battery_status_t battery_status; mavlink_vibration_t vibration; mavlink_enginestate_t enginestate; mavlink_vfr_hud_t vfr_hud; mavlink_aoa_ssa_t aoa_ssa; mavlink_emb_atmo_com_t emb_atom_com; mavlink_turbinestate_t turbinstate; mavlink_bmustate_t bmustate; mavlink_ccmstate_t ccmstate; }_vehicle; public: explicit MavLinkNode(QObject *parent = nullptr); ~MavLinkNode(); _vehicle vehicle; Replay *replay = nullptr; MissionProcess *Mission = nullptr; ParameterProcess *Parameter = nullptr; commandprocess *Commander = nullptr; bool isCommunicationLost = false; uint64_t bitrate = 0; uint64_t bitcount = 0; uint64_t bittotal = 0; uint64_t parserSuccess = 0; uint64_t parserFailure = 0; float rssi = 100; signals: void CommuniationLost(bool); void showMessage(const QString &message,int TimeOut = 0); void beep(void); void addVehicles(int sysid,int compid); void SendMessageTo(quint8 ch, quint8 *data,quint16 len); 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 setRunFrq(uint32_t frq); void start(); void stop(); bool isActive(void) { return running_flag; } //缓存对外接口 void readPendingDatagramsReplay(void); void setbuff(quint32 src, QByteArray data); void setCurrentSelected(int sysid,int compid); void setLogfile(QString file); private slots: //线程私有接口 void process(); //缓存私有接口 void initbuff(void); QByteArray readbuff(quint32 src); void TimerOut(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); 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; bool running_flag = false; quint32 running_frq = 200;//200Hz QThread *thread; QThread *Parameterthread; QHash vehicleList; QTimer *timer = nullptr; _buffdef serial_buff; _buffdef client_buff; QFile *mavLogFile = NULL; }; #endif // MAVLINKNODE_H