添加属性函数
This commit is contained in:
+129
-6
@@ -38,6 +38,7 @@ Vehicle::~Vehicle()
|
||||
|
||||
}
|
||||
|
||||
//自动检测,如果收到了,检测到buff不为空,则自动生成一个线程解析,解析完成后关闭线程,等待下一次解析
|
||||
void Vehicle::_Handler(mavlink_message_t msg)
|
||||
{
|
||||
//用于给参数添加设备,便于读取
|
||||
@@ -89,17 +90,139 @@ void Vehicle::_Handler(mavlink_message_t msg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Vehicle::setType(int t)
|
||||
void Vehicle::receiveMessage(mavlink_message_t message)
|
||||
{
|
||||
Q_UNUSED(t)
|
||||
//type = t;
|
||||
//Q_UNUSED(link);
|
||||
/*
|
||||
if(message.sysid != sysid)//如果不是自己,那就无视
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
quint64 receiveTime;
|
||||
|
||||
|
||||
// Create dynamically an array to store the messages for UAS
|
||||
if (!MessageStorage.contains(message.sysid))
|
||||
{
|
||||
mavlink_message_t* msg = new mavlink_message_t;
|
||||
*msg = message;
|
||||
MessageStorage.insertMulti(message.sysid,msg);//存在多个这个消息
|
||||
}
|
||||
|
||||
bool msgFound = false;
|
||||
QMap<int, mavlink_message_t* >::const_iterator iteMsg = MessageStorage.find(message.sysid);
|
||||
mavlink_message_t* uasMessage = iteMsg.value();
|
||||
while((iteMsg != MessageStorage.end()) && (iteMsg.key() == message.sysid))
|
||||
{
|
||||
if (iteMsg.value()->msgid == message.msgid)
|
||||
{
|
||||
msgFound = true;
|
||||
uasMessage = iteMsg.value();
|
||||
break;
|
||||
}
|
||||
++iteMsg;
|
||||
}
|
||||
if (!msgFound)
|
||||
{
|
||||
mavlink_message_t* msgIdMessage = new mavlink_message_t;
|
||||
*msgIdMessage = message;
|
||||
MessageStorage.insertMulti(message.sysid,msgIdMessage);
|
||||
}
|
||||
else
|
||||
{
|
||||
*uasMessage = message;
|
||||
}
|
||||
|
||||
// Looking if this message has already been received once
|
||||
msgFound = false;
|
||||
QMap<int, QMap<int, quint64>* >::const_iterator ite = uasLastMessageUpdate.find(message.sysid);
|
||||
QMap<int, quint64>* lastMsgUpdate = ite.value();
|
||||
while((ite != uasLastMessageUpdate.end()) && (ite.key() == message.sysid))
|
||||
{
|
||||
if(ite.value()->contains(message.msgid))
|
||||
{
|
||||
msgFound = true;
|
||||
|
||||
// Point to the found message
|
||||
lastMsgUpdate = ite.value();
|
||||
break;
|
||||
}
|
||||
++ite;
|
||||
}
|
||||
|
||||
//输入时间
|
||||
receiveTime = QDateTime::currentMSecsSinceEpoch();//0;//QGC::groundTimeMilliseconds();
|
||||
|
||||
// If the message doesn't exist, create a map for the frequency, message count and time of reception
|
||||
if(!msgFound)
|
||||
{
|
||||
// Create a map for the message frequency
|
||||
QMap<int, float>* messageHz = new QMap<int,float>;
|
||||
messageHz->insert(message.msgid,0.0f);
|
||||
uasMessageHz.insertMulti(message.sysid,messageHz);
|
||||
|
||||
// Create a map for the message count
|
||||
QMap<int, unsigned int>* messagesCount = new QMap<int, unsigned int>;
|
||||
messagesCount->insert(message.msgid,0);
|
||||
uasMessageCount.insertMulti(message.sysid,messagesCount);
|
||||
|
||||
// Create a map for the time of reception of the message
|
||||
QMap<int, quint64>* lastMessage = new QMap<int, quint64>;
|
||||
lastMessage->insert(message.msgid,receiveTime);
|
||||
uasLastMessageUpdate.insertMulti(message.sysid,lastMessage);
|
||||
|
||||
// Point to the created message
|
||||
lastMsgUpdate = lastMessage;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The message has been found/created
|
||||
if ((lastMsgUpdate->contains(message.msgid))&&(uasMessageCount.contains(message.sysid)))
|
||||
{
|
||||
// Looking for and updating the message count
|
||||
unsigned int count = 0;
|
||||
QMap<int, QMap<int, unsigned int>* >::const_iterator iter = uasMessageCount.find(message.sysid);
|
||||
QMap<int, unsigned int> * uasMsgCount = iter.value();
|
||||
while((iter != uasMessageCount.end()) && (iter.key() == message.sysid))
|
||||
{
|
||||
if(iter.value()->contains(message.msgid))
|
||||
{
|
||||
uasMsgCount = iter.value();
|
||||
count = uasMsgCount->value(message.msgid,0);
|
||||
uasMsgCount->insert(message.msgid,count+1);
|
||||
break;
|
||||
}
|
||||
++iter;
|
||||
}
|
||||
}
|
||||
lastMsgUpdate->insert(message.msgid,receiveTime);
|
||||
}
|
||||
|
||||
if (selectedSystemID == 0 || selectedComponentID == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (message.msgid)
|
||||
{
|
||||
case MAVLINK_MSG_ID_DATA_STREAM:
|
||||
{
|
||||
mavlink_data_stream_t stream;
|
||||
mavlink_msg_data_stream_decode(&message, &stream);
|
||||
onboardMessageInterval.insert(stream.stream_id, stream.message_rate);
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Vehicle::setMsg(mavlink_message_t *msg)
|
||||
{
|
||||
messages.insert(msg->msgid,msg);
|
||||
//messages.insert(msg->msgid,msg);
|
||||
}
|
||||
|
||||
void Vehicle::setParam(mavlink_param_value_t *param)
|
||||
|
||||
@@ -7,15 +7,23 @@
|
||||
#include "QHash"
|
||||
#include "QMap"
|
||||
#include "QDebug"
|
||||
|
||||
#include "QDateTime"
|
||||
#include "mavlink.h"
|
||||
|
||||
/*
|
||||
|
||||
定时往外发消息
|
||||
|
||||
航线 航迹 图片 颜色
|
||||
|
||||
参数 状态 指令
|
||||
|
||||
消息 警告
|
||||
|
||||
|
||||
自己在发送心跳
|
||||
|
||||
|
||||
*/
|
||||
|
||||
|
||||
@@ -26,88 +34,224 @@ public:
|
||||
explicit Vehicle(QObject *parent = nullptr);
|
||||
~Vehicle();
|
||||
|
||||
signals:
|
||||
|
||||
|
||||
|
||||
public slots:
|
||||
|
||||
void setSysID(int id)
|
||||
QString Name(void)
|
||||
{
|
||||
sysid = id;
|
||||
return name;
|
||||
}
|
||||
void setName(QString value)
|
||||
{
|
||||
name = value;
|
||||
}
|
||||
|
||||
QIcon Icon(void)
|
||||
{
|
||||
return icon;
|
||||
}
|
||||
void setIcon(QIcon value)
|
||||
{
|
||||
icon = value;
|
||||
}
|
||||
|
||||
QColor TailColor(void)
|
||||
{
|
||||
return tailColor;
|
||||
}
|
||||
void setTailColor(QColor value)
|
||||
{
|
||||
tailColor = value;
|
||||
}
|
||||
|
||||
QColor WayColor(void)
|
||||
{
|
||||
return wayColor;
|
||||
}
|
||||
void setWayColor(QColor value)
|
||||
{
|
||||
wayColor = value;
|
||||
}
|
||||
|
||||
|
||||
int SysID(void)
|
||||
{
|
||||
return sysid;
|
||||
}
|
||||
void setSysID(int value)
|
||||
{
|
||||
sysid = value;
|
||||
}
|
||||
|
||||
|
||||
int Type(void)
|
||||
{
|
||||
return type;
|
||||
}
|
||||
void setType(int value)
|
||||
{
|
||||
type = value;
|
||||
}
|
||||
|
||||
void setType(int t);
|
||||
|
||||
bool Selected(void)
|
||||
{
|
||||
return isSelected;
|
||||
}
|
||||
void setSelected(bool value)
|
||||
{
|
||||
isSelected = value;
|
||||
}
|
||||
|
||||
bool Heartbeat(void)
|
||||
{
|
||||
return heartbeat;
|
||||
}
|
||||
void setHeartbeat(bool value)
|
||||
{
|
||||
heartbeat = value;
|
||||
//发一次声音 beep
|
||||
}
|
||||
|
||||
bool Arm(void)
|
||||
{
|
||||
return arm;
|
||||
}
|
||||
void setArm(bool value)
|
||||
{
|
||||
arm = value;
|
||||
//有变化后要播报语音
|
||||
}
|
||||
|
||||
int Flightmode(void)
|
||||
{
|
||||
return flightmode;
|
||||
}
|
||||
void setFlightmode(int value)
|
||||
{
|
||||
flightmode = value;
|
||||
//有变化后要播报语音
|
||||
}
|
||||
|
||||
int Flightstate(void)
|
||||
{
|
||||
return flightstate;
|
||||
}
|
||||
void setFlightstate(int value)
|
||||
{
|
||||
flightstate = value;
|
||||
//有变化后要播报语音
|
||||
}
|
||||
|
||||
void setMsg(mavlink_message_t *msg);
|
||||
void setParam(mavlink_param_value_t *param);
|
||||
void setMission(mavlink_mission_item_int_t *item);
|
||||
|
||||
void _Handler(mavlink_message_t msg);
|
||||
|
||||
|
||||
private slots:
|
||||
|
||||
void receiveMessage(mavlink_message_t message);
|
||||
|
||||
signals:
|
||||
|
||||
private:
|
||||
|
||||
//一些可以配置的东西可以存在json里面,一旦生成这个飞机就导入json的设置
|
||||
//基本信息
|
||||
|
||||
QIcon icon = "fixwing.png";
|
||||
QString name = "vehicle";
|
||||
QIcon icon = QIcon("fixwing.png");
|
||||
QColor tailColor = "#026F80";
|
||||
QColor wayColor = "#F09382";
|
||||
|
||||
int sysid = 0;
|
||||
bool isSeleted = false;
|
||||
int type = 0;//设备类型
|
||||
bool isSelected = false;
|
||||
bool heartbeat = false;//反复变化
|
||||
bool arm = false;//false 上锁 true 解锁
|
||||
int flightmode = 0;
|
||||
int flightstate = 0;
|
||||
|
||||
bool arm;
|
||||
int flightmode;
|
||||
int imu_select = 0;//惯导选择
|
||||
int das_select = 0;//大气选择
|
||||
|
||||
bool heartbeat = false;
|
||||
bool isOnline = false;
|
||||
//健康字
|
||||
bool inner_INS = false;
|
||||
bool outer_INS = false;
|
||||
bool servosystem = false;
|
||||
bool loadinggear = false;
|
||||
bool recorder = false;//数据记录健康
|
||||
bool inner_das = false;
|
||||
bool outer_das = false;
|
||||
|
||||
//惯性
|
||||
qreal roll;
|
||||
qreal pitch;
|
||||
qreal yaw;
|
||||
qreal roll = 0;
|
||||
qreal pitch = 0;
|
||||
qreal yaw = 0;
|
||||
|
||||
qreal p;
|
||||
qreal q;
|
||||
qreal r;
|
||||
qreal p = 0;
|
||||
qreal q = 0;
|
||||
qreal r = 0;
|
||||
|
||||
qreal ax;
|
||||
qreal ay;
|
||||
qreal az;
|
||||
qreal ax = 0;
|
||||
qreal ay = 0;
|
||||
qreal az = 0;
|
||||
|
||||
//导航
|
||||
double lat;
|
||||
double lng;
|
||||
qreal RelativeAltitude;//相对海拔
|
||||
qreal AbsoluteAltitude;//绝对海拔
|
||||
double lat = 0;
|
||||
double lng = 0;
|
||||
qreal gpsalt = 0;//GPS海拔
|
||||
qreal relalt = 0;//相对海拔
|
||||
qreal absalt = 0;//绝对海拔
|
||||
qreal baroalt = 0;//气压海拔
|
||||
|
||||
qreal groudspeed;
|
||||
qreal heading;
|
||||
qreal groudspeed = 0;
|
||||
qreal heading = 0;
|
||||
|
||||
int fixType;
|
||||
int Satellites;
|
||||
int fixtype = 0;
|
||||
int directioncapture = false;
|
||||
int satellites = 0;
|
||||
|
||||
qreal vn = 0;
|
||||
qreal ve = 0;
|
||||
qreal vd = 0;
|
||||
|
||||
//大气
|
||||
qreal tas;
|
||||
qreal cas;
|
||||
qreal Ma;
|
||||
qreal alpha;
|
||||
qreal beta;
|
||||
qreal tas = 0;//真空速
|
||||
qreal cas = 0;//表速
|
||||
qreal Ma = 0;//马赫数
|
||||
qreal alpha = 0;//攻角
|
||||
qreal beta = 0;//侧滑角
|
||||
|
||||
//控制
|
||||
qreal aileron = 0;//副翼
|
||||
qreal elevator = 0;//升降舵
|
||||
qreal throttle = 0;//油门
|
||||
qreal ruddor = 0;//方向舵
|
||||
//...
|
||||
|
||||
|
||||
|
||||
//遥控
|
||||
QList<uint16_t> rc = {0};
|
||||
|
||||
//电压
|
||||
qreal mainvoltage = 0;//飞控电压
|
||||
qreal servovoltage = 0;//舵机电压
|
||||
qreal powervoltage = 0;//动力电压
|
||||
QList<qreal> battery = {0};//其余电压
|
||||
QList<qreal> voltagegain = {1};//电压转换系数
|
||||
|
||||
//数据链
|
||||
bool isOnline = false;//数据链有没有丢失
|
||||
qreal rssi = 0;//数据链强度
|
||||
int datain = 0;//数据输入量
|
||||
int dataout = 0;//数据输出量
|
||||
|
||||
//数据记录
|
||||
bool isrecording = false;//是否在记录
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -126,14 +270,26 @@ private:
|
||||
*
|
||||
*/
|
||||
|
||||
//当前飞机的航线
|
||||
QMap<int,mavlink_mission_item_int_t *> waypoints;//航线组
|
||||
|
||||
|
||||
QMap<quint32,mavlink_message_t *> messages;
|
||||
|
||||
|
||||
//飞机的参数
|
||||
QMap<int,mavlink_param_value_t *> parameters;
|
||||
|
||||
//飞机收到的消息
|
||||
QMap<uint16_t,mavlink_message_t *> MessageStorage;
|
||||
|
||||
//飞机要发出去的消息
|
||||
|
||||
|
||||
|
||||
//飞机收到的指令
|
||||
|
||||
|
||||
|
||||
|
||||
//飞机要发出去的指令
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ void VehicleManage::setMsg(int sysid,int s)
|
||||
Vehicle *v = Vehicles.value(sysid);
|
||||
|
||||
|
||||
|
||||
|
||||
//v->setMsg(s,s);
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user