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/global.cpp

278 lines
7.9 KiB
C++

#include "global.h"
global::global() {}
QString g_SoftwareVersion = "版本号V1.0.2.1_20241106";
QColor g_themeColor(51, 51, 51);
QString g_PushBtnStyle = /**正常情况下样式**/
"QPushButton{"
"font: 12pt '微软雅黑';"
"color: #2f3640;"
"background-color: #f5f6fa;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QPushButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QPushButton::pressed,QPushButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QPushButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_PushBtnSelStyle = /**选中情况下样式**/
"QPushButton{"
"font: 12pt '微软雅黑';"
"color: #2f3640;"
"background-color: #619acd;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QPushButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QPushButton::pressed,QPushButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QPushButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_ToolBtnStyle = /**正常情况下样式**/
"QToolButton{"
"font: 10pt '微软雅黑';"
"color: rgba(0,0,0,200);" /*#2f3640*/
"background-color: #f5f6fa;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QToolButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QToolButton::pressed,QToolButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QToolButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
QString g_ToolBtnSelStyle = /**选中情况下样式**/
"QToolButton{"
"font: 10pt '微软雅黑';"
"color: #2f3640;"
"background-color: #619acd;"
"border-color: #2f3640;"
"border-radius: 15px;"
"border-style: solid;"
"border-width: 2px;"
"padding: 5px;"
"}"
/**鼠标停留在按钮上的样式**/
"QToolButton::hover{"
"color: #FFFFFF;"
"background-color: #718093;"
"border-color: #2f3640;"
"}"
/**鼠标按压下去的样式**/
"QToolButton::pressed,QToolButton::checked{"
"color: #FFFFFF;"
"background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:0, y2:1, "
"stop:0 #273c75, stop:1 #487eb0);"
"}"
/**按钮失能情况下样式**/
"QToolButton::disabled{"
"color: #FFFFFF;"
"background-color: #dcdde1;"
"border-color: #dcdde1;"
"}";
/**
* @brief calCRC16
* @param cpu8Data
* @param u16Len
* @return
*/
uint16_t calCRC16(const uint8_t *cpu8Data, uint16_t u16Len) {
uint8_t u8X;
uint16_t u16CRC = 0X8848;
while (u16Len--) {
u8X = u16CRC >> 8 ^ *cpu8Data++;
u8X ^= u8X >> 4;
u16CRC = (u16CRC << 8) ^ ((uint16_t)(u8X << 12)) ^ ((uint16_t)(u8X << 5)) ^
((uint16_t)u8X);
}
return u16CRC;
}
/**
* @brief MD5
* @param str
* @return MD5
*/
QString calculateMD5(const QString &str) {
QByteArray hash =
QCryptographicHash::hash(str.toUtf8(), QCryptographicHash::Md5);
return hash.toHex();
}
/**
* @brief
* @param uavID: ID
* @param uavName: 981cs
* @param clientID: ID01
* @param pushDomain:
* @param appName: app
* @param expireTime: 1h
* @return
*/
QString generatePushURL(int uavID, QString appName, QString uavName,
int clientID, QString pushDomain, long expireTime,
QString pushKey) {
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
QString pushURL = "";
if (pushKey == "") {
pushURL = "rtmp://" + pushDomain + "/" + appName + "/" + streamName;
} else {
// 计算鉴权串
long timeStamp = QDateTime::currentMSecsSinceEpoch() / 1000 + expireTime;
QString stringToMd5 = "/" + appName + "/" + streamName + "-" +
QString::number(timeStamp) + "-0-0-" + pushKey;
QString authKey = calculateMD5(stringToMd5);
pushURL = "rtmp://" + pushDomain + "/" + appName + "/" + streamName +
"?auth_key=" + QString::number(timeStamp) + "-0-0-" + authKey;
}
return pushURL;
}
std::map<int, std::string> g_mapAppName;
/**
* @brief
* @param uavID: ID
* @param appName: app
* @param uavName: 981cs
* @param clientID: ID01
* @param pullDomain:
* @param expireTime: 1h
* @param pullKey: Key
* @return
*/
QString generatePullURL(int uavID, QString appName, QString uavName,
int clientID, QString pullDomain, long expireTime,
QString pullKey) {
QString rtmpUrl = "";
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
if (pullKey == "") {
rtmpUrl = "rtmp://" + pullDomain + "/" + appName + "/" + streamName;
} else {
// 计算鉴权串
long timeStamp = QDateTime::currentMSecsSinceEpoch() / 1000 + expireTime;
QString stringToMd5 = "/" + appName + "/" + streamName + "-" +
QString::number(timeStamp) + "-0-0-" + pullKey;
QString authKey = calculateMD5(stringToMd5);
rtmpUrl = "rtmp://" + pullDomain + "/" + appName + "/" + streamName +
"?auth_key=" + QString::number(timeStamp) + "-0-0-" + authKey;
}
return rtmpUrl;
}
/**
* @brief
* @param msec
*/
void sleepMsec(int msec) {
if (msec <= 0)
return;
QEventLoop loop; // 定义一个新的事件循环
QTimer::singleShot(
msec, &loop, SLOT(quit())); // 创建单次定时器,槽函数为事件循环的退出函数
loop.exec(); // 事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出
}
/**
* @brief
* @param uavID:ID
* @param appName:
* @param uavName:981cs
* @return
*/
QString generatePushURL2(int uavID, QString appName, QString uavName,
int clientID, QString pushDomain) {
QString rtmpUrl = "";
QString clientName = "";
if (0 == clientID) {
clientName = "gcs"; // 地面端
} else {
clientName = "uav"; // 载荷端
}
QString streamName =
uavName + "_" + QString::number(uavID) + "_" + clientName;
rtmpUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName;
return rtmpUrl;
}