Skip to content
Snippets Groups Projects
Commit f4df55ba authored by am0ebe's avatar am0ebe
Browse files

WIP parse config file. get name ip of each cam from a json

parent baf20fee
No related branches found
No related tags found
No related merge requests found
[
{
"arguments": [
"/usr/bin/g++",
"-c",
"-pipe",
"-O2",
"-std=gnu++2a",
"-Wall",
"-Wextra",
"-fPIC",
"-D_REENTRANT",
"-DQT_USE_QSTRINGBUILDER",
"-DQT_NO_DEBUG",
"-DQT_WIDGETS_LIB",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I.",
"-I../vimbax/api/include",
"-I/usr/include/opencv4",
"-I/usr/include/x86_64-linux-gnu/qt6",
"-I/usr/include/x86_64-linux-gnu/qt6/QtWidgets",
"-I/usr/include/x86_64-linux-gnu/qt6/QtGui",
"-I/usr/include/x86_64-linux-gnu/qt6/QtCore",
"-I.",
"-I.",
"-I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++",
"-o",
"main.o",
"../src/main.cpp"
],
"directory": "/home/sugu/code/idiv/camtron_all/b/obj",
"file": "/home/sugu/code/idiv/camtron_all/b/src/main.cpp",
"output": "/home/sugu/code/idiv/camtron_all/b/obj/main.o"
},
{
"arguments": [
"/usr/bin/g++",
"-c",
"-pipe",
"-O2",
"-std=gnu++2a",
"-Wall",
"-Wextra",
"-fPIC",
"-D_REENTRANT",
"-DQT_USE_QSTRINGBUILDER",
"-DQT_NO_DEBUG",
"-DQT_WIDGETS_LIB",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I.",
"-I../vimbax/api/include",
"-I/usr/include/opencv4",
"-I/usr/include/x86_64-linux-gnu/qt6",
"-I/usr/include/x86_64-linux-gnu/qt6/QtWidgets",
"-I/usr/include/x86_64-linux-gnu/qt6/QtGui",
"-I/usr/include/x86_64-linux-gnu/qt6/QtCore",
"-I.",
"-I.",
"-I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++",
"-o",
"utils.o",
"../src/utils.cpp"
],
"directory": "/home/sugu/code/idiv/camtron_all/b/obj",
"file": "/home/sugu/code/idiv/camtron_all/b/src/utils.cpp",
"output": "/home/sugu/code/idiv/camtron_all/b/obj/utils.o"
},
{
"arguments": [
"/usr/bin/g++",
"-c",
"-pipe",
"-O2",
"-std=gnu++2a",
"-Wall",
"-Wextra",
"-fPIC",
"-D_REENTRANT",
"-DQT_USE_QSTRINGBUILDER",
"-DQT_NO_DEBUG",
"-DQT_WIDGETS_LIB",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I.",
"-I../vimbax/api/include",
"-I/usr/include/opencv4",
"-I/usr/include/x86_64-linux-gnu/qt6",
"-I/usr/include/x86_64-linux-gnu/qt6/QtWidgets",
"-I/usr/include/x86_64-linux-gnu/qt6/QtGui",
"-I/usr/include/x86_64-linux-gnu/qt6/QtCore",
"-I.",
"-I.",
"-I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++",
"-o",
"mainwindow.o",
"../src/mainwindow.cpp"
],
"directory": "/home/sugu/code/idiv/camtron_all/b/obj",
"file": "/home/sugu/code/idiv/camtron_all/b/src/mainwindow.cpp",
"output": "/home/sugu/code/idiv/camtron_all/b/obj/mainwindow.o"
},
{
"arguments": [
"/usr/bin/g++",
"-c",
"-pipe",
"-O2",
"-std=gnu++2a",
"-Wall",
"-Wextra",
"-fPIC",
"-D_REENTRANT",
"-DQT_USE_QSTRINGBUILDER",
"-DQT_NO_DEBUG",
"-DQT_WIDGETS_LIB",
"-DQT_GUI_LIB",
"-DQT_CORE_LIB",
"-I.",
"-I../vimbax/api/include",
"-I/usr/include/opencv4",
"-I/usr/include/x86_64-linux-gnu/qt6",
"-I/usr/include/x86_64-linux-gnu/qt6/QtWidgets",
"-I/usr/include/x86_64-linux-gnu/qt6/QtGui",
"-I/usr/include/x86_64-linux-gnu/qt6/QtCore",
"-I.",
"-I.",
"-I/usr/lib/x86_64-linux-gnu/qt6/mkspecs/linux-g++",
"-o",
"moc_mainwindow.o",
"moc_mainwindow.cpp"
],
"directory": "/home/sugu/code/idiv/camtron_all/b/obj",
"file": "/home/sugu/code/idiv/camtron_all/b/obj/moc_mainwindow.cpp",
"output": "/home/sugu/code/idiv/camtron_all/b/obj/moc_mainwindow.o"
}
]
[
{
"name": "camtron1",
"ip": "172.18.227.210"
},
{
"name": "camtron2",
"ip": "172.18.227.211"
},
{
"name": "camtron3",
"ip": "172.18.225.164"
},
{
"name": "camtron4",
"ip": "172.18.227.213"
},
{
"name": "camtron5",
"ip": "172.18.225.198"
},
{
"name": "camtron6",
"ip": "172.18.227.215"
}
]
......@@ -15,6 +15,10 @@ using State = Cam::State;
using namespace VmbCPP;
using namespace std::chrono;
//xxx
// Cam(QString name, QString ip) : IPrinter(),
// _cam(CameraPtr(new Camera(name.toStdString(), ip.toStdString()))),
Cam::Cam(CameraPtr pCamera) : IPrinter(),
_cam(pCamera),
_id(""),
......@@ -27,6 +31,7 @@ _timer(new QTimer(this))
_timer->setSingleShot(true);
connect(_timer, SIGNAL(timeout()), this, SLOT(stopRecording()));
id();
}
// Copy constructor
......
......@@ -38,6 +38,7 @@ public:
// const QString& name, const int& nThreads
Cam(CameraPtr pCamera);
Cam(QString name, QString ip);
Cam(const Cam&);
~Cam();
......@@ -59,6 +60,8 @@ public slots:
private:
CameraPtr _cam;
QString _name;
QString _ip;
QString _id;
State _state;
FramePtrVector _frames;
......
#include "VmbCPP/Interface.h"
#include "console.h"
#include "../core.h"
#include "../utils.h"
#include "qobjectdefs.h"
#include "../cam.h"
#include "qobjectdefs.h"
// #include "qnamespace.h"
#include <QCoreApplication>
#include <QTimer>
......@@ -14,6 +17,9 @@ int main(int argc, char *argv[])
QCoreApplication::setApplicationVersion(getVersion());
QCoreApplication::setApplicationName("recorder");
//parse from arg
// configFile("cams23.json");
Controller controller;
Core core;
......@@ -28,7 +34,9 @@ int main(int argc, char *argv[])
// XXX add new func
QTimer::singleShot(0, Console::getInstance(), SLOT(printVersion()));
QTimer::singleShot(100, &core, SLOT(openCam())); // for testing
// QTimer::singleShot(100, &core, SLOT(openCam())); // for testing
return a.exec();
}
......@@ -22,7 +22,6 @@ using namespace VmbCPP;
using namespace std::chrono_literals; //seconds, minutes, hours
Core::Core() : IPrinter(),
_apiStarted( false ),
_sys( VmbSystem::GetInstance() ), // create and get Vimba singleton
_cameras( CamPtrVector() ),
_recDuration( 6s ) //default
......@@ -35,8 +34,6 @@ void Core::init()
if ( f(_sys.Startup(), "init API") )
exit(VmbErrorApiNotStarted);
_apiStarted = true;
print("threads",QThread::idealThreadCount());
auto camObserver = new CamObserver();
......@@ -45,9 +42,22 @@ void Core::init()
f(_sys.RegisterCameraListObserver(ICameraListObserverPtr(camObserver)), "register cam observer");
listCams();
//parse config file
QList<QPair<QString, QString>> parsedCameras;
parseConfig(configFile(), parsedCameras);
print("parsed cams:");
for ( auto cam : parsedCameras )
{
print({cam.first,cam.second});
}
//XXX
//ping each cam and if its exists create camPtr
// listCams();
}
Core::~Core()
{
qDebug() << __FUNCTION__ << "():" << __LINE__;
......@@ -58,62 +68,65 @@ Core::~Core()
// update & sync camera vectors
void Core::updateCameras()
{
if( !_apiStarted )
return;
CameraPtrVector vmbCameras;
if ( f(_sys.GetCameras( vmbCameras ), "update cameras") )
return;
if( (int)vmbCameras.size() != ncam() ) //update number of cameras
error(QString("Expected %1 cams!").arg(ncam()),errLessCamsThanExpected); //XXX warning
// vector< shared_ptr<Camera> > vmbCameras
// vector< shared_ptr<Cam> > _cameras
// Add new cameras
for (const auto& vcam : vmbCameras)
{
bool found = false;
for (const auto& cam : _cameras)
{
if (cam->getCameraPtr() == vcam)
{
found = true;
break;
}
}
if (!found)
{
_cameras.push_back(std::make_shared<Cam>(vcam)); //create Cam() from CameraPtr vcam
print(QString("cam connected: %1").arg(_cameras.back()->id()));
}
}
// Remove cameras that are no longer present
auto it = _cameras.begin();
while (it != _cameras.end())
{
// qDebug() << "check " << (*it)->id();
bool found = false;
for (const auto& vcam : vmbCameras)
{
if ((*it)->getCameraPtr() == vcam)
{
found = true;
++it;
break;
}
}
if (!found)
{
qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << " !!! ";
print({"cam disconnected",(*it)->id()});
it = _cameras.erase(it);
}
}
// CameraPtrVector vmbCameras;
// if ( f(_sys.GetCameras( vmbCameras ), "update cameras") )
// return;
//XXX
// if( VmbErrorSuccess == _sys.GetCameraByID( "172.18.227.211", VmbAccessModeFull, camera ) )
// {
// std::cout << "Camera opened" << std::endl;
// }
// if( (int)vmbCameras.size() != ncam() ) //update number of cameras
// error(QString("Expected %1 cams!").arg(ncam()),errLessCamsThanExpected); //XXX warning
// // vector< shared_ptr<Camera> > vmbCameras
// // vector< shared_ptr<Cam> > _cameras
// // Add new cameras
// for (const auto& vcam : vmbCameras)
// {
// bool found = false;
// for (const auto& cam : _cameras)
// {
// if (cam->getCameraPtr() == vcam)
// {
// found = true;
// break;
// }
// }
// if (!found)
// {
// _cameras.push_back(std::make_shared<Cam>(vcam)); //create Cam() from CameraPtr vcam
// print(QString("cam connected: %1").arg(_cameras.back()->id()));
// }
// }
// // Remove cameras that are no longer present
// auto it = _cameras.begin();
// while (it != _cameras.end())
// {
// // qDebug() << "check " << (*it)->id();
// bool found = false;
// for (const auto& vcam : vmbCameras)
// {
// if ((*it)->getCameraPtr() == vcam)
// {
// found = true;
// ++it;
// break;
// }
// }
// if (!found)
// {
// qDebug() << __LINE__ << "-" << __PRETTY_FUNCTION__ << " !!! ";
// print({"cam disconnected",(*it)->id()});
// it = _cameras.erase(it);
// }
// }
} // now ~Camera() should be called on removed cams. >> triggers camObserver
void Core::toggleCamState(CameraPtr vcam)
......@@ -126,10 +139,7 @@ void Core::toggleCamState(CameraPtr vcam)
// update + print camlist
void Core::listCams()
{
if( !_apiStarted )
return;
updateCameras();]
updateCameras();
print("cams",_cameras.size());
QStringList allCamInfo;
......
......@@ -40,7 +40,6 @@ private slots:
private:
void updateCameras();
bool _apiStarted;
VmbSystem& _sys;
CamPtrVector _cameras;
seconds _recDuration;
......
#include "frameprocessor.h"
#include "frameobserver.h"
#include "qobject.h"
// #include "qobject.h"
#include <opencv2/imgcodecs.hpp>
#include <opencv2/opencv.hpp>
......
......@@ -18,6 +18,8 @@ public slots:
signals:
void frameProcessed(FramePtr);
private:
FramePtr m_pframe;
};
......@@ -7,11 +7,15 @@
#include "VmbCPP/VmbCPP.h"
#include <QString>
#include <QDebug>
#include <QDir>
#include <QThread>
#include <QCoreApplication>
#include <QFile>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
const int APP_VERSION_MAJOR = 0;
const int APP_VERSION_MINOR = 1;
......@@ -133,3 +137,65 @@ bool maybeCreateDir(QDir out_dir)
qDebug() << "out_dir: " << out_dir.dirName();
return true;
}
void parseConfig(const QString& filename, QList<QPair<QString,QString>>& parsedCameras)
{
QFile file(filename);
if (!file.open(QIODevice::ReadOnly))
{
qWarning() << "Failed to open file:" << filename;
return;
}
QByteArray jsonData = file.readAll();
file.close();
QJsonParseError parseError;
QJsonDocument doc = QJsonDocument::fromJson(jsonData, &parseError);
if (parseError.error != QJsonParseError::NoError)
{
qWarning() << "Error parsing JSON:" << parseError.errorString();
return;
}
if (!doc.isArray())
{
qWarning() << "JSON content is not an array";
return;
}
parsedCameras.clear();
QJsonArray jsonArray = doc.array();
for (const QJsonValue& value : jsonArray)
{
if (!value.isObject())
{
qWarning() << "Invalid camera entry:" << value;
continue;
}
QJsonObject cameraObject = value.toObject();
auto name = cameraObject["name"].toString();
auto ip = cameraObject["ip"].toString();
parsedCameras.append(qMakePair(name, ip));
}
// qDebug() << "Parsed " << filename;
// for (const auto& cam : parsedCameras)
// {
// qDebug() << "Camera Name:" << cam.first << ", IP:" << cam.second;
// }
}
QString configFile(QString filename)
{
static QString _filename;
if( _filename.isEmpty() )
{
_filename = filename.isEmpty() ? QCoreApplication::applicationDirPath() + "/cams.json" : filename;
}
return _filename;
}
......@@ -4,9 +4,13 @@
#include "VmbC/VmbCommonTypes.h" //VmbError_t -> cant really fwd-decl typedef...??
#include <QString>
#include <QList>
#include <QPair>
class QDir;
void parseConfig(const QString& filename, QList<QPair<QString,QString>>& parsedCameras);
QString configFile(QString filename="");
const QStringList getVersions();
const QString getVersion();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment