Files
gcs-nf/MavLinkNode/missionprocess.h
T

228 lines
5.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef MISSIONPROCESS_H
#define MISSIONPROCESS_H
#include <QObject>
//#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 <mavlinknodeglobal.h>
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<mapcontrol::WayPointItem *> wplist;
//bool isReadMission = false;
//bool isWriteMission = false;
QMap<int,mapcontrol::WayPointItem::_property> items;
//bool ismTimerTimeOut = false;
};
#endif // MISSIONPROCESS_H