#ifndef MISSIONPROCESS_H #define MISSIONPROCESS_H #include //#include "mavlinknode.h" #include "opmapwidget.h" #include "waypointitem.h" #include "maptype.h" #include "QDebug" #include "QThread" #include "mavlink.h" #include "QTimer" #include "QTime" #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT MissionProcess : public QObject { #else class MissionProcess : public QObject { #endif Q_OBJECT enum _modetype { Nop_Mode = 0, RecieveMode, TransmitMode }; typedef struct { bool isWaitingforCount; bool isWaitingforItem; }_recieve; typedef struct { uint32_t count; bool isWaiteforRequest; bool isWaiteforACK; int seq; uint8_t type; }_transmit; typedef struct { _recieve recieve; _transmit transmit; _modetype m_Mode; }_mission_; public: explicit MissionProcess(QObject *parent = nullptr); _mission_ mission_status; void setGCSID(int m_sysid, int m_compid) { Current_sysID = m_sysid; Current_CompID = m_compid; } public slots: void setID(int m_sysid, int m_compid); //线程对外接口 void setRunFrq(uint32_t frq); void start(); void stop(); bool isActive(void) { return running_flag; } void Parse(mavlink_message_t msg); //读取航线的指令 void ReadCmd(uint8_t m_sysid, uint8_t m_compid); void WriteCmd(uint8_t m_sysid, uint8_t m_compid ,uint32_t count ); void SetCurrentPoint(int seq); void transmitPoint(float param1,float param2,float param3,float param4, int32_t x,int32_t y,float z, uint16_t seq, uint16_t group, uint16_t command, uint8_t target_system, uint8_t target_component, uint8_t frame, uint8_t current, uint8_t autocontinue, uint8_t mission_type); private slots: //线程私有接口 void SendMessage(mavlink_message_t msg); void process(); //定时器 //状态机 void ReadStateMachine(void); void WriteStateMachine(void); //所有的相关函数 void request_list(void); void count(uint16_t count); void request_int(uint16_t seq); void request(uint16_t seq); void item_int(float param1, float param2, float param3, float param4, int32_t x, int32_t y, float z, uint16_t seq, uint16_t command, uint8_t frame, uint8_t current, uint8_t autocontinue, uint8_t mission_type); void item(float param1,float param2,float param3,float param4, float x,float y,float z, uint16_t seq,uint16_t command, uint8_t frame,uint8_t current, uint8_t autocontinue,uint8_t mission_type); void ack(void); void current(void); void setcurrent(uint16_t seq); void clear_all(void); void item_reached(void); void request_partial_list(void); void write_partial_list(void); signals: void clearWaypoint(void); void readReady(); void showMessage(const QString &message,int TimeOut = 0); void readError(); void SendMessageTo(quint8 ch, quint8 *data,quint16 len); void sendItemOK(uint16_t seq,bool flag); void receivedPoint(float param1,float param2,float param3,float param4, int32_t x,int32_t y,float z, uint16_t seq, uint16_t group, uint16_t command, uint8_t target_system, uint8_t target_component, uint8_t frame, uint8_t current, uint8_t autocontinue, uint8_t mission_type); void currentPoint(int seq); private: uint8_t sysid; uint8_t compid; mavlink_mission_request_list_t mission_request_list; mavlink_mission_count_t mission_count; mavlink_mission_request_int_t mission_request_int; mavlink_mission_request_t mission_request; mavlink_mission_item_int_t mission_item_int; mavlink_mission_item_t mission_item; mavlink_mission_ack_t mission_ack; mavlink_mission_current_t mission_current; mavlink_mission_set_current_t mission_set_current; mavlink_mission_clear_all_t mission_clear_all; mavlink_mission_item_reached_t mission_item_reached; mavlink_mission_request_partial_list_t mission_request_partial_list; mavlink_mission_write_partial_list_t mission_write_partial_list; bool running_flag = false; quint32 running_frq = 200;//200Hz QThread *thread = nullptr; //本机的id int Current_sysID = 0xF1; int Current_CompID = 0xF1; //超时时间(ms) int readTimeout = 3000; int sendTimeout = 3000; QList wplist; //bool isReadMission = false; //bool isWriteMission = false; QMap items; //bool ismTimerTimeOut = false; }; #endif // MISSIONPROCESS_H