Commit 47306f3d by “liusq”

修改gb28181和新增mac推送

parent 0fd25424
...@@ -1017,7 +1017,7 @@ void CameraHandle::printWifi(XSDK_HANDLE hDevice,XSDK_CFG::NetWork_Wifi &cfg){ ...@@ -1017,7 +1017,7 @@ void CameraHandle::printWifi(XSDK_HANDLE hDevice,XSDK_CFG::NetWork_Wifi &cfg){
需注意和定时任务对比GB28181配置冲突处理 需注意和定时任务对比GB28181配置冲突处理
需确认修改IP后抓图是否正常,如不正常需在命令开始前增加删除句柄,命令完成后增加句柄以保证抓图实时性 需确认修改IP后抓图是否正常,如不正常需在命令开始前增加删除句柄,命令完成后增加句柄以保证抓图实时性
*/ */
int CameraHandle::resetGb28181(QString &uuiq){ int CameraHandle::resetGb28181(){
NonConnectedCameraHandle *connectedCameraHandle =NonConnectedCameraHandle::getInstance(); NonConnectedCameraHandle *connectedCameraHandle =NonConnectedCameraHandle::getInstance();
int old=this->hDevice; int old=this->hDevice;
qInfo()<<QString("SN(%1): resetGb28181老句柄%2").arg(sSn).arg(old); qInfo()<<QString("SN(%1): resetGb28181老句柄%2").arg(sSn).arg(old);
...@@ -1110,6 +1110,67 @@ int CameraHandle::resetGb28181(QString &uuiq){ ...@@ -1110,6 +1110,67 @@ int CameraHandle::resetGb28181(QString &uuiq){
//this->updateSdkDevStatus(true); //this->updateSdkDevStatus(true);
return 1; return 1;
} }
void CameraHandle::initWorkSpVMn(vides_data::responseGb28181 *gb28181, QString &workSpWMn){
// 构建 toJsonObject
QJsonObject toJsonObject;
toJsonObject["szCsIP"] = gb28181->sip_ip;
toJsonObject["szServerNo"] = gb28181->serial;
toJsonObject["sCsPort"] = gb28181->sip_port;
toJsonObject["szServerDn"] = gb28181->realm;
toJsonObject["iRsAgedTime"] = gb28181->register_validity;
toJsonObject["iHsIntervalTime"] = gb28181->heartbeat_interval;
toJsonObject["szConnPass"] = gb28181->password;
toJsonObject["szDeviceNO"] = gb28181->device_id;
// 构建 AlarmLevel 数组
QJsonArray alarmLevelArray;
for (int i = 0; i < 8; ++i) {
alarmLevelArray.append(0);
}
toJsonObject["AlarmLevel"] = alarmLevelArray;
// 构建 Alarmid 数组
QJsonArray alarmidArray;
for (int i = 1; i <= 8; ++i) {
alarmidArray.append("3402000000134000000" + QString::number(i, 10).rightJustified(2, '0'));
}
toJsonObject["Alarmid"] = alarmidArray;
// 构建 CamreaLevel 数组
QJsonArray camreaLevelArray;
for (int i = 0; i < 8; ++i) {
camreaLevelArray.append(0);
}
toJsonObject["CamreaLevel"] = camreaLevelArray;
// 构建 Camreaid 数组
QJsonArray camreaidArray;
for (int i = 1; i <= 8; ++i) {
if (i == 1) {
camreaidArray.append(gb28181->channel_id);
} else {
camreaidArray.append("3402000000131000001" + QString::number(i, 10).rightJustified(2, '0'));
}
}
toJsonObject["Camreaid"] = camreaidArray;
// 添加其他字段
toJsonObject["HeartBeatCount"] = 0;
toJsonObject["bCsEnable"] = true;
toJsonObject["uiAlarmStateBlindEnable"] = "0xFFFFFFFF";
toJsonObject["uiAlarmStateConnectEnable"] = "0xFFFFFFFF";
toJsonObject["uiAlarmStateGpinEnable"] = "0xFFFFFFFF";
toJsonObject["uiAlarmStateLoseEnable"] = "0xFFFFFFFF";
toJsonObject["uiAlarmStateMotionEnable"] = "0xFFFFFFFF";
toJsonObject["uiAlarmStatePerformanceEnable"] = "0xFFFFFFFF";
toJsonObject["sUdpPort"] = 5060;
// 生成 workSpWMn
QJsonDocument doc(toJsonObject);
QByteArray jsonDataOutput = doc.toJson(QJsonDocument::Compact);
workSpWMn = QString::fromUtf8(jsonDataOutput);
}
int CameraHandle::forceWriteGb28181(){ int CameraHandle::forceWriteGb28181(){
Common & instace= Common::getInstance(); Common & instace= Common::getInstance();
...@@ -1117,63 +1178,18 @@ int CameraHandle::forceWriteGb28181(){ ...@@ -1117,63 +1178,18 @@ int CameraHandle::forceWriteGb28181(){
vides_data::response *res=http_gb28181.httpFindGb28181Config(sSn); vides_data::response *res=http_gb28181.httpFindGb28181Config(sSn);
ScopeSemaphoreExit guard([&instace,&res]() { ScopeSemaphoreExit guard([&instace,&res]() {
instace.deleteObj(res); instace.deleteObj(res);
}); });
if(res->code!=0){ if(res->code!=0){
qInfo()<<"请求摄像头gb28181配置失败"; qInfo()<<"请求摄像头gb28181配置失败";
return -1; return -1;
} }
QString stGb281;
vides_data::responseGb28181 *gb28181 = reinterpret_cast<vides_data::responseGb28181*>(res->data); vides_data::responseGb28181 *gb28181 = reinterpret_cast<vides_data::responseGb28181*>(res->data);
XSDK_CFG::NetWork_SPVMN config; initWorkSpVMn(gb28181,stGb281); QByteArray bGb =stGb281.toUtf8();
const char* pCfg=bGb.data();
config.Camreaid.InitArraySize(64); qInfo()<<"forceWriteGb28181"<<pCfg;
for (int i = 1; i <= 64; ++i) {
if (i == 1) {
QByteArray b_StrValue = gb28181->channel_id.toUtf8();
const char* str_Value = b_StrValue.constData();
JStrObj* newCameraId = &config.Camreaid[i - 1];
newCameraId->operator=(str_Value);
} else {
QString str("3402000000131000001" + QString::number(i, 10).rightJustified(2, '0'));
QByteArray b_Str = str.toUtf8();
const char* s_ct = b_Str.constData();
JStrObj* newCameraId = &config.Camreaid[i - 1];
newCameraId->operator=(s_ct);
}
}
QByteArray && bSip_ip= gb28181->sip_ip.toUtf8();
char* sip_ip = bSip_ip.data();
config.szCsIP.SetValue(sip_ip);
QByteArray && bSzServerNo=gb28181->serial.toUtf8();
char* sz_ServerNo = bSzServerNo.data();
config.szServerNo.SetValue(sz_ServerNo);
config.sCsPort.SetValue(gb28181->sip_port);
config.sUdpPort.SetValue(5060);
QByteArray && bSzServerDn=gb28181->realm.toUtf8();
char* sz_ServerDn = bSzServerDn.data();
config.szServerDn.SetValue(sz_ServerDn);
config.bCsEnable.SetValue(true);
config.iRsAgedTime.SetValue(gb28181->register_validity);
config.iHsIntervalTime.SetValue(gb28181->heartbeat_interval);
QByteArray && bSzConnPass=gb28181->password.toUtf8();
char* sz_connPass = bSzConnPass.data();
config.szConnPass.SetValue(sz_connPass);
QByteArray && bDevice_id=gb28181->device_id.toUtf8();
char* cdevice_id = bDevice_id.data();
config.szDeviceNO.SetValue(cdevice_id);
const char* pCfg = config.ToString();
sdkDevSpvMn(pCfg);
return sdkDevSpvMn(pCfg);
} }
bool CameraHandle::sdkWifi(QString &pwd,QString &ssid){ bool CameraHandle::sdkWifi(QString &pwd,QString &ssid){
......
...@@ -42,7 +42,7 @@ enum CAR_INFORMATION { ...@@ -42,7 +42,7 @@ enum CAR_INFORMATION {
class CameraHandle: public QObject class CameraHandle: public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
CameraHandle(QString &url,QString &httpUrl,QString &sSn, int &channel, int imageSave, CameraHandle(QString &url,QString &httpUrl,QString &sSn, int &channel, int imageSave,
float &heightReference,vides_data::responseConfig &devConfig); float &heightReference,vides_data::responseConfig &devConfig);
...@@ -50,7 +50,7 @@ public: ...@@ -50,7 +50,7 @@ public:
~CameraHandle(); ~CameraHandle();
int sdkDevLoginSyn(QString sDevId, int nDevPort, QString sUserName, QString sPassword, int nTimeout); int sdkDevLoginSyn(QString sDevId, int nDevPort, QString sUserName, QString sPassword, int nTimeout);
//int SdkMediaGetFaceImage(int hDevice, int nSeq, int nTimeout); //int SdkMediaGetFaceImage(int hDevice, int nSeq, int nTimeout);
int sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener); int sdkDevSetAlarmListener(XSDK_HANDLE hDevice, int bListener);
int getHdevice(); int getHdevice();
...@@ -64,33 +64,33 @@ public: ...@@ -64,33 +64,33 @@ public:
void cameraParameterUpdate(vides_data::responseConfig &cloudConfig); void cameraParameterUpdate(vides_data::responseConfig &cloudConfig);
void initSdkRealTimeDevSnapSyn(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);
void featureRemove(); void featureRemove();
void updateImage(const cv::Mat & frame,qint64 currentTime); void updateImage(const cv::Mat & frame,qint64 currentTime);
void matToBase64(const cv::Mat &image, QByteArray &base64Data); void matToBase64(const cv::Mat &image, QByteArray &base64Data);
//把原始图片转换成不同区域的掩码 //把原始图片转换成不同区域的掩码
void matToAreaMask(const cv::Mat &source,std::map<int,cv::Mat> &maskFrame); void matToAreaMask(const cv::Mat &source,std::map<int,cv::Mat> &maskFrame);
int callbackFunction(XSDK_HANDLE hObject,QString &szString); int callbackFunction(XSDK_HANDLE hObject,QString &szString);
void checkAndUpdateCurrentPlate(ParkingSpaceInfo*park,const cv::Mat & frame,RecognizedInfo& newInfo,int &result); void checkAndUpdateCurrentPlate(ParkingSpaceInfo*park,const cv::Mat & frame,RecognizedInfo& newInfo,int &result);
void licensePlateRecognitionResults(vides_data::requestLicensePlate &location); void licensePlateRecognitionResults(vides_data::requestLicensePlate &location);
void sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel); void sdkDevSnapSyn(XSDK_HANDLE hDevice, int nChannel);
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); bool isWifiConnect(XSDK_HANDLE hDevice,XSDK_CFG::NetWork_Wifi &cfg);
void setCarConfidenceMaxAndMin(float carConfidenceMax,float carConfidenceMin); void setCarConfidenceMaxAndMin(float carConfidenceMax,float carConfidenceMin);
//设置相机连接的wifi //设置相机连接的wifi
bool sdkWifi(QString &pwd,QString &ssid); bool sdkWifi(QString &pwd,QString &ssid);
//时间设置 //时间设置
...@@ -103,10 +103,10 @@ public: ...@@ -103,10 +103,10 @@ public:
int sdkDevSpvMn(const char* spvMn); int sdkDevSpvMn(const char* spvMn);
//gb218开启 //gb218开启
int updateSdkDevStatus(bool status); int updateSdkDevStatus(bool status);
void updateSdkDevSpvMn(vides_data::responseGb28181 *gb28181); void updateSdkDevSpvMn(vides_data::responseGb28181 *gb28181);
//重启设备 //重启设备
int deviceReboot(); int deviceReboot();
//设备关机 //设备关机
...@@ -114,34 +114,37 @@ public: ...@@ -114,34 +114,37 @@ public:
//获取固件版本 //获取固件版本
void findFirmwareVersion(QString &firmwareVersion); void findFirmwareVersion(QString &firmwareVersion);
//复位GB28181 //复位GB28181
int resetGb28181(QString &uuiq); int resetGb28181();
//强制gb28181配置后写入摄像头 //强制gb28181配置后写入摄像头
int forceWriteGb28181(); int forceWriteGb28181();
void initWorkSpVMn(vides_data::responseGb28181 *gb28181, QString &workSpWMn);
//获取ip //获取ip
void findIp(QString &ip); void findIp(QString &ip);
void sdkDownloadFileByTime(XSDK_HANDLE hDevice,int id, void sdkDownloadFileByTime(XSDK_HANDLE hDevice,int id,
QString startTimer,QString endTime); QString startTimer,QString endTime);
void batchRegionalPushLicensePlate(QByteArray &imgs,qint64 currentTime,vides_data::requestLicensePlate &newPlate); void batchRegionalPushLicensePlate(QByteArray &imgs,qint64 currentTime,vides_data::requestLicensePlate &newPlate);
void faceUniformOverlap(std::map<QString,vides_data::requestFaceReconition>&mapFaces, void faceUniformOverlap(std::map<QString,vides_data::requestFaceReconition>&mapFaces,
std::vector<vides_data::ParkingArea> &uniforms, std::vector<vides_data::ParkingArea> &uniforms,
std::list<QString>&outUniforms); std::list<QString>&outUniforms);
bool isClockwise(const std::vector<cv::Point2f>& polygon); bool isClockwise(const std::vector<cv::Point2f>& polygon);
QString getSSn(); QString getSSn();
int getMediaHandle(); int getMediaHandle();
void setMediaHandle(int mediaHandle); void setMediaHandle(int mediaHandle);
void initAlgorithmPermissions(__uint8_t algorithm); void initAlgorithmPermissions(__uint8_t algorithm);
void initFaceFrequency(uint64 face_frequency); void initFaceFrequency(uint64 face_frequency);
void initParkingSpaceInfo(const std::list<vides_data::responseArea>&areas); void initParkingSpaceInfo(const std::list<vides_data::responseArea>&areas);
bool compareLists(const std::list<vides_data::responseArea>& newAreas); bool compareLists(const std::list<vides_data::responseArea>& newAreas);
...@@ -160,13 +163,13 @@ public: ...@@ -160,13 +163,13 @@ public:
// 计算两个多边形的交集面积 // 计算两个多边形的交集面积
double calculateIntersectionArea(const QPolygonF &polygon1, const QPolygonF &polygon2); double calculateIntersectionArea(const QPolygonF &polygon1, const QPolygonF &polygon2);
double ccw(const QPointF& a, const QPointF& b, const QPointF& c); double ccw(const QPointF& a, const QPointF& b, const QPointF& c);
void getCurrentFrame(std::vector<uchar> &buffer); void getCurrentFrame(std::vector<uchar> &buffer);
bool isAnyOverlap(ParkingSpaceInfo *parkArea,std::vector<vides_data::ParkingArea> &currentPlates); bool isAnyOverlap(ParkingSpaceInfo *parkArea,std::vector<vides_data::ParkingArea> &currentPlates);
int findPointRegion(ParkingSpaceInfo &prakArea); int findPointRegion(ParkingSpaceInfo &prakArea);
int determineArea(ParkingSpaceInfo &prakArea); int determineArea(ParkingSpaceInfo &prakArea);
signals: signals:
void callbackFrameReady(const cv::Mat &frame, const QString &url); void callbackFrameReady(const cv::Mat &frame, const QString &url);
...@@ -181,10 +184,10 @@ private : ...@@ -181,10 +184,10 @@ private :
int hDevice; int hDevice;
int channel; int channel;
QString httpUrl; QString httpUrl;
SXSDKLoginParam *loginParam; SXSDKLoginParam *loginParam;
SXMediaFaceImageReq *sxMediaFaceImageReq; SXMediaFaceImageReq *sxMediaFaceImageReq;
QString sSn; QString sSn;
QString url; QString url;
std::map<int, vides_data::responseRecognitionData> videoCurrentData; std::map<int, vides_data::responseRecognitionData> videoCurrentData;
...@@ -204,14 +207,15 @@ private : ...@@ -204,14 +207,15 @@ private :
QTimer *dev_snap_syn_timer; QTimer *dev_snap_syn_timer;
int offlineCount=0; int offlineCount=0;
QSemaphore semaphore; QSemaphore semaphore;
int image_save; int image_save;
std::atomic<uint64> faceCount; std::atomic<uint64> faceCount;
std::atomic<bool> isOperateGb28181{false}; std::atomic<bool> isOperateGb28181{false};
uint64 face_frequency; uint64 face_frequency;
__uint8_t algorithmPermissions; __uint8_t algorithmPermissions;
...@@ -219,11 +223,11 @@ private : ...@@ -219,11 +223,11 @@ private :
vides_data::responseConfig devConfig; vides_data::responseConfig devConfig;
float heightReference; float heightReference;
float carConfidenceMax; float carConfidenceMax;
float carConfidenceMin; float carConfidenceMin;
}; };
#endif // CAMERAHANDLE_H #endif // CAMERAHANDLE_H
...@@ -201,10 +201,6 @@ bool Common::pingAddress(const QString &address) { ...@@ -201,10 +201,6 @@ bool Common::pingAddress(const QString &address) {
return true; // 成功,返回true return true; // 成功,返回true
} }
//获取本机mask //获取本机mask
bool GetLocalNetMask(const char *eth_inf,char* netmask_addr) bool GetLocalNetMask(const char *eth_inf,char* netmask_addr)
{ {
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#define ICMP_HDRLEN 8 #define ICMP_HDRLEN 8
#define PAYLOAD_SIZE 56 #define PAYLOAD_SIZE 56
#define MAC_SIZE 18
// ICMP 头部结构体 // ICMP 头部结构体
struct ICMPHeader { struct ICMPHeader {
uint8_t type; // 类型 uint8_t type; // 类型
...@@ -78,6 +78,7 @@ public: ...@@ -78,6 +78,7 @@ public:
QString GetLocalGateWay();//获取本机gateway QString GetLocalGateWay();//获取本机gateway
bool pingAddress(const QString &address) ; bool pingAddress(const QString &address) ;
QString getImages(); QString getImages();
void setImages(QString images); void setImages(QString images);
......
...@@ -46,23 +46,23 @@ cv::Mat FaceReconitionHandle::loadImage(const QString &path) { ...@@ -46,23 +46,23 @@ cv::Mat FaceReconitionHandle::loadImage(const QString &path) {
return image; return image;
} }
image= loadImageFromByteStream(path); image= loadImageFromByteStream(path);
if (!image.empty()) { if (!image.empty()) {
qInfo() << "图像以CImg成功加载。"; qInfo() << "图像以CImg成功加载。";
return image; return image;
} }
image=loadImageWithSTB(path); image=loadImageWithSTB(path);
if (!image.empty()) { if (!image.empty()) {
qInfo() << "图像以stb_image成功加载。"; qInfo() << "图像以stb_image成功加载。";
return image; return image;
} }
image=loadQImageFromByteStream(path); image=loadQImageFromByteStream(path);
if (!image.empty()) { if (!image.empty()) {
qInfo() << "图像以QImage成功加载。"; qInfo() << "图像以QImage成功加载。";
return image; return image;
} }
qInfo() << "四种加载方式都不行"; qInfo() << "四种加载方式都不行";
return cv::Mat(); return cv::Mat();
} }
...@@ -70,7 +70,8 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int ...@@ -70,7 +70,8 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int
ScopeSemaphoreExit streamGuard([this]() { ScopeSemaphoreExit streamGuard([this]() {
isImageChanged.store(false, std::memory_order_release); isImageChanged.store(false, std::memory_order_release);
}); });
featureRemove(); //featureRemove();
featureRemoveMap(maps);
HResult ret; HResult ret;
// 初始化context // 初始化context
#if defined(__arm__) || defined(__ARM_ARCH) #if defined(__arm__) || defined(__ARM_ARCH)
...@@ -95,7 +96,7 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int ...@@ -95,7 +96,7 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int
return; return;
} }
} }
customIds.clear(); //customIds.clear();
int i = 0; int i = 0;
qInfo()<< "加载图像size: "<<maps.size(); qInfo()<< "加载图像size: "<<maps.size();
...@@ -146,7 +147,8 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int ...@@ -146,7 +147,8 @@ void FaceReconitionHandle::initSourceImageMap(std::map<QString,QString>&maps,int
HF_FaceFeatureIdentity identity = {0}; HF_FaceFeatureIdentity identity = {0};
identity.feature = &feature; identity.feature = &feature;
identity.customId = i; identity.customId = i;
customIds.push_back( identity.customId); //customIds.push_back( identity.customId);
mapCustomId[key]=i;
identity.tag = tagName; identity.tag = tagName;
ret = HF_FeaturesGroupInsertFeature(ctxHandle, identity); ret = HF_FeaturesGroupInsertFeature(ctxHandle, identity);
...@@ -178,6 +180,30 @@ void FaceReconitionHandle::featureRemove(){ ...@@ -178,6 +180,30 @@ void FaceReconitionHandle::featureRemove(){
setImageChanged(false); setImageChanged(false);
} }
} }
void FaceReconitionHandle::featureRemoveMap(std::map<QString, QString> &maps){
if(mapCustomId.size()>0){
for (auto it = mapCustomId.begin(); it != mapCustomId.end(); ) {
// 检查当前键是否存在于 maps 中
if (maps.find(it->first) == maps.end()) {
int32_t & customId = it->second;
// 如果不存在,则从 mapCustomId 中删除该键
it = mapCustomId.erase(it);
HResult ret= HF_FeaturesGroupFeatureRemove(ctxHandle,customId);
if (ret != HSUCCEED) {
qInfo() << QString("从特征组中移除一个面部特征失败: %1").arg(ret);
continue;
}
} else {
// 如果存在,则继续下一个元素
++it;
}
}
setImageChanged(false);
}
}
cv::Mat FaceReconitionHandle::loadImageWithSTB(const QString& filename) { cv::Mat FaceReconitionHandle::loadImageWithSTB(const QString& filename) {
int width, height, channels; int width, height, channels;
QByteArray && b_filename = filename.toUtf8(); QByteArray && b_filename = filename.toUtf8();
......
...@@ -20,6 +20,8 @@ private: ...@@ -20,6 +20,8 @@ private:
std::vector<int32_t>customIds; std::vector<int32_t>customIds;
std::map<QString,int32_t>mapCustomId;
std::atomic<bool>isImageChanged{false}; std::atomic<bool>isImageChanged{false};
public: public:
FaceReconitionHandle(); FaceReconitionHandle();
...@@ -44,5 +46,8 @@ public: ...@@ -44,5 +46,8 @@ public:
void featureRemove(); void featureRemove();
void featureRemoveMap(std::map<QString,QString>&maps);
}; };
#endif // FACERECONITIONHANDLE_H #endif // FACERECONITIONHANDLE_H
...@@ -20,7 +20,9 @@ vides_data::response* HttpService::httpPostDeviceStatus(vides_data::requestDevic ...@@ -20,7 +20,9 @@ vides_data::response* HttpService::httpPostDeviceStatus(vides_data::requestDevic
QJsonObject json; QJsonObject json;
json.insert("sn", deviceStatus.sSn); json.insert("sn", deviceStatus.sSn);
json.insert("type", deviceStatus.type); json.insert("type", deviceStatus.type);
json.insert("mac", deviceStatus.mac);
json.insert("state", deviceStatus.status); json.insert("state", deviceStatus.status);
json.insert("ip_addr", deviceStatus.ip_addr); json.insert("ip_addr", deviceStatus.ip_addr);
json.insert("firmware_version", deviceStatus.firmware_version); // 将固件版本添加到主 JSON 对象中 json.insert("firmware_version", deviceStatus.firmware_version); // 将固件版本添加到主 JSON 对象中
...@@ -30,6 +32,7 @@ vides_data::response* HttpService::httpPostDeviceStatus(vides_data::requestDevic ...@@ -30,6 +32,7 @@ vides_data::response* HttpService::httpPostDeviceStatus(vides_data::requestDevic
QJsonObject cameraObject; QJsonObject cameraObject;
cameraObject.insert("sn", cameraInfo.sSn); cameraObject.insert("sn", cameraInfo.sSn);
cameraObject.insert("ip_addr", cameraInfo.ip_addr); cameraObject.insert("ip_addr", cameraInfo.ip_addr);
cameraObject.insert("mac", cameraInfo.mac);
cameraObject.insert("firmware_version", cameraInfo.firmware_version); cameraObject.insert("firmware_version", cameraInfo.firmware_version);
cameraArray.append(cameraObject); cameraArray.append(cameraObject);
} }
......
...@@ -106,6 +106,7 @@ int MediaFaceImage::SdkSearchDevicesSyn(std::map<QString, vides_data::localDevic ...@@ -106,6 +106,7 @@ int MediaFaceImage::SdkSearchDevicesSyn(std::map<QString, vides_data::localDevic
pDevice->HttpPort=pRet[i].HttpPort; pDevice->HttpPort=pRet[i].HttpPort;
pDevice->UserName= QString::fromUtf8(pRet[i].DefaultUser,sizeof(pRet[i].DefaultUser)); pDevice->UserName= QString::fromUtf8(pRet[i].DefaultUser,sizeof(pRet[i].DefaultUser));
pDevice->password= QString::fromUtf8(pRet[i].DefaultPwd,sizeof(pRet[i].DefaultPwd)); pDevice->password= QString::fromUtf8(pRet[i].DefaultPwd,sizeof(pRet[i].DefaultPwd));
pDevice->mac=QString::fromUtf8(pRet[i].sMac);
devices.insert(std::make_pair(pDevice->sSn, pDevice)); devices.insert(std::make_pair(pDevice->sSn, pDevice));
} }
......
...@@ -199,7 +199,7 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess ...@@ -199,7 +199,7 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
} 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 //1开 2关 3 重启 4 GB28181开 5 GB28181 关 6 一键配网 7 WIFI配留 8 复位GB28181 9 修改GB28181
int res = -2; int res = -2;
CameraHandle* cameraHandle = MainWindow::sp_this->findHandle(response.sn); CameraHandle* cameraHandle = MainWindow::sp_this->findHandle(response.sn);
int hDevice=0; int hDevice=0;
...@@ -228,7 +228,8 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess ...@@ -228,7 +228,8 @@ int MqttSubscriber::messageArrived(char* topicName, int topicLen, MQTTAsync_mess
} }
break; break;
} }
case 8: res = cameraHandle->resetGb28181( response.uniq); break; case 8: res = cameraHandle->resetGb28181(); break;
case 9:res=cameraHandle->forceWriteGb28181();break;
default: qInfo() << "Unknown message type"; break; default: qInfo() << "Unknown message type"; break;
} }
} }
......
...@@ -24,23 +24,23 @@ NonConnectedCameraHandle* NonConnectedCameraHandle::getInstance() ...@@ -24,23 +24,23 @@ NonConnectedCameraHandle* NonConnectedCameraHandle::getInstance()
bool NonConnectedCameraHandle::changeCameraIp(vides_data::localDevice &device){ bool NonConnectedCameraHandle::changeCameraIp(vides_data::localDevice &device){
Common & instace= Common::getInstance(); Common & instace= Common::getInstance();
char interface[IFNAMSIZ]; char interface[IFNAMSIZ];
// 确定当前网络接口 // 确定当前网络接口
instace.determine_interface(interface); instace.determine_interface(interface);
QString subnetMask; QString subnetMask;
bool sub=vides_data::GetSubnetMask(subnetMask); bool sub=vides_data::GetSubnetMask(subnetMask);
QString gateway= instace.GetLocalGateWay(); QString gateway= instace.GetLocalGateWay();
if ( !sub && gateway.length()==0 ) { if ( !sub && gateway.length()==0 ) {
qInfo() <<QString("SN(%1): 获取本地MAC失败").arg(device.sSn); qInfo() <<QString("SN(%1): 获取本地MAC失败").arg(device.sSn);
return false ; return false ;
} }
QByteArray && byJsonIp = device.reachableIp.toUtf8(); QByteArray && byJsonIp = device.reachableIp.toUtf8();
const char * charIp= byJsonIp.data(); const char * charIp= byJsonIp.data();
...@@ -250,7 +250,7 @@ int NonConnectedCameraHandle::sdkDevLoginSyn(QString sDevId, int nDevPort, ...@@ -250,7 +250,7 @@ int NonConnectedCameraHandle::sdkDevLoginSyn(QString sDevId, int nDevPort,
} }
bool NonConnectedCameraHandle::distributionNetwork(QString &ip,QString &sSn,int hDevice ){ bool NonConnectedCameraHandle::distributionNetwork(QString &ip,QString &sSn,int hDevice ){
Common & instace= Common::getInstance(); Common & instace= Common::getInstance();
if(ip.length()>0 && instace.pingAddress(ip)){ if(ip.length()>0 && instace.pingAddress(ip)){
qInfo()<<QString("SN(%1): 当前ip已被使用%2").arg(sSn).arg(ip); qInfo()<<QString("SN(%1): 当前ip已被使用%2").arg(sSn).arg(ip);
return false; return false;
......
...@@ -31,7 +31,6 @@ public: ...@@ -31,7 +31,6 @@ public:
int sdkDevLoginSyn(QString sDevId, int nDevPort, int sdkDevLoginSyn(QString sDevId, int nDevPort,
QString sUserName, QString sPassword, int nTimeout) ; QString sUserName, QString sPassword, int nTimeout) ;
private: private:
NonConnectedCameraHandle(); // 构造函数声明为私有 NonConnectedCameraHandle(); // 构造函数声明为私有
~NonConnectedCameraHandle(); // 析构函数声明为私有 ~NonConnectedCameraHandle(); // 析构函数声明为私有
......
...@@ -36,6 +36,7 @@ struct requestCameraInfo{ ...@@ -36,6 +36,7 @@ struct requestCameraInfo{
QString ip_addr; QString ip_addr;
QString firmware_version; QString firmware_version;
QString sSn; QString sSn;
QString mac;
requestCameraInfo() {} requestCameraInfo() {}
}; };
...@@ -46,6 +47,7 @@ struct requestDeviceStatus ...@@ -46,6 +47,7 @@ struct requestDeviceStatus
int8_t status; int8_t status;
QString ip_addr; QString ip_addr;
QString firmware_version; QString firmware_version;
QString mac;
std::list<requestCameraInfo>camera_info_list; std::list<requestCameraInfo>camera_info_list;
requestDeviceStatus() {} requestDeviceStatus() {}
}; };
...@@ -106,6 +108,7 @@ struct localDeviceStatus ...@@ -106,6 +108,7 @@ struct localDeviceStatus
int ChannelNum; int ChannelNum;
QString UserName; QString UserName;
QString password; QString password;
QString mac;
localDeviceStatus() {} localDeviceStatus() {}
}; };
struct localDevice struct localDevice
...@@ -188,6 +191,7 @@ struct cameraParameters ...@@ -188,6 +191,7 @@ struct cameraParameters
QString sSn; QString sSn;
QString rtspUrl; QString rtspUrl;
QString rtmpUrl; QString rtmpUrl;
QString mac;
cameraParameters() {} cameraParameters() {}
}; };
struct NetWorkNetCommon { struct NetWorkNetCommon {
...@@ -441,13 +445,30 @@ inline bool isInSameSubnet(const QString &ip1, const QString &ip2, const QString ...@@ -441,13 +445,30 @@ inline bool isInSameSubnet(const QString &ip1, const QString &ip2, const QString
return result1 == result2; return result1 == result2;
} }
inline QString getHostMacAddress()
{
QList<QNetworkInterface> nets = QNetworkInterface::allInterfaces();// 获取所有网络接口列表
int nCnt = nets.count();
QString strMacAddr = "";
for(int i = 0; i < nCnt; i ++)
{
// 如果此网络接口被激活并且正在运行并且不是回环地址,则就是我们需要找的Mac地址
if(nets[i].flags().testFlag(QNetworkInterface::IsUp) && nets[i].flags().testFlag(QNetworkInterface::IsRunning) && !nets[i].flags().testFlag(QNetworkInterface::IsLoopBack))
{
strMacAddr = nets[i].hardwareAddress();
break;
}
}
return strMacAddr.toLower();
}
// 获取子网掩码 // 获取子网掩码
inline bool GetSubnetMask(QString &subnetMask) { inline bool GetSubnetMask(QString &subnetMask) {
QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces(); QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
foreach (QNetworkInterface interface, interfaces) { foreach (QNetworkInterface interface, interfaces) {
if (interface.flags().testFlag(QNetworkInterface::IsUp) && if (interface.flags().testFlag(QNetworkInterface::IsUp) &&
interface.flags().testFlag(QNetworkInterface::IsRunning) && interface.flags().testFlag(QNetworkInterface::IsRunning) &&
!interface.flags().testFlag(QNetworkInterface::IsLoopBack)) { !interface.flags().testFlag(QNetworkInterface::IsLoopBack)) {
QList<QNetworkAddressEntry> addressEntries = interface.addressEntries(); QList<QNetworkAddressEntry> addressEntries = interface.addressEntries();
foreach (QNetworkAddressEntry entry, addressEntries) { foreach (QNetworkAddressEntry entry, addressEntries) {
......
...@@ -63,7 +63,7 @@ public: ...@@ -63,7 +63,7 @@ public:
void removeImageFiles(QString id); void removeImageFiles(QString id);
void modifyImagesAndNames(QString &modId); void modifyImagesAndNames(QString &modId,std::map<QString, QString> &currentImageMap);
void findLocalSerialNumber(QString &serialNumber); void findLocalSerialNumber(QString &serialNumber);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment