|
|
|
@ -1,29 +1,23 @@
|
|
|
|
#include <QDir>
|
|
|
|
#include <QDir>
|
|
|
|
#include "globalCamera.h"
|
|
|
|
#include "lpCameraConfig.h"
|
|
|
|
#include "ZkCameraImage.h"
|
|
|
|
|
|
|
|
#include <QReadWriteLock>
|
|
|
|
#include <QReadWriteLock>
|
|
|
|
#include <QCoreApplication>
|
|
|
|
#include <QCoreApplication>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const char lpCameraConfig::cs_szCfgName[] = "camera";
|
|
|
|
const char CGlobalCamera::cs_szCfgName[] = "camera";
|
|
|
|
lpCameraConfig::lpCameraConfig()
|
|
|
|
CGlobalCamera::CGlobalCamera(const CAMERA_IN_PARAM* pInParam)
|
|
|
|
|
|
|
|
:m_mtxCam(QMutex::Recursive)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_pCallback = pInParam->pCallback;
|
|
|
|
|
|
|
|
m_pGlobalData = pInParam->pGlobalData;
|
|
|
|
|
|
|
|
readConfig();
|
|
|
|
readConfig();
|
|
|
|
readSerials();
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
CGlobalCamera::~CGlobalCamera()
|
|
|
|
lpCameraConfig::~lpCameraConfig()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
releaseConfig();
|
|
|
|
releaseConfig();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bool CGlobalCamera::CameraOption(const QString& serials, TP_CAMERA_OPTION& camOpt)
|
|
|
|
bool lpCameraConfig::CameraOption(const QString& serials, TP_CAMERA_OPTION& camOpt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
// camOpt.serials = serials;
|
|
|
|
// camOpt.serials = serials;
|
|
|
|
return m_cameraesOption.iterateCall(copyCameraOptionBySerial, &camOpt);
|
|
|
|
return m_cameraesOption.iterateCall(copyCameraOptionBySerial, &camOpt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
bool CGlobalCamera::copyCameraOptionBySerial(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
bool lpCameraConfig::copyCameraOptionBySerial(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TP_CAMERA_OPTION* pDes = (TP_CAMERA_OPTION*)pData;
|
|
|
|
TP_CAMERA_OPTION* pDes = (TP_CAMERA_OPTION*)pData;
|
|
|
|
if (pCamOpt->uniqueName == pDes->uniqueName)
|
|
|
|
if (pCamOpt->uniqueName == pDes->uniqueName)
|
|
|
|
@ -34,18 +28,18 @@ bool CGlobalCamera::copyCameraOptionBySerial(const QString& key, TP_CAMERA_OPTIO
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CGlobalCamera::CameraOptionByKey(const QString& sKey, TP_CAMERA_OPTION& camOpt)
|
|
|
|
bool lpCameraConfig::CameraOptionByKey(const QString& sKey, TP_CAMERA_OPTION& camOpt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return m_cameraesOption.valueCall(sKey, copyCameraOptionByKey, &camOpt);
|
|
|
|
return m_cameraesOption.valueCall(sKey, copyCameraOptionByKey, &camOpt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::copyCameraOptionByKey(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
void lpCameraConfig::copyCameraOptionByKey(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TP_CAMERA_OPTION* pDes = (TP_CAMERA_OPTION*)pData;
|
|
|
|
TP_CAMERA_OPTION* pDes = (TP_CAMERA_OPTION*)pData;
|
|
|
|
*pDes = *pCamOpt;
|
|
|
|
*pDes = *pCamOpt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CGlobalCamera::SetCameraOption(const QString& sKey, const TP_CAMERA_OPTION& camOpt)
|
|
|
|
bool lpCameraConfig::SetCameraOption(const QString& sKey, const TP_CAMERA_OPTION& camOpt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TP_CAMERA_OPTION* pOpt = m_cameraesOption.value(sKey, NULL);
|
|
|
|
TP_CAMERA_OPTION* pOpt = m_cameraesOption.value(sKey, NULL);
|
|
|
|
if (NULL == pOpt)
|
|
|
|
if (NULL == pOpt)
|
|
|
|
@ -64,7 +58,7 @@ bool CGlobalCamera::SetCameraOption(const QString& sKey, const TP_CAMERA_OPTION&
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CGlobalCamera::SaveCameraOption(const TP_CAMERA_OPTION& camOpt)
|
|
|
|
bool lpCameraConfig::SaveCameraOption(const TP_CAMERA_OPTION& camOpt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QJsonObject jsonDevices = m_jsonCamera.value("devices").toObject();
|
|
|
|
QJsonObject jsonDevices = m_jsonCamera.value("devices").toObject();
|
|
|
|
if (jsonDevices.isEmpty())
|
|
|
|
if (jsonDevices.isEmpty())
|
|
|
|
@ -84,14 +78,13 @@ bool CGlobalCamera::SaveCameraOption(const TP_CAMERA_OPTION& camOpt)
|
|
|
|
return true;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::readConfig()
|
|
|
|
void lpCameraConfig::readConfig()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int nError;
|
|
|
|
int nError;
|
|
|
|
//read config from ".json" file
|
|
|
|
//read config from ".json" file
|
|
|
|
QString szFileName(""/*m_pGlobalData->tgdMainPath*/);
|
|
|
|
QString szFileName(""/*m_pGlobalData->tgdMainPath*/);
|
|
|
|
szFileName.append("./config/"/*m_pGlobalData->tgdFolderNames[TP_FOLDER_NAME_CONFIG]*/).append(cs_szCfgName).append(TP_STR::cszJsonSuffix);
|
|
|
|
szFileName.append("./config/"/*m_pGlobalData->tgdFolderNames[TP_FOLDER_NAME_CONFIG]*/).append(cs_szCfgName).append(TP_STR::cszJsonSuffix);
|
|
|
|
// szFileName.append(TP_STR::cszCfgFolder)
|
|
|
|
// szFileName.append(TP_STR::cszCfgFolder)
|
|
|
|
QMutexLocker locker(&m_mtxCam);
|
|
|
|
|
|
|
|
QJsonObject objJson = m_jsonCamera = QZkJsonParser::ReadJsonObject(szFileName, &nError);
|
|
|
|
QJsonObject objJson = m_jsonCamera = QZkJsonParser::ReadJsonObject(szFileName, &nError);
|
|
|
|
tpDebugOut("camera.json paths: %s", szFileName.toLocal8Bit().data());
|
|
|
|
tpDebugOut("camera.json paths: %s", szFileName.toLocal8Bit().data());
|
|
|
|
tpDebugOut("read camera.json result: %d", nError);
|
|
|
|
tpDebugOut("read camera.json result: %d", nError);
|
|
|
|
@ -108,13 +101,7 @@ void CGlobalCamera::readConfig()
|
|
|
|
//
|
|
|
|
//
|
|
|
|
QJsonValue value = objJson["devices"];
|
|
|
|
QJsonValue value = objJson["devices"];
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject userJson = getAppJsonUser();
|
|
|
|
|
|
|
|
QJsonArray objEnableCameras = userJson["enable_cameras"].toArray();
|
|
|
|
|
|
|
|
QStringList enableCamList;
|
|
|
|
|
|
|
|
for (int i = 0; i < objEnableCameras.size(); ++i)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
enableCamList.append(objEnableCameras[i].toString());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!value.isUndefined() && value.isObject())
|
|
|
|
if (!value.isUndefined() && value.isObject())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QJsonObject objDevices = value.toObject();
|
|
|
|
QJsonObject objDevices = value.toObject();
|
|
|
|
@ -145,7 +132,7 @@ void CGlobalCamera::readConfig()
|
|
|
|
QJsonValue tempV = objCam.value("format");
|
|
|
|
QJsonValue tempV = objCam.value("format");
|
|
|
|
if (tempV.isString())
|
|
|
|
if (tempV.isString())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
pCamOpt->format = CZkCameraImage::FromString(tempV.toString());
|
|
|
|
pCamOpt->format = lpCameraImage::FromString(tempV.toString());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -188,9 +175,6 @@ void CGlobalCamera::readConfig()
|
|
|
|
pCamOpt->macAddress = objCam.value("mac_address").toString();
|
|
|
|
pCamOpt->macAddress = objCam.value("mac_address").toString();
|
|
|
|
pCamOpt->bAutoPush = objCam.value("auto_push").toInt(1);
|
|
|
|
pCamOpt->bAutoPush = objCam.value("auto_push").toInt(1);
|
|
|
|
pCamOpt->bAutoOpen = objCam.value("auto_open").toBool(true);
|
|
|
|
pCamOpt->bAutoOpen = objCam.value("auto_open").toBool(true);
|
|
|
|
if (!enableCamList.contains(it.key())){
|
|
|
|
|
|
|
|
pCamOpt->bAutoOpen = false;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
pCamOpt->cameraFilePath = objCam.value("camera_file").toString();
|
|
|
|
pCamOpt->cameraFilePath = objCam.value("camera_file").toString();
|
|
|
|
if (objCam.value("algorithm_dll").toDouble())
|
|
|
|
if (objCam.value("algorithm_dll").toDouble())
|
|
|
|
@ -209,11 +193,11 @@ void CGlobalCamera::readConfig()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::checkFolder(QString& sFolder)
|
|
|
|
void lpCameraConfig::checkFolder(QString& sFolder)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (sFolder.startsWith(".\\"))
|
|
|
|
if (sFolder.startsWith(".\\"))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
sFolder.replace(".\\", m_pGlobalData->tgdMainPath);
|
|
|
|
//sFolder.replace(".\\", m_pGlobalData->tgdMainPath);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!sFolder.endsWith('\\'))
|
|
|
|
if (!sFolder.endsWith('\\'))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
@ -221,18 +205,18 @@ void CGlobalCamera::checkFolder(QString& sFolder)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::releaseConfig(const QString& key /* = NULL */)
|
|
|
|
void lpCameraConfig::releaseConfig(const QString& key /* = NULL */)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
m_cameraesOption.clear(releaseCameraOption);
|
|
|
|
m_cameraesOption.clear(releaseCameraOption);
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::releaseCameraOption(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
void lpCameraConfig::releaseCameraOption(const QString& key, TP_CAMERA_OPTION*& pCamOpt, void* pData)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
delete pCamOpt;
|
|
|
|
delete pCamOpt;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QList<QString> CGlobalCamera::CameraKeysOrderByIds()
|
|
|
|
QList<QString> lpCameraConfig::CameraKeysOrderByIds()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QList<TP_CAMERA_OPTION*> options = m_cameraesOption.values();
|
|
|
|
QList<TP_CAMERA_OPTION*> options = m_cameraesOption.values();
|
|
|
|
qSort(options.begin(), options.end(), optionCompare);
|
|
|
|
qSort(options.begin(), options.end(), optionCompare);
|
|
|
|
@ -244,12 +228,12 @@ QList<QString> CGlobalCamera::CameraKeysOrderByIds()
|
|
|
|
return strList;
|
|
|
|
return strList;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool CGlobalCamera::optionCompare(TP_CAMERA_OPTION* op1, TP_CAMERA_OPTION* op2)
|
|
|
|
bool lpCameraConfig::optionCompare(TP_CAMERA_OPTION* op1, TP_CAMERA_OPTION* op2)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return (op1->id < op2->id);
|
|
|
|
return (op1->id < op2->id);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QMap<QString, QString> CGlobalCamera::GetCamShowNames()
|
|
|
|
QMap<QString, QString> lpCameraConfig::GetCamShowNames()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QMap<QString, QString> knMap;
|
|
|
|
QMap<QString, QString> knMap;
|
|
|
|
for (QZkMutexMap<QString, TP_CAMERA_OPTION*>::iterator it = m_cameraesOption.begin(); it != m_cameraesOption.end(); ++it)
|
|
|
|
for (QZkMutexMap<QString, TP_CAMERA_OPTION*>::iterator it = m_cameraesOption.begin(); it != m_cameraesOption.end(); ++it)
|
|
|
|
@ -259,24 +243,8 @@ QMap<QString, QString> CGlobalCamera::GetCamShowNames()
|
|
|
|
return knMap;
|
|
|
|
return knMap;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::readSerials()
|
|
|
|
void lpCameraConfig::delCameraOption(const QString& serials)
|
|
|
|
{
|
|
|
|
|
|
|
|
#ifdef _USE_CAMERA_SERIAL_ENCRYPTO
|
|
|
|
|
|
|
|
QString szFileName(m_pGlobalData->tgdMainPath);
|
|
|
|
|
|
|
|
szFileName.append("serials.dat");
|
|
|
|
|
|
|
|
QZkSerialNumbers serials;
|
|
|
|
|
|
|
|
QList<QByteArray> bytes = serials.AddFileName(szFileName);
|
|
|
|
|
|
|
|
for (QList<QByteArray>::iterator it = bytes.begin(); it != bytes.end(); ++it)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
m_serialsList.append(QString::fromUtf8(*it));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::delCameraOption(const QString& serials)
|
|
|
|
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QMutexLocker locker(&m_mtxCam);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TP_CAMERA_OPTION* pcamOpt = m_cameraesOption.value(serials);
|
|
|
|
TP_CAMERA_OPTION* pcamOpt = m_cameraesOption.value(serials);
|
|
|
|
if (pcamOpt){
|
|
|
|
if (pcamOpt){
|
|
|
|
m_cameraesOption.remove(serials);
|
|
|
|
m_cameraesOption.remove(serials);
|
|
|
|
@ -285,11 +253,8 @@ void CGlobalCamera::delCameraOption(const QString& serials)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CGlobalCamera::updateCameraOption(const QString& serials, const TP_CAMERA_OPTION& camOpt)
|
|
|
|
void lpCameraConfig::updateCameraOption(const QString& serials, const TP_CAMERA_OPTION& camOpt)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
QMutexLocker locker(&m_mtxCam);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// update if exist, otherwise new one.
|
|
|
|
|
|
|
|
if (m_cameraesOption.contains(serials))
|
|
|
|
if (m_cameraesOption.contains(serials))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
TP_CAMERA_OPTION* pCamOpt = m_cameraesOption.value(serials);
|
|
|
|
TP_CAMERA_OPTION* pCamOpt = m_cameraesOption.value(serials);
|
|
|
|
@ -307,31 +272,3 @@ void CGlobalCamera::updateCameraOption(const QString& serials, const TP_CAMERA_O
|
|
|
|
pCamOpt->pSerials = &m_serialsList;
|
|
|
|
pCamOpt->pSerials = &m_serialsList;
|
|
|
|
m_cameraesOption.insert(pCamOpt->uniqueName, pCamOpt);
|
|
|
|
m_cameraesOption.insert(pCamOpt->uniqueName, pCamOpt);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QJsonObject CGlobalCamera::getAppJsonUser()
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
QJsonObject userJson;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QString strUiPath(m_pGlobalData->tgdMainPath);
|
|
|
|
|
|
|
|
strUiPath.append(m_pGlobalData->tgdFolderNames[TP_FOLDER_NAME_UI]);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
QString strAppJsonPath(strUiPath);
|
|
|
|
|
|
|
|
strAppJsonPath.append(QCoreApplication::applicationName());
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
|
|
|
|
if (strAppJsonPath.endsWith('d'))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
strAppJsonPath.chop(1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
strAppJsonPath.append(".json");
|
|
|
|
|
|
|
|
if (!QFile::exists(strAppJsonPath))
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
strAppJsonPath = strUiPath + "app.json";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int nerr;
|
|
|
|
|
|
|
|
QJsonObject objJson = QZkJsonParser::ReadJsonObject(strAppJsonPath, &nerr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
userJson = objJson["user"].toObject();
|
|
|
|
|
|
|
|
return userJson;
|
|
|
|
|
|
|
|
}
|
|
|
|
|