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 @@
#include <opencv2/opencv.hpp>
#include <QSemaphore>
#include <atomic>
#include <arpa/inet.h>
enum
CAR_INFORMATION
{
Exit
,
//出场
...
...
@@ -57,11 +58,12 @@ public:
void
clearCameraHandle
();
bool
distributionNetwork
(
QString
&
ip
);
// void rebindTimer(int hDevice);
//相机参数更新
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
);
...
...
@@ -85,10 +87,17 @@ public:
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
);
QString
DecIpToHexIp
(
const
QString
&
decIp
);
//修改相机IP
bool
wifiChangeIp
(
QString
&
Ip
,
bool
is_connect
,
int
h_device
);
//设置相机连接的wifi
void
sdkWifi
(
QString
&
pwd
,
QString
&
ssid
);
bool
sdkWifi
(
QString
&
pwd
,
QString
&
ssid
);
//时间设置
void
sdkDevSystemTimeZoneSyn
(
QString
&
time
);
//录像设置
...
...
@@ -107,7 +116,11 @@ public:
int
deviceShutdown
();
//获取固件版本
void
findFirmwareVersion
(
QString
&
firmwareVersion
);
//复位GB28181
int
resetGb28181
();
//修改相机ip
bool
changeCameraIp
(
QString
&
reachableIp
);
//获取ip
void
findIp
(
QString
&
ip
);
...
...
@@ -162,7 +175,7 @@ signals:
void
afterDownloadFile
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
private
slots
:
void
sdkRealTimeDevSnapSyn
(
int
hDevice
);
void
sdkRealTimeDevSnapSyn
();
void
pushRecordToCloud
(
int
id
,
int
recognitionType
,
QString
ossUrl
);
//void releaseSemaphore();
...
...
@@ -199,6 +212,9 @@ private :
int
image_save
;
std
::
atomic
<
uint64
>
faceCount
;
std
::
atomic
<
bool
>
isOperateGb28181
{
false
};
uint64
face_frequency
;
__uint8_t
algorithmPermissions
;
...
...
Common.cpp
View file @
eb6e5838
...
...
@@ -24,7 +24,7 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
date
+
"
\n
"
+
ossHeaders
+
"
\n
"
+
// 添加'\n'分隔符,并确保ossHeaders末尾没有多余的空白
canonicalizedResource
;
// 将密钥和消息转换为字节数组
QByteArray
hmacKey
=
accessKeySecret
.
toUtf8
();
QByteArray
message
=
stringToSign
.
toUtf8
();
...
...
@@ -32,10 +32,10 @@ QString Common::generateSignature(const QString& accessKeySecret, const QString&
QMessageAuthenticationCode
mac
(
QCryptographicHash
::
Sha1
);
mac
.
setKey
(
hmacKey
);
mac
.
addData
(
message
);
QByteArray
signature
=
mac
.
result
().
toBase64
();
// 直接使用QMessageAuthenticationCode的结果
return
QString
(
signature
);
}
QString
Common
::
getVideoOut
(){
...
...
@@ -62,6 +62,8 @@ void Common::setImages(QString images){
images
.
append
(
"/"
);
this
->
images
=
images
;
}
QString
Common
::
GetLocalIp
()
{
QString
ipAddress
;
QList
<
QHostAddress
>
list
=
QNetworkInterface
::
allAddresses
();
...
...
Common.h
View file @
eb6e5838
...
...
@@ -10,7 +10,7 @@
#include <QCryptographicHash>
#include <QMessageAuthenticationCode>
#include <QNetworkInterface>
#include <map>
#include <QDebug>
class
Common
{
...
...
@@ -38,6 +38,7 @@ public:
QString
getVideoDownload
();
void
setVideoDownload
(
QString
videoDownload
);
QString
getImages
();
void
setImages
(
QString
images
);
...
...
@@ -61,6 +62,7 @@ private:
QString
videoOut
;
QString
videoDownload
;
QString
images
;
Common
();
~
Common
();
...
...
MqttSubscriber.cpp
View file @
eb6e5838
...
...
@@ -24,29 +24,29 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
qInfo
()
<<
"客户端断开连接失败,返回编码"
<<
rc
;
}
}
// 销毁现有的MQTT客户端
MQTTAsync_destroy
(
&
client
);
client
=
nullptr
;
// 重置客户端指针
}
// 保存配置信息
this
->
config
=
config
;
this
->
httpUrl
=
httpUrl
;
this
->
serialNumber
=
serialNumber
;
// 初始化新的MQTT客户端
QByteArray
bAddress
=
config
.
address
.
toUtf8
();
char
*
cAddress
=
bAddress
.
data
();
QByteArray
bClientId
=
config
.
clientId
.
toUtf8
();
char
*
cClientId
=
bClientId
.
data
();
int
rc
=
MQTTAsync_create
(
&
client
,
cAddress
,
cClientId
,
MQTTCLIENT_PERSISTENCE_NONE
,
nullptr
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
qInfo
()
<<
"MQTT客户端创建失败,返回编码"
<<
rc
;
return
;
}
// 设置回调函数
MQTTAsync_setCallbacks
(
client
,
this
,
[](
void
*
context
,
char
*
cause
)
{
static_cast
<
MqttSubscriber
*>
(
context
)
->
connectionLost
(
cause
);
...
...
@@ -57,7 +57,7 @@ void MqttSubscriber::init(vides_data::MqttConfig &config, QString &httpUrl, QStr
MqttSubscriber
::
MqttSubscriber
(
QObject
*
parent
)
:
QObject
(
parent
),
retryTimer
(
new
QTimer
(
this
)),
client
(
nullptr
)
{
// 连接信号和槽
connect
(
this
,
&
MqttSubscriber
::
connectionLostSignal
,
this
,
&
MqttSubscriber
::
reconnectAndFetchConfig
,
Qt
::
QueuedConnection
);
retryTimer
->
setInterval
(
10000
);
// 设置重试间隔为10秒
...
...
@@ -76,18 +76,18 @@ MqttSubscriber::~MqttSubscriber() {
void
MqttSubscriber
::
start
()
{
// 确保定时器停止
retryTimer
->
stop
();
// 设置连接选项
MQTTAsync_connectOptions
conn_opts
=
MQTTAsync_connectOptions_initializer
;
conn_opts
.
keepAliveInterval
=
20
;
conn_opts
.
cleansession
=
1
;
QByteArray
bUsername
=
config
.
username
.
toUtf8
();
char
*
cUsername
=
bUsername
.
data
();
QByteArray
bPassword
=
config
.
password
.
toUtf8
();
char
*
cPassword
=
bPassword
.
data
();
conn_opts
.
username
=
cUsername
;
conn_opts
.
password
=
cPassword
;
conn_opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
...
...
@@ -97,7 +97,7 @@ void MqttSubscriber::start() {
static_cast
<
MqttSubscriber
*>
(
context
)
->
onConnectFailure
(
response
);
};
conn_opts
.
context
=
this
;
// 启动连接
int
rc
;
if
((
rc
=
MQTTAsync_connect
(
client
,
&
conn_opts
))
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -116,7 +116,7 @@ void MqttSubscriber::onConnect(MQTTAsync_successData* response) {
static_cast
<
MqttSubscriber
*>
(
context
)
->
onSubscribeFailure
(
response
);
};
opts
.
context
=
this
;
QByteArray
bTopic
=
config
.
topic
.
toUtf8
();
char
*
cTopic
=
bTopic
.
data
();
int
rc
;
...
...
@@ -129,7 +129,7 @@ void MqttSubscriber::reconnectAndFetchConfig() {
qInfo
()
<<
"重新连接并获取配置"
;
Common
&
instace
=
Common
::
getInstance
();
vides_data
::
responseConfig
re_config
;
// 使用 HttpService 从远程云端拉取配置
HttpService
httpService
(
httpUrl
);
// 替换为实际的远程URL
vides_data
::
response
*
res
=
httpService
.
httpDeviceConfig
(
serialNumber
,
re_config
);
...
...
@@ -174,7 +174,7 @@ void MqttSubscriber::connectionLost(char* cause) {
int
MqttSubscriber
::
messageArrived
(
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
m
)
{
QString
topic
(
topicName
);
QString
payload
=
QString
::
fromUtf8
(
reinterpret_cast
<
const
char
*>
(
m
->
payload
),
m
->
payloadlen
);
QJsonObject
msgBodyOb
;
vides_data
::
responseMqttData
response
;
QJsonDocument
jsonDoc
=
QJsonDocument
::
fromJson
(
payload
.
toUtf8
());
if
(
!
jsonDoc
.
isNull
()
&&
jsonDoc
.
isObject
())
{
...
...
@@ -182,10 +182,21 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
response
.
msg_type
=
jsonObj
[
"msg_type"
].
toInt
();
response
.
sn
=
jsonObj
[
"sn"
].
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
{
qInfo
()
<<
"Failed to parse JSON payload"
;
}
//1开 2关 3 重启 4 GB28181开 5 GB28181 关 6 一键配网 7 WIFI配留 8 复位GB28181
int
res
=
-
2
;
CameraHandle
*
cameraHandle
=
MainWindow
::
sp_this
->
findHandle
(
response
.
sn
);
if
(
cameraHandle
==
nullptr
)
{
...
...
@@ -200,38 +211,64 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
res
=
cameraHandle
->
updateSdkDevStatus
(
true
);
}
else
if
(
response
.
msg_type
==
5
)
{
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
;
request
.
code
=
(
res
>=
0
)
?
0
:
0x01
;
request
.
uniq
=
response
.
uniq
;
request
.
sn
=
response
.
sn
;
sendSubscriptionConfirmation
(
request
);
request
.
msg
=
(
res
>=
0
)
?
"成功"
:
"失败"
;
request
.
uniq
=
response
.
uniq
;
sendSubscriptionConfirmation
(
request
,
response
.
sn
);
MQTTAsync_freeMessage
(
&
m
);
MQTTAsync_free
(
topicName
);
return
1
;
}
void
MqttSubscriber
::
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
)
{
QString
responseTopic
=
"/thingshub/"
+
response
.
sn
+
"/device/post"
;
void
MqttSubscriber
::
sendSubscriptionConfirmation
(
const
vides_data
::
requestMqttData
&
response
,
QString
&
sn
)
{
QString
responseTopic
=
"/thingshub/"
+
response
.
uniq
+
"/device/post"
;
QByteArray
bResponseTopic
=
responseTopic
.
toUtf8
();
char
*
cResponseTopic
=
bResponseTopic
.
data
();
qInfo
()
<<
"sendSubscriptionConfirmation"
<<
cResponseTopic
;
qInfo
()
<<
QString
(
"SN(%1): sendSubscriptionConfirmation->cResponseTopic%2"
).
arg
(
sn
).
arg
(
cResponseTopic
);
// response.sn
QJsonObject
json
;
json
[
"code"
]
=
response
.
code
;
json
[
"uniq"
]
=
response
.
uniq
;
json
[
"msg"
]
=
response
.
msg
;
QJsonDocument
jsonDoc
(
json
);
QByteArray
payload
=
jsonDoc
.
toJson
(
QJsonDocument
::
Compact
);
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
pubmsg
.
payload
=
const_cast
<
char
*>
(
payload
.
data
());
pubmsg
.
payloadlen
=
payload
.
size
();
pubmsg
.
qos
=
config
.
qos
;
pubmsg
.
retained
=
0
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
opts
.
onSuccess
=
[](
void
*
context
,
MQTTAsync_successData
*
response
)
{
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishSuccess
(
response
);
...
...
@@ -240,7 +277,7 @@ void MqttSubscriber::sendSubscriptionConfirmation(const vides_data::requestMqttD
static_cast
<
MqttSubscriber
*>
(
context
)
->
onPublishFailure
(
response
);
};
opts
.
context
=
this
;
int
rc
;
if
((
rc
=
MQTTAsync_sendMessage
(
client
,
cResponseTopic
,
&
pubmsg
,
&
opts
))
!=
MQTTASYNC_SUCCESS
)
{
qInfo
()
<<
"发送消息失败,返回编码"
<<
rc
;
...
...
MqttSubscriber.h
View file @
eb6e5838
...
...
@@ -45,7 +45,7 @@ private:
void
onPublishSuccess
(
MQTTAsync_successData
*
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
;
};
...
...
VidesData.h
View file @
eb6e5838
...
...
@@ -48,8 +48,6 @@ struct requestDeviceStatus
std
::
list
<
requestCameraInfo
>
camera_info_list
;
requestDeviceStatus
()
{}
};
struct
responseStsCredentials
{
QString
access_key_id
;
QString
access_key_secret
;
...
...
@@ -109,6 +107,8 @@ struct localDeviceStatus
QString
password
;
localDeviceStatus
()
{}
};
struct
requestFaceReconition
{
QString
id
;
...
...
@@ -260,7 +260,7 @@ struct LicensePlateConfig {
float
carConfidenceMax
;
float
carConfidenceMin
;
int
licensePlateLen
;
quint64
updateAt
;
quint64
updateAt
;
int
maxNum
;
///< 识别最大数量
bool
useHalf
;
///< 是否使用半精度推理模式
float
boxConfThreshold
;
///< 检测框阈值
...
...
@@ -312,11 +312,12 @@ struct responseMqttData{
uint8_t
msg_type
;
QString
sn
;
QString
uniq
;
QString
msg_body
;
};
struct
requestMqttData
{
QString
sn
;
int
code
;
QString
msg
;
int
code
;
QString
uniq
;
};
struct
DetectionParams
{
...
...
@@ -399,16 +400,48 @@ inline QString getDefaultGateway() {
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
)
{
QProcess
process
;
QString
program
=
"ping"
;
QStringList
arguments
;
#ifdef Q_OS_WIN
#ifdef Q_OS_WIN
arguments
<<
"-n"
<<
"1"
<<
address
;
#else
#else
arguments
<<
"-c"
<<
"1"
<<
address
;
#endif
#endif
process
.
start
(
program
,
arguments
);
if
(
!
process
.
waitForStarted
())
{
...
...
@@ -424,11 +457,28 @@ inline bool pingAddress(const QString &address) {
QString
output
(
process
.
readAllStandardOutput
());
// 简单的 Ping 成功检查逻辑
#ifdef Q_OS_WIN
#ifdef Q_OS_WIN
return
output
.
contains
(
"TTL="
);
#else
#else
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
)
...
...
mainwindow.cpp
View file @
eb6e5838
This diff is collapsed.
Click to expand it.
mainwindow.h
View file @
eb6e5838
...
...
@@ -33,7 +33,7 @@ public:
explicit
MainWindow
();
void
initCommon
();
void
setVideoPath
(
int
flag
,
const
QString
&
path
);
void
createDirectory
(
int
flag
,
const
QString
&
dirName
,
const
QString
&
successMsg
,
const
QString
&
failureMsg
);
...
...
@@ -43,15 +43,17 @@ public:
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
);
__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
;
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
sendEmptyResponse
(
QTcpSocket
*
socket
);
...
...
@@ -81,8 +83,10 @@ public:
// 过滤函数
void
deleteCloudNotCamer
(
const
std
::
map
<
QString
,
vides_data
::
localDeviceStatus
*>&
localDevices
,
const
std
::
list
<
vides_data
::
responseDeviceStatus
>&
devices
);
void
setIsResetting
(
bool
running
);
~
MainWindow
();
signals
:
void
shutdownSignals
(
QString
sDevId
,
int
nDevPort
);
...
...
@@ -101,7 +105,7 @@ private:
QSettings
*
qSetting
;
QTimer
*
deleteLogFileTimer
;
QTimer
*
dePermissionSynTimer
;
QTcpServer
server
;
...
...
@@ -118,9 +122,10 @@ private:
std
::
map
<
QString
,
CameraHandle
*>
faceDetectionParkingPushs
;
vides_data
::
responseConfig
config
;
vides_data
::
MqttConfig
mqttConfig
;
vides_data
::
MqttConfig
mqttConfig
;
std
::
atomic
<
bool
>
isResetting
;
};
#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