#ifndef MISSIONPROCESS_H #define MISSIONPROCESS_H #include #include "opmapwidget.h" #include "waypointitem.h" #include "maptype.h" #include "QDebug" #include "QThread" #include "mavlink.h" #include "QTimer" #include "QTime" #include "ThreadTemplet.h" #ifdef QtMavlinkNode #include class MAVLINKNODESHARED_EXPORT MissionProcess : public ThreadTemplet { #else class MissionProcess : public ThreadTemplet { #endif Q_OBJECT enum _modetype { Nop_Mode = 0, RecieveMode, TransmitMode }; typedef struct { bool isWaitingforCount; bool isWaitingforItem; int group; }_recieve; typedef struct { uint32_t count; bool isWaiteforRequest; bool isWaiteforACK; int seq; uint8_t type; int group; }_transmit; typedef struct { _recieve recieve; _transmit transmit; _modetype m_Mode; }_mission_; public: explicit MissionProcess(QObject *parent = nullptr); ~MissionProcess(); _mission_ mission_status; int currentGroup = 3; QMap>> missions;//SysID 航线组 航线 public slots: void Parse(mavlink_message_t msg); //读取航线的指令 void ReadCmd(uint8_t m_sysid, uint8_t m_compid, int m_group); void WriteCmd(uint8_t m_sysid, uint8_t m_compid ,uint32_t count ,int m_group); 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); void sendFence(qreal Vertex, qreal group, qreal Lat, qreal Lng, uint16_t FecneSeq, uint16_t command, uint16_t sysid, uint16_t compid, uint16_t mission_type); void checkoutVehicle(int sysid); private slots: //线程私有接口 void process(); //定时器 //状态机 void ReadStateMachine(void); void WriteStateMachine(void); //所有的相关函数 void request_list(int missiontype); void count(uint16_t count,int missiontype); void request_int(uint16_t seq,int missiontype); void request(uint16_t seq, int missiontype); 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 readError(); 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 vehicleChanged(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 currentGroup(int group); void currentPoint(int seq); private: 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; //超时时间(ms) int readTimeout = 3000; int sendTimeout = 3000; QList wplist; QMap items; QMap FenceItems; }; #endif // MISSIONPROCESS_H