添加属性函数

This commit is contained in:
hm
2022-01-10 23:04:04 +08:00
parent c8ba57fcb7
commit dbb7a100f4
3 changed files with 326 additions and 45 deletions
+129 -6
View File
@@ -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)
+195 -39
View File
@@ -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;
//飞机要发出去的消息
//飞机收到的指令
//飞机要发出去的指令
+2
View File
@@ -25,6 +25,8 @@ void VehicleManage::setMsg(int sysid,int s)
Vehicle *v = Vehicles.value(sysid);
//v->setMsg(s,s);
}