Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
G
gamera_videos_no_ui
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liusq
gamera_videos_no_ui
Commits
eb6e5838
Commit
eb6e5838
authored
Oct 09, 2024
by
“liusq”
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
复位gb28181和配置WIFI
parent
8f978a25
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
251 additions
and
90 deletions
+251
-90
CameraHandle.cpp
+0
-0
CameraHandle.h
+20
-4
Common.cpp
+6
-4
Common.h
+3
-1
MqttSubscriber.cpp
+65
-28
MqttSubscriber.h
+1
-1
VidesData.h
+61
-11
mainwindow.cpp
+80
-31
mainwindow.h
+15
-10
No files found.
CameraHandle.cpp
View file @
eb6e5838
This diff is collapsed.
Click to expand it.
CameraHandle.h
View file @
eb6e5838
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#include <opencv2/opencv.hpp>
#include <opencv2/opencv.hpp>
#include <QSemaphore>
#include <QSemaphore>
#include <atomic>
#include <atomic>
#include <arpa/inet.h>
enum
CAR_INFORMATION
{
enum
CAR_INFORMATION
{
Exit
,
//出场
Exit
,
//出场
...
@@ -57,11 +58,12 @@ public:
...
@@ -57,11 +58,12 @@ public:
void
clearCameraHandle
();
void
clearCameraHandle
();
bool
distributionNetwork
(
QString
&
ip
);
// void rebindTimer(int hDevice);
// void rebindTimer(int hDevice);
//相机参数更新
//相机参数更新
void
cameraParameterUpdate
(
vides_data
::
responseConfig
&
cloudConfig
);
void
cameraParameterUpdate
(
vides_data
::
responseConfig
&
cloudConfig
);
void
initSdkRealTimeDevSnapSyn
(
int
hDevice
,
int
syn_timer
,
uint64
face_frequency
);
void
initSdkRealTimeDevSnapSyn
(
int
syn_timer
,
uint64
face_frequency
);
void
notificationUpdateImageMap
(
std
::
map
<
QString
,
QString
>&
maps
,
int
numberFaces
,
float
confidence
);
void
notificationUpdateImageMap
(
std
::
map
<
QString
,
QString
>&
maps
,
int
numberFaces
,
float
confidence
);
...
@@ -85,10 +87,17 @@ public:
...
@@ -85,10 +87,17 @@ public:
void
printWifi
(
XSDK_HANDLE
hDevice
,
XSDK_CFG
::
NetWork_Wifi
&
cfg
);
void
printWifi
(
XSDK_HANDLE
hDevice
,
XSDK_CFG
::
NetWork_Wifi
&
cfg
);
bool
isWifiConnect
(
XSDK_HANDLE
hDevice
,
XSDK_CFG
::
NetWork_Wifi
&
cfg
);
void
setCarConfidenceMaxAndMin
(
float
carConfidenceMax
,
float
carConfidenceMin
);
void
setCarConfidenceMaxAndMin
(
float
carConfidenceMax
,
float
carConfidenceMin
);
QString
DecIpToHexIp
(
const
QString
&
decIp
);
//修改相机IP
bool
wifiChangeIp
(
QString
&
Ip
,
bool
is_connect
,
int
h_device
);
//设置相机连接的wifi
//设置相机连接的wifi
void
sdkWifi
(
QString
&
pwd
,
QString
&
ssid
);
bool
sdkWifi
(
QString
&
pwd
,
QString
&
ssid
);
//时间设置
//时间设置
void
sdkDevSystemTimeZoneSyn
(
QString
&
time
);
void
sdkDevSystemTimeZoneSyn
(
QString
&
time
);
//录像设置
//录像设置
...
@@ -107,7 +116,11 @@ public:
...
@@ -107,7 +116,11 @@ public:
int
deviceShutdown
();
int
deviceShutdown
();
//获取固件版本
//获取固件版本
void
findFirmwareVersion
(
QString
&
firmwareVersion
);
void
findFirmwareVersion
(
QString
&
firmwareVersion
);
//复位GB28181
int
resetGb28181
();
//修改相机ip
bool
changeCameraIp
(
QString
&
reachableIp
);
//获取ip
//获取ip
void
findIp
(
QString
&
ip
);
void
findIp
(
QString
&
ip
);
...
@@ -162,7 +175,7 @@ signals:
...
@@ -162,7 +175,7 @@ signals:
void
afterDownloadFile
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
void
afterDownloadFile
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
private
slots
:
private
slots
:
void
sdkRealTimeDevSnapSyn
(
int
hDevice
);
void
sdkRealTimeDevSnapSyn
();
void
pushRecordToCloud
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
void
pushRecordToCloud
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
//void releaseSemaphore();
//void releaseSemaphore();
...
@@ -199,6 +212,9 @@ private :
...
@@ -199,6 +212,9 @@ private :
int
image_save
;
int
image_save
;
std
::
atomic
<
uint64
>
faceCount
;
std
::
atomic
<
uint64
>
faceCount
;
std
::
atomic
<
bool
>
isOperateGb28181
{
false
};
uint64
face_frequency
;
uint64
face_frequency
;
__uint8_t
algorithmPermissions
;
__uint8_t
algorithmPermissions
;
...
...
Common.cpp
View file @
eb6e5838
...
@@ -24,7 +24,7 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
...
@@ -24,7 +24,7 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
date
+
"
\n
"
+
date
+
"
\n
"
+
ossHeaders
+
"
\n
"
+
// 添加'\n'分隔符,并确保ossHeaders末尾没有多余的空白
ossHeaders
+
"
\n
"
+
// 添加'\n'分隔符,并确保ossHeaders末尾没有多余的空白
canonicalizedResource
;
canonicalizedResource
;
// 将密钥和消息转换为字节数组
// 将密钥和消息转换为字节数组
QByteArray
hmacKey
=
accessKeySecret
.
toUtf8
();
QByteArray
hmacKey
=
accessKeySecret
.
toUtf8
();
QByteArray
message
=
stringToSign
.
toUtf8
();
QByteArray
message
=
stringToSign
.
toUtf8
();
...
@@ -32,10 +32,10 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
...
@@ -32,10 +32,10 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
QMessageAuthenticationCode
mac
(
QCryptographicHash
::
Sha1
);
QMessageAuthenticationCode
mac
(
QCryptographicHash
::
Sha1
);
mac
.
setKey
(
hmacKey
);
mac
.
setKey
(
hmacKey
);
mac
.
addData
(
message
);
mac
.
addData
(
message
);
QByteArray
signature
=
mac
.
result
().
toBase64
();
// 直接使用QMessageAuthenticationCode的结果
QByteArray
signature
=
mac
.
result
().
toBase64
();
// 直接使用QMessageAuthenticationCode的结果
return
QString
(
signature
);
return
QString
(
signature
);
}
}
QString
Common
::
getVideoOut
(){
QString
Common
::
getVideoOut
(){
...
@@ -62,6 +62,8 @@ void Common::setImages(QString images){
...
@@ -62,6 +62,8 @@ void Common::setImages(QString images){
images
.
append
(
"/"
);
images
.
append
(
"/"
);
this
->
images
=
images
;
this
->
images
=
images
;
}
}
QString
Common
::
GetLocalIp
()
{
QString
Common
::
GetLocalIp
()
{
QString
ipAddress
;
QString
ipAddress
;
QList
<
QHostAddress
>
list
=
QNetworkInterface
::
allAddresses
();
QList
<
QHostAddress
>
list
=
QNetworkInterface
::
allAddresses
();
...
...
Common.h
View file @
eb6e5838
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
#include <QCryptographicHash>
#include <QCryptographicHash>
#include <QMessageAuthenticationCode>
#include <QMessageAuthenticationCode>
#include <QNetworkInterface>
#include <QNetworkInterface>
#include <map>
#include <QDebug>
#include <QDebug>
class
Common
class
Common
{
{
...
@@ -38,6 +38,7 @@ public:
...
@@ -38,6 +38,7 @@ public:
QString
getVideoDownload
();
QString
getVideoDownload
();
void
setVideoDownload
(
QString
videoDownload
);
void
setVideoDownload
(
QString
videoDownload
);
QString
getImages
();
QString
getImages
();
void
setImages
(
QString
images
);
void
setImages
(
QString
images
);
...
@@ -61,6 +62,7 @@ private:
...
@@ -61,6 +62,7 @@ private:
QString
videoOut
;
QString
videoOut
;
QString
videoDownload
;
QString
videoDownload
;
QString
images
;
QString
images
;
Common
();
Common
();
~
Common
();
~
Common
();
...
...
MqttSubscriber.cpp
View file @
eb6e5838
...
@@ -24,29 +24,29 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
...
@@ -24,29 +24,29 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
qInfo
()
<<
"客户端断开连接失败,返回编码"
<<
rc
;
qInfo
()
<<
"客户端断开连接失败,返回编码"
<<
rc
;
}
}
}
}
// 销毁现有的MQTT客户端
// 销毁现有的MQTT客户端
MQTTAsync_destroy
(
&
client
);
MQTTAsync_destroy
(
&
client
);
client
=
nullptr
;
// 重置客户端指针
client
=
nullptr
;
// 重置客户端指针
}
}
// 保存配置信息
// 保存配置信息
this
->
config
=
config
;
this
->
config
=
config
;
this
->
httpUrl
=
httpUrl
;
this
->
httpUrl
=
httpUrl
;
this
->
serialNumber
=
serialNumber
;
this
->
serialNumber
=
serialNumber
;
// 初始化新的MQTT客户端
// 初始化新的MQTT客户端
QByteArray
bAddress
=
config
.
address
.
toUtf8
();
QByteArray
bAddress
=
config
.
address
.
toUtf8
();
char
*
cAddress
=
bAddress
.
data
();
char
*
cAddress
=
bAddress
.
data
();
QByteArray
bClientId
=
config
.
clientId
.
toUtf8
();
QByteArray
bClientId
=
config
.
clientId
.
toUtf8
();
char
*
cClientId
=
bClientId
.
data
();
char
*
cClientId
=
bClientId
.
data
();
int
rc
=
MQTTAsync_create
(
&
client
,
cAddress
,
cClientId
,
MQTTCLIENT_PERSISTENCE_NONE
,
nullptr
);
int
rc
=
MQTTAsync_create
(
&
client
,
cAddress
,
cClientId
,
MQTTCLIENT_PERSISTENCE_NONE
,
nullptr
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
qInfo
()
<<
"MQTT客户端创建失败,返回编码"
<<
rc
;
qInfo
()
<<
"MQTT客户端创建失败,返回编码"
<<
rc
;
return
;
return
;
}
}
// 设置回调函数
// 设置回调函数
MQTTAsync_setCallbacks
(
client
,
this
,
[](
void
*
context
,
char
*
cause
)
{
MQTTAsync_setCallbacks
(
client
,
this
,
[](
void
*
context
,
char
*
cause
)
{
static_cast
<
MqttSubscriber
*>
(
context
)
->
connectionLost
(
cause
);
static_cast
<
MqttSubscriber
*>
(
context
)
->
connectionLost
(
cause
);
...
@@ -57,7 +57,7 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
...
@@ -57,7 +57,7 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
MqttSubscriber
::
MqttSubscriber
(
QObject
*
parent
)
MqttSubscriber
::
MqttSubscriber
(
QObject
*
parent
)
:
QObject
(
parent
),
retryTimer
(
new
QTimer
(
this
)),
client
(
nullptr
)
{
:
QObject
(
parent
),
retryTimer
(
new
QTimer
(
this
)),
client
(
nullptr
)
{
// 连接信号和槽
// 连接信号和槽
connect
(
this
,
&
MqttSubscriber
::
connectionLostSignal
,
this
,
&
MqttSubscriber
::
reconnectAndFetchConfig
,
Qt
::
QueuedConnection
);
connect
(
this
,
&
MqttSubscriber
::
connectionLostSignal
,
this
,
&
MqttSubscriber
::
reconnectAndFetchConfig
,
Qt
::
QueuedConnection
);
retryTimer
->
setInterval
(
10000
);
// 设置重试间隔为10秒
retryTimer
->
setInterval
(
10000
);
// 设置重试间隔为10秒
...
@@ -76,18 +76,18 @@ MqttSubscriber::~MqttSubscriber() {
...
@@ -76,18 +76,18 @@ MqttSubscriber::~MqttSubscriber() {
void
MqttSubscriber
::
start
()
{
void
MqttSubscriber
::
start
()
{
// 确保定时器停止
// 确保定时器停止
retryTimer
->
stop
();
retryTimer
->
stop
();
// 设置连接选项
// 设置连接选项
MQTTAsync_connectOptions
conn_opts
=
MQTTAsync_connectOptions_initializer
;
MQTTAsync_connectOptions
conn_opts
=
MQTTAsync_connectOptions_initializer
;
conn_opts
.
keepAliveInterval
=
20
;
conn_opts
.
keepAliveInterval
=
20
;
conn_opts
.
cleansession
=
1
;
conn_opts
.
cleansession
=
1
;
QByteArray
bUsername
=
config
.
username
.
toUtf8
();
QByteArray
bUsername
=
config
.
username
.
toUtf8
();
char
*
cUsername
=
bUsername
.
data
();
char
*
cUsername
=
bUsername
.
data
();
QByteArray
bPassword
=
config
.
password
.
toUtf8
();
QByteArray
bPassword
=
config
.
password
.
toUtf8
();
char
*
cPassword
=
bPassword
.
data
();
char
*
cPassword
=
bPassword
.
data
();
conn_opts
.
username
=
cUsername
;
conn_opts
.
username
=
cUsername
;
conn_opts
.
password
=
cPassword
;
conn_opts
.
password
=
cPassword
;
conn_opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
conn_opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
...
@@ -97,7 +97,7 @@ void MqttSubscriber::start() {
...
@@ -97,7 +97,7 @@ void MqttSubscriber::start() {
static_cast
<
MqttSubscriber
*>
(
context
)
->
onConnectFailure
(
response
);
static_cast
<
MqttSubscriber
*>
(
context
)
->
onConnectFailure
(
response
);
};
};
conn_opts
.
context
=
this
;
conn_opts
.
context
=
this
;
// 启动连接
// 启动连接
int
rc
;
int
rc
;
if
((
rc
=
MQTTAsync_connect
(
client
,
&
conn_opts
))
!=
MQTTASYNC_SUCCESS
)
{
if
((
rc
=
MQTTAsync_connect
(
client
,
&
conn_opts
))
!=
MQTTASYNC_SUCCESS
)
{
...
@@ -116,7 +116,7 @@ void MqttSubscriber::onConnect(MQTTAsync_successData* response) {
...
@@ -116,7 +116,7 @@ void MqttSubscriber::onConnect(MQTTAsync_successData* response) {
static_cast
<
MqttSubscriber
*>
(
context
)
->
onSubscribeFailure
(
response
);
static_cast
<
MqttSubscriber
*>
(
context
)
->
onSubscribeFailure
(
response
);
};
};
opts
.
context
=
this
;
opts
.
context
=
this
;
QByteArray
bTopic
=
config
.
topic
.
toUtf8
();
QByteArray
bTopic
=
config
.
topic
.
toUtf8
();
char
*
cTopic
=
bTopic
.
data
();
char
*
cTopic
=
bTopic
.
data
();
int
rc
;
int
rc
;
...
@@ -129,7 +129,7 @@ void MqttSubscriber::reconnectAndFetchConfig() {
...
@@ -129,7 +129,7 @@ void MqttSubscriber::reconnectAndFetchConfig() {
qInfo
()
<<
"重新连接并获取配置"
;
qInfo
()
<<
"重新连接并获取配置"
;
Common
&
instace
=
Common
::
getInstance
();
Common
&
instace
=
Common
::
getInstance
();
vides_data
::
responseConfig
re_config
;
vides_data
::
responseConfig
re_config
;
// 使用 HttpService 从远程云端拉取配置
// 使用 HttpService 从远程云端拉取配置
HttpService
httpService
(
httpUrl
);
// 替换为实际的远程URL
HttpService
httpService
(
httpUrl
);
// 替换为实际的远程URL
vides_data
::
response
*
res
=
httpService
.
httpDeviceConfig
(
serialNumber
,
re_config
);
vides_data
::
response
*
res
=
httpService
.
httpDeviceConfig
(
serialNumber
,
re_config
);
...
@@ -174,7 +174,7 @@ void MqttSubscriber::connectionLost(char* cause) {
...
@@ -174,7 +174,7 @@ void MqttSubscriber::connectionLost(char* cause) {
int
MqttSubscriber
::
messageArrived
(
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
m
)
{
int
MqttSubscriber
::
messageArrived
(
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
m
)
{
QString
topic
(
topicName
);
QString
topic
(
topicName
);
QString
payload
=
QString
::
fromUtf8
(
reinterpret_cast
<
const
char
*>
(
m
->
payload
),
m
->
payloadlen
);
QString
payload
=
QString
::
fromUtf8
(
reinterpret_cast
<
const
char
*>
(
m
->
payload
),
m
->
payloadlen
);
QJsonObject
msgBodyOb
;
vides_data
::
responseMqttData
response
;
vides_data
::
responseMqttData
response
;
QJsonDocument
jsonDoc
=
QJsonDocument
::
fromJson
(
payload
.
toUtf8
());
QJsonDocument
jsonDoc
=
QJsonDocument
::
fromJson
(
payload
.
toUtf8
());
if
(
!
jsonDoc
.
isNull
()
&&
jsonDoc
.
isObject
())
{
if
(
!
jsonDoc
.
isNull
()
&&
jsonDoc
.
isObject
())
{
...
@@ -182,10 +182,21 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
...
@@ -182,10 +182,21 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
response
.
msg_type
=
jsonObj
[
"msg_type"
].
toInt
();
response
.
msg_type
=
jsonObj
[
"msg_type"
].
toInt
();
response
.
sn
=
jsonObj
[
"sn"
].
toString
();
response
.
sn
=
jsonObj
[
"sn"
].
toString
();
response
.
uniq
=
jsonObj
[
"uniq"
].
toString
();
response
.
uniq
=
jsonObj
[
"uniq"
].
toString
();
// 解析 msg_body 字段
if
(
jsonObj
.
contains
(
"msg_body"
))
{
QString
msgBodyStr
=
jsonObj
[
"msg_body"
].
toString
();
// 将 msg_body 字符串转换为 QJsonDocument
QJsonDocument
msgBodyDoc
=
QJsonDocument
::
fromJson
(
msgBodyStr
.
toUtf8
());
if
(
!
msgBodyDoc
.
isNull
()
&&
msgBodyDoc
.
isObject
())
{
msgBodyOb
=
msgBodyDoc
.
object
();
}
else
{
qInfo
()
<<
"Failed to parse msg_body as a JSON object."
;
}
}
}
else
{
}
else
{
qInfo
()
<<
"Failed to parse JSON payload"
;
qInfo
()
<<
"Failed to parse JSON payload"
;
}
}
//1开 2关 3 重启 4 GB28181开 5 GB28181 关 6 一键配网 7 WIFI配留 8 复位GB28181
int
res
=
-
2
;
int
res
=
-
2
;
CameraHandle
*
cameraHandle
=
MainWindow
::
sp_this
->
findHandle
(
response
.
sn
);
CameraHandle
*
cameraHandle
=
MainWindow
::
sp_this
->
findHandle
(
response
.
sn
);
if
(
cameraHandle
==
nullptr
)
{
if
(
cameraHandle
==
nullptr
)
{
...
@@ -200,38 +211,64 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
...
@@ -200,38 +211,64 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
res
=
cameraHandle
->
updateSdkDevStatus
(
true
);
res
=
cameraHandle
->
updateSdkDevStatus
(
true
);
}
else
if
(
response
.
msg_type
==
5
)
{
}
else
if
(
response
.
msg_type
==
5
)
{
res
=
cameraHandle
->
updateSdkDevStatus
(
false
);
res
=
cameraHandle
->
updateSdkDevStatus
(
false
);
}
else
if
(
response
.
msg_type
==
6
)
{
QString
ipAddress
;
// 提取 ip 地址
if
(
msgBodyOb
.
contains
(
"ip"
)
&&
msgBodyOb
[
"ip"
].
isString
())
{
ipAddress
=
msgBodyOb
[
"ip"
].
toString
();
qInfo
()
<<
"IP Address: "
<<
ipAddress
;
}
else
{
qInfo
()
<<
"IP address not found in msg_body."
;
}
res
=
cameraHandle
->
distributionNetwork
(
ipAddress
);
}
else
if
(
response
.
msg_type
==
7
)
{
// 提取 ip 地址
if
(
msgBodyOb
.
contains
(
"username"
)
&&
msgBodyOb
.
contains
(
"password"
))
{
QString
username
=
msgBodyOb
[
"username"
].
toString
();
QString
password
=
msgBodyOb
[
"password"
].
toString
();
res
=
(
cameraHandle
->
sdkWifi
(
password
,
username
)
==
true
?
0
:
0x01
);
}
else
{
qInfo
()
<<
"IP username not found in msg_body."
;
qInfo
()
<<
"IP password not found in msg_body."
;
}
}
else
if
(
response
.
msg_type
==
8
)
{
res
=
(
cameraHandle
->
resetGb28181
()
==
true
?
0
:
0x01
);
}
}
}
}
vides_data
::
requestMqttData
request
;
vides_data
::
requestMqttData
request
;
request
.
code
=
(
res
>=
0
)
?
0
:
0x01
;
request
.
code
=
(
res
>=
0
)
?
0
:
0x01
;
request
.
uniq
=
response
.
uniq
;
request
.
msg
=
(
res
>=
0
)
?
"成功"
:
"失败"
;
request
.
sn
=
response
.
sn
;
request
.
uniq
=
response
.
uniq
;
sendSubscriptionConfirmation
(
request
);
sendSubscriptionConfirmation
(
request
,
response
.
sn
);
MQTTAsync_freeMessage
(
&
m
);
MQTTAsync_freeMessage
(
&
m
);
MQTTAsync_free
(
topicName
);
MQTTAsync_free
(
topicName
);
return
1
;
return
1
;
}
}
void
MqttSubscriber
::
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
)
{
void
MqttSubscriber
::
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
,
QString
&
sn
)
{
QString
responseTopic
=
"/thingshub/"
+
response
.
sn
+
"/device/post"
;
QString
responseTopic
=
"/thingshub/"
+
response
.
uniq
+
"/device/post"
;
QByteArray
bResponseTopic
=
responseTopic
.
toUtf8
();
QByteArray
bResponseTopic
=
responseTopic
.
toUtf8
();
char
*
cResponseTopic
=
bResponseTopic
.
data
();
char
*
cResponseTopic
=
bResponseTopic
.
data
();
qInfo
()
<<
"sendSubscriptionConfirmation"
<<
cResponseTopic
;
qInfo
()
<<
QString
(
"SN(%1): sendSubscriptionConfirmation->cResponseTopic%2"
).
arg
(
sn
).
arg
(
cResponseTopic
);
// response.sn
QJsonObject
json
;
QJsonObject
json
;
json
[
"code"
]
=
response
.
code
;
json
[
"code"
]
=
response
.
code
;
json
[
"uniq"
]
=
response
.
uniq
;
json
[
"msg"
]
=
response
.
msg
;
QJsonDocument
jsonDoc
(
json
);
QJsonDocument
jsonDoc
(
json
);
QByteArray
payload
=
jsonDoc
.
toJson
(
QJsonDocument
::
Compact
);
QByteArray
payload
=
jsonDoc
.
toJson
(
QJsonDocument
::
Compact
);
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
pubmsg
.
payload
=
const_cast
<
char
*>
(
payload
.
data
());
pubmsg
.
payload
=
const_cast
<
char
*>
(
payload
.
data
());
pubmsg
.
payloadlen
=
payload
.
size
();
pubmsg
.
payloadlen
=
payload
.
size
();
pubmsg
.
qos
=
config
.
qos
;
pubmsg
.
qos
=
config
.
qos
;
pubmsg
.
retained
=
0
;
pubmsg
.
retained
=
0
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishSuccess
(
response
);
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishSuccess
(
response
);
...
@@ -240,7 +277,7 @@ void MqttSubscriber::sendSubscriptionConfirmation(const vides_data::requestMqttD
...
@@ -240,7 +277,7 @@ void MqttSubscriber::sendSubscriptionConfirmation(const vides_data::requestMqttD
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishFailure
(
response
);
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishFailure
(
response
);
};
};
opts
.
context
=
this
;
opts
.
context
=
this
;
int
rc
;
int
rc
;
if
((
rc
=
MQTTAsync_sendMessage
(
client
,
cResponseTopic
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
if
((
rc
=
MQTTAsync_sendMessage
(
client
,
cResponseTopic
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
qInfo
()
<<
"发送消息失败,返回编码"
<<
rc
;
qInfo
()
<<
"发送消息失败,返回编码"
<<
rc
;
...
...
MqttSubscriber.h
View file @
eb6e5838
...
@@ -45,7 +45,7 @@ private:
...
@@ -45,7 +45,7 @@ private:
void
onPublishSuccess
(
MQTTAsync_successData
*
response
);
void
onPublishSuccess
(
MQTTAsync_successData
*
response
);
void
onPublishFailure
(
MQTTAsync_failureData
*
response
);
void
onPublishFailure
(
MQTTAsync_failureData
*
response
);
void
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
);
void
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
,
QString
&
sn
);
static
MqttSubscriber
*
instance
;
static
MqttSubscriber
*
instance
;
};
};
...
...
VidesData.h
View file @
eb6e5838
...
@@ -48,8 +48,6 @@ struct requestDeviceStatus
...
@@ -48,8 +48,6 @@ struct requestDeviceStatus
std
::
list
<
requestCameraInfo
>
camera_info_list
;
std
::
list
<
requestCameraInfo
>
camera_info_list
;
requestDeviceStatus
()
{}
requestDeviceStatus
()
{}
};
};
struct
responseStsCredentials
{
struct
responseStsCredentials
{
QString
access_key_id
;
QString
access_key_id
;
QString
access_key_secret
;
QString
access_key_secret
;
...
@@ -109,6 +107,8 @@ struct localDeviceStatus
...
@@ -109,6 +107,8 @@ struct localDeviceStatus
QString
password
;
QString
password
;
localDeviceStatus
()
{}
localDeviceStatus
()
{}
};
};
struct
requestFaceReconition
struct
requestFaceReconition
{
{
QString
id
;
QString
id
;
...
@@ -260,7 +260,7 @@ struct LicensePlateConfig {
...
@@ -260,7 +260,7 @@ struct LicensePlateConfig {
float
carConfidenceMax
;
float
carConfidenceMax
;
float
carConfidenceMin
;
float
carConfidenceMin
;
int
licensePlateLen
;
int
licensePlateLen
;
quint64
updateAt
;
quint64
updateAt
;
int
maxNum
;
///< 识别最大数量
int
maxNum
;
///< 识别最大数量
bool
useHalf
;
///< 是否使用半精度推理模式
bool
useHalf
;
///< 是否使用半精度推理模式
float
boxConfThreshold
;
///< 检测框阈值
float
boxConfThreshold
;
///< 检测框阈值
...
@@ -312,11 +312,12 @@ struct responseMqttData{
...
@@ -312,11 +312,12 @@ struct responseMqttData{
uint8_t
msg_type
;
uint8_t
msg_type
;
QString
sn
;
QString
sn
;
QString
uniq
;
QString
uniq
;
QString
msg_body
;
};
};
struct
requestMqttData
{
struct
requestMqttData
{
QString
sn
;
QString
msg
;
int
code
;
int
code
;
QString
uniq
;
QString
uniq
;
};
};
struct
DetectionParams
{
struct
DetectionParams
{
...
@@ -399,16 +400,48 @@ inline QString getDefaultGateway() {
...
@@ -399,16 +400,48 @@ inline QString getDefaultGateway() {
return
gateway
;
return
gateway
;
}
}
inline
void
convertQStringToSXSDK_IPAddress
(
const
QString
&
ipString
,
SXSDK_IPAddress
&
hostIP
)
{
QHostAddress
address
(
ipString
);
quint32
ip
=
address
.
toIPv4Address
();
hostIP
.
c
[
0
]
=
(
ip
>>
24
)
&
0xFF
;
hostIP
.
c
[
1
]
=
(
ip
>>
16
)
&
0xFF
;
hostIP
.
c
[
2
]
=
(
ip
>>
8
)
&
0xFF
;
hostIP
.
c
[
3
]
=
ip
&
0xFF
;
}
// 获取本地 MAC 地址、子网掩码和网关IP
inline
bool
GetNetworkInfoByQNetworkInterface
(
QString
&
mac
,
QString
&
subnetMask
,
QString
&
gateway
)
{
QList
<
QNetworkInterface
>
interfaces
=
QNetworkInterface
::
allInterfaces
();
foreach
(
QNetworkInterface
interface
,
interfaces
)
{
if
(
interface
.
flags
().
testFlag
(
QNetworkInterface
::
IsUp
)
&&
interface
.
flags
().
testFlag
(
QNetworkInterface
::
IsRunning
)
&&
!
interface
.
flags
().
testFlag
(
QNetworkInterface
::
IsLoopBack
))
{
mac
=
interface
.
hardwareAddress
();
QList
<
QNetworkAddressEntry
>
addressEntries
=
interface
.
addressEntries
();
foreach
(
QNetworkAddressEntry
entry
,
addressEntries
)
{
if
(
entry
.
ip
().
protocol
()
==
QAbstractSocket
::
IPv4Protocol
)
{
subnetMask
=
entry
.
netmask
().
toString
();
gateway
=
entry
.
broadcast
().
toString
();
// 这里假设网关是广播地址
return
true
;
}
}
}
}
return
false
;
// Return false if no suitable interface is found
}
inline
bool
pingAddress
(
const
QString
&
address
)
{
inline
bool
pingAddress
(
const
QString
&
address
)
{
QProcess
process
;
QProcess
process
;
QString
program
=
"ping"
;
QString
program
=
"ping"
;
QStringList
arguments
;
QStringList
arguments
;
#ifdef Q_OS_WIN
#ifdef Q_OS_WIN
arguments
<<
"-n"
<<
"1"
<<
address
;
arguments
<<
"-n"
<<
"1"
<<
address
;
#else
#else
arguments
<<
"-c"
<<
"1"
<<
address
;
arguments
<<
"-c"
<<
"1"
<<
address
;
#endif
#endif
process
.
start
(
program
,
arguments
);
process
.
start
(
program
,
arguments
);
if
(
!
process
.
waitForStarted
())
{
if
(
!
process
.
waitForStarted
())
{
...
@@ -424,11 +457,28 @@ inline bool pingAddress(const QString &address) {
...
@@ -424,11 +457,28 @@ inline bool pingAddress(const QString &address) {
QString
output
(
process
.
readAllStandardOutput
());
QString
output
(
process
.
readAllStandardOutput
());
// 简单的 Ping 成功检查逻辑
// 简单的 Ping 成功检查逻辑
#ifdef Q_OS_WIN
#ifdef Q_OS_WIN
return
output
.
contains
(
"TTL="
);
return
output
.
contains
(
"TTL="
);
#else
#else
return
output
.
contains
(
"1 packets transmitted, 1 received"
);
return
output
.
contains
(
"1 packets transmitted, 1 received"
);
#endif
#endif
}
inline
QString
findReachableIp
()
{
QList
<
QHostAddress
>
ipAddressesList
=
QNetworkInterface
::
allAddresses
();
for
(
const
QHostAddress
&
address
:
ipAddressesList
)
{
if
(
address
.
protocol
()
==
QAbstractSocket
::
IPv4Protocol
&&
!
address
.
isLoopback
())
{
QString
ipAddress
=
address
.
toString
();
QString
currentSubnet
=
ipAddress
.
left
(
ipAddress
.
lastIndexOf
(
'.'
)
+
1
);
// 返回子网部分
for
(
int
i
=
254
;
i
>=
1
;
--
i
)
{
// 从 254 开始递减
QString
ip
=
currentSubnet
+
QString
::
number
(
i
);
if
(
!
pingAddress
(
ip
))
{
return
ip
;
}
}
}
}
return
QString
();
// 如果没有找到可用的 IP 地址,则返回空字符串
}
}
inline
int
GetCpuIdByAsm_arm
(
char
*
cpu_id
)
inline
int
GetCpuIdByAsm_arm
(
char
*
cpu_id
)
...
...
mainwindow.cpp
View file @
eb6e5838
This diff is collapsed.
Click to expand it.
mainwindow.h
View file @
eb6e5838
...
@@ -33,7 +33,7 @@ public:
...
@@ -33,7 +33,7 @@ public:
explicit
MainWindow
();
explicit
MainWindow
();
void
initCommon
();
void
initCommon
();
void
setVideoPath
(
int
flag
,
const
QString
&
path
);
void
setVideoPath
(
int
flag
,
const
QString
&
path
);
void
createDirectory
(
int
flag
,
const
QString
&
dirName
,
const
QString
&
successMsg
,
const
QString
&
failureMsg
);
void
createDirectory
(
int
flag
,
const
QString
&
dirName
,
const
QString
&
successMsg
,
const
QString
&
failureMsg
);
...
@@ -43,15 +43,17 @@ public:
...
@@ -43,15 +43,17 @@ public:
void
initFaceFaceRecognition
();
void
initFaceFaceRecognition
();
void
initCameras
(
vides_data
::
cameraParameters
&
parameter
,
vides_data
::
responseConfig
&
devConfig
,
const
std
::
list
<
vides_data
::
responseArea
>&
areas
,
std
::
list
<
vides_data
::
requestCameraInfo
>&
camera_info_list
);
void
initCameras
(
vides_data
::
cameraParameters
&
parameter
,
vides_data
::
responseConfig
&
devConfig
,
const
std
::
list
<
vides_data
::
responseArea
>&
areas
,
std
::
list
<
vides_data
::
requestCameraInfo
>&
camera_info_list
);
__uint8_t
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
,
bool
humanAlgorithm
);
__uint8_t
intToUint8t
(
bool
faceAlgorithm
,
bool
licensePlateAlgorithm
,
bool
uniformAlgorithm
,
bool
humanAlgorithm
);
//盒子参数更新
//盒子参数更新
void
divParameterUpdate
(
vides_data
::
responseConfig
&
cloudConfig
,
QString
&
httpUrl
,
QString
&
serialNumber
);
void
divParameterUpdate
(
vides_data
::
responseConfig
&
cloudConfig
,
QString
&
httpUrl
,
QString
&
serialNumber
);
static
MainWindow
*
sp_this
;
static
MainWindow
*
sp_this
;
CameraHandle
*
findHandle
(
QString
sn
);
CameraHandle
*
findHandle
(
QString
sn
);
void
modifySnMapIp
(
QString
&
sn
,
QString
&
ip
);
void
findSnMapIp
(
QString
&
sn
,
QString
&
ip
);
void
sendJsonResponse
(
QTcpSocket
*
socket
,
int
code
,
const
QString
&
data
,
const
QString
&
msg
);
void
sendJsonResponse
(
QTcpSocket
*
socket
,
int
code
,
const
QString
&
data
,
const
QString
&
msg
);
void
sendEmptyResponse
(
QTcpSocket
*
socket
);
void
sendEmptyResponse
(
QTcpSocket
*
socket
);
...
@@ -81,8 +83,10 @@ public:
...
@@ -81,8 +83,10 @@ public:
// 过滤函数
// 过滤函数
void
deleteCloudNotCamer
(
const
std
::
map
<
QString
,
vides_data
::
localDeviceStatus
*>&
localDevices
,
void
deleteCloudNotCamer
(
const
std
::
map
<
QString
,
vides_data
::
localDeviceStatus
*>&
localDevices
,
const
std
::
list
<
vides_data
::
responseDeviceStatus
>&
devices
);
const
std
::
list
<
vides_data
::
responseDeviceStatus
>&
devices
);
void
setIsResetting
(
bool
running
);
~
MainWindow
();
~
MainWindow
();
signals
:
signals
:
void
shutdownSignals
(
QString
sDevId
,
int
nDevPort
);
void
shutdownSignals
(
QString
sDevId
,
int
nDevPort
);
...
@@ -101,7 +105,7 @@ private:
...
@@ -101,7 +105,7 @@ private:
QSettings
*
qSetting
;
QSettings
*
qSetting
;
QTimer
*
deleteLogFileTimer
;
QTimer
*
deleteLogFileTimer
;
QTimer
*
dePermissionSynTimer
;
QTimer
*
dePermissionSynTimer
;
QTcpServer
server
;
QTcpServer
server
;
...
@@ -118,9 +122,10 @@ private:
...
@@ -118,9 +122,10 @@ private:
std
::
map
<
QString
,
CameraHandle
*>
faceDetectionParkingPushs
;
std
::
map
<
QString
,
CameraHandle
*>
faceDetectionParkingPushs
;
vides_data
::
responseConfig
config
;
vides_data
::
responseConfig
config
;
vides_data
::
MqttConfig
mqttConfig
;
vides_data
::
MqttConfig
mqttConfig
;
std
::
atomic
<
bool
>
isResetting
;
};
};
#endif // MAINWINDOW_H
#endif // MAINWINDOW_H
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment