#ifndef COMMANDPROCESS_H #define COMMANDPROCESS_H #include #include "QDebug" #include "QThread" #include "mavlink.h" #include "QTimer" #include "QTime" #include #include "ThreadTemplet.h" #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT commandprocess : public ThreadTemplet { #else class commandprocess : public ThreadTemplet { #endif Q_OBJECT 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; }_command_; public: explicit commandprocess(QObject *parent = nullptr); ~commandprocess(); _command_ status; // 通讯丢失时阻断指令下发 bool m_commandBlocked = false; public slots: void setCommandBlocked(bool blocked) { m_commandBlocked = blocked; } void WriteCmd_long( float param1,float param2,float param3,float param4,float param5,float param6,float param7,uint16_t command,uint8_t confirmation); //读取和写入指令 //void ReadCmd(uint8_t m_sysid, uint8_t m_compid, uint8_t type); void WriteCmd_int(uint8_t m_sysid, uint8_t m_compid , float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z, uint16_t command, uint8_t frame, uint8_t current, uint8_t autocontinue); //线程对外接口 void Parse(mavlink_message_t msg); private slots: //线程私有接口 void process(); //状态机 void ReadStateMachine(void); void WriteStateMachine(void); //所有相关函数 void _int(float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z, uint16_t command, uint8_t frame, uint8_t current, uint8_t autocontinue); void _long(float param1, float param2, float param3, float param4, float param5, float param6, float param7, uint16_t command, uint8_t confirmation); void ack(uint16_t command,uint8_t result,uint8_t progress,int32_t result_param2); signals: void readError(); void commandAccepted(bool flag,uint16_t command,uint8_t result); private: //超时时间(ms) int readTimeout = 5000; int sendTimeout = 5000; mavlink_command_int_t cmd_int; mavlink_command_long_t cmd_long; }; #endif // COMMANDPROCESS_H