#ifndef THREADTEMPLET_H #define THREADTEMPLET_H #include #include "QThread" #include "QFile" #include "QDebug" #include "mavlink.h" #include "QtEndian" #include "QDataStream" #include "QFile" #include "QDateTime" #include "ParsePack.h" #include "QMutex" #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT ThreadTemplet : public QObject { #else class ThreadTemplet : public QObject { #endif Q_OBJECT public: explicit ThreadTemplet(QObject *parent = nullptr); ~ThreadTemplet(); signals: Q_INVOKABLE void error(QVariant type); Q_INVOKABLE void SendMessageTo(quint8 ch, quint8 *data,quint16 len); Q_INVOKABLE void showMessage(const QString &message,int TimeOut = 0); public slots: //地面站对外接口 void setGCSID(int m_sysid, int m_compid); void setID(int m_sysid,int m_compid); //线程对外接口 void setRunFrq(qreal frq); void start(); void stop(); bool isActive(void) { return running_flag; } bool isInterruptionRequested(void) { return QThread::currentThread()->isInterruptionRequested(); } float frq(void) { return running_frq; } void setPlogName(QString name) { plogFileName = name; } //缓存对外接口 Q_INVOKABLE void setbuff(quint32 src,QByteArray data); void initbuff(void); QByteArray readbuff(quint32 src); void Send(mavlink_message_t msg); bool setLogData(QString name, uint8_t type, mavlink_message_t msg); private slots: //线程私有接口 virtual void process(); //缓存私有接口 //解析 protected: typedef struct { qint32 max_size; quint8 select; QByteArray buff[2]; }_buffdef; enum SourceType{ c_sock = 0, s_port = 1 }; enum _modetype { Nop_Mode = 0, RecieveMode, TransmitMode }; typedef struct { bool isWaitingforValue; }_recieve; typedef struct { bool isWaitingforACK; uint8_t type; }_transmit; typedef struct { _recieve recieve; _transmit transmit; _modetype m_Mode; }_status_; _status_ status; bool running_flag = false; qreal running_frq = 0.01;//1Hz QThread *thread = nullptr; _buffdef serial_buff; _buffdef client_buff; int GCS_SysID = 0xF1; int GCS_CompID = MAV_COMP_ID_MISSIONPLANNER; //目标id uint8_t sysid; uint8_t compid; Parser2_t parser; Packer2_t packer; QString plogFileName; QMutex mutex; }; #endif // THREADTEMPLET_H