#ifndef STATUSPROCESS_H #define STATUSPROCESS_H #include #include "QDebug" #include "QThread" #include "mavlink.h" #include "QTimer" #include "QTime" #include #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT statusprocess : public QObject { #else class statusprocess : public QObject { #endif Q_OBJECT enum _modetype { Nop_Mode = 0, RecieveMode, TransmitMode }; typedef struct { //bool isWaitingforCount; bool isWaitingforValue; }_recieve; typedef struct { bool isWaitingforACK; uint8_t type; }_transmit; typedef struct { _recieve recieve; _transmit transmit; _modetype m_Mode; }_command_; public: explicit statusprocess(QObject *parent = nullptr); _command_ status; void setGCSID(int m_sysid, int m_compid) { Current_sysID = m_sysid; Current_CompID = m_compid; } mavlink_heartbeat_t m_heartbeat; public slots: void setID(int m_sysid, int m_compid); //读取和写入指令 //void ReadCmd(uint8_t m_sysid, uint8_t m_compid, uint8_t type); void setHeartbeat(QVariant state, QVariant frq ); //线程对外接口 void setRunFrq(uint32_t frq); void start(); void stop(); bool isActive(void) { return running_flag; } private slots: //线程私有接口 void Send(mavlink_message_t msg); void process(); //状态机 void ReadStateMachine(void); void WriteStateMachine(void); //所有相关函数 void heartbeat(uint32_t custom_mode, uint8_t type, uint8_t autopilot, uint8_t base_mode, uint8_t system_status, uint8_t mavlink_version); signals: void readError(); void SendMessageTo(quint8 ch, quint8 *data,quint16 len); void commandAccepted(bool flag,uint16_t command,uint8_t result); void showMessage(const QString &message,int TimeOut = 0); private: bool running_flag = false; quint32 running_frq = 10;//200Hz QThread *thread = nullptr; //目标id uint8_t sysid; uint8_t compid; //本机的id int Current_sysID = 0xF1; int Current_CompID = 0xF1; //超时时间(ms) int readTimeout = 5000; int sendTimeout = 5000; }; #endif // STATUSPROCESS_H