You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/rescueload.h

125 lines
3.1 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef RESCUELOAD_H
#define RESCUELOAD_H
#include "qjsonarray.h"
#include "qtmetamacros.h"
#include <QObject>
#include <QString>
#include <QUdpSocket>
#include <QAbstractItemModel>
#include <QMouseEvent>
/**
* @brief 搜救载荷通信和数据处理
* 包含数据元素类 ImsiData: 存储搜救信息单元
* 数据模型类 ImsiTableModel: Imsi的数据容器向表格和地图提供数据
* 载荷通信类 RescueLoad: 发送和接收数据
*/
//搜救载荷移动身份识别码数据
// typedef struct
class ImsiData
{
public:
static QHash<QString, QString> operatorMap;
static QString getOperatorNameByImsi(QString imsi);
public:
ImsiData(){};
ImsiData(const QJsonObject& json);
ImsiData(const ImsiData& from);
~ImsiData(){};
public:
QString latitude;
QString longitude;
int altitude; // 海拔高度
QString createDate;
int rssi; // 强度
QString fcn; // 频点/BAND
QString imsi;
QString operatorName;
} /*ImsiData*/;
class ImsiTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum RoleNames {
imsiRole = Qt::UserRole,
latitudeRole = Qt::UserRole+2,
longitudeRole = Qt::UserRole+3,
altitudeRole = Qt::UserRole+4,
dateRole = Qt::UserRole+5,
rssiRole = Qt::UserRole+6,
fcnRole = Qt::UserRole+7,
operatorRole = Qt::UserRole+8,
};
public:
explicit ImsiTableModel(QObject *parent = nullptr);
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void setDataMap(const QMap<QString, ImsiData>& dataMap ) {
beginResetModel();
this->dataMap = dataMap;
this->imsiList = dataMap.keys();
endResetModel();
}
QMap<QString, ImsiData> getDataMap(){
return dataMap;
}
protected:
// return the roles mapping to be used by QML
virtual QHash<int, QByteArray> roleNames() const override;
private:
QMap<QString, ImsiData> dataMap;
QList<QString> imsiList;
QHash<int, QByteArray> m_roleNames;
QStringList m_horizontalHeader;
};
class RescueLoad: public QObject
{
Q_OBJECT
public:
RescueLoad(QObject *parent);
~RescueLoad();
private:
QMap<QString, ImsiData> dataMap;
// udp通信
public:
void startCommunication(); // 在工作线程中运行
void sendMessage(const QString &message);
void sendMessage(const QByteArray &datagram);
void syncTime();
void sendNameList(const QString action, const QString type, const QList<QString> &wnamelist, const QList<QString> &bnamelist);
const QMap<QString, ImsiData> getDataMap() const;
signals:
void dataUpdate();
private slots:
void readData();
private:
QUdpSocket* udpSocket;
QString remoteIp;
int remotePort;
void handleMessage(const QByteArray &datagram);
};
#endif // RESCUELOAD_H