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

WIP/crashes add load and saveSettings functions to cam class...

WIP/crashes add load and saveSettings functions to cam class (+signals,slots,console,core,utils) + read settings name as cmdline arg

loadSettings - if cam is open and settings file exists, load settings from file to current cam
saveSettings - if cam is open, writeout/save settings from current cam to xml file
parent 56ea134b
Branches
No related tags found
No related merge requests found
#include "cam.h" #include "cam.h"
#include "VmbC/VmbCommonTypes.h"
#include "iprinter.h" #include "iprinter.h"
#include "utils.h" #include "utils.h"
#include "frameobserver.h" #include "frameobserver.h"
...@@ -198,7 +199,7 @@ void Cam::stopRecording() ...@@ -198,7 +199,7 @@ void Cam::stopRecording()
if(_state != recording) if(_state != recording)
return error("cant stop recording, when cam is " + stateToString(_state)); return error("cant stop recording, when cam is " + stateToString(_state));
_timer->stop(); _timer->stop(); //stop timer or it will try to close an already closed cam
FeaturePtr pFeature; FeaturePtr pFeature;
try try
...@@ -297,3 +298,33 @@ void Cam::onChanged(UpdateTriggerType type) ...@@ -297,3 +298,33 @@ void Cam::onChanged(UpdateTriggerType type)
error("onChanged: unknown trigger type"); error("onChanged: unknown trigger type");
} }
} }
//write out settings.xml for current open cam
void Cam::saveSettings()
{
if(_state != opened)
return error("can only save settings on opened cam. (its " + stateToString(_state) + ")");
// VmbFilePathChar_t* = wchar_t* > std::wstring
// auto file = L"settings_" + name().toStdWString() + L".xml";
std::wstring file = L"settings_" + name().toStdWString() + L".xml";
VmbFeaturePersistSettings_t settingsStruct;
settingsStruct.loggingLevel = VmbLogLevelWarn; //err/warn/dbg
settingsStruct.maxIterations = 5;
settingsStruct.persistType = VmbFeaturePersistNoLUT; //?
if (f(_cam->SaveSettings( (const VmbFilePathChar_t*)file.c_str() , &settingsStruct ) ))
error( "Could not save camera settings to '" + QString::fromStdWString(file) + "'" );
}
//load settings.xml for current open cam
void Cam::loadSettings()
{
if(_state != opened)
return error("can only save settings on opened cam. (its " + stateToString(_state) + ")");
if(f(_cam->LoadSettings( (const VmbFilePathChar_t *) settingsFile().toStdWString().c_str())))
error( "Could not load camera settings from '" + settingsFile() + "'" );
}
...@@ -58,6 +58,10 @@ public: ...@@ -58,6 +58,10 @@ public:
void startRecording(minutes dur); void startRecording(minutes dur);
void startRecording(seconds dur); //can use literals "1s, 1min" void startRecording(seconds dur); //can use literals "1s, 1min"
QString info(); QString info();
void saveSettings();
void loadSettings();
inline CameraPtr getCameraPtr() { return _cam; } inline CameraPtr getCameraPtr() { return _cam; }
inline void setCameraPtr( CameraPtr pCamera ) { _cam = pCamera; } inline void setCameraPtr( CameraPtr pCamera ) { _cam = pCamera; }
......
...@@ -97,6 +97,8 @@ void Console::printHelp() ...@@ -97,6 +97,8 @@ void Console::printHelp()
<< "s: stop recording" << "s: stop recording"
<< "l: list available cameras" << "l: list available cameras"
<< "k: deteKt cameras" << "k: deteKt cameras"
<< "y: load cam settings"
<< "u: save cam settings"
<< "v: print versions" << "v: print versions"
<< "q: quit" << "q: quit"
// XXX add new func // XXX add new func
...@@ -167,6 +169,14 @@ void Controller::onKeyPressed(const QChar& key) ...@@ -167,6 +169,14 @@ void Controller::onKeyPressed(const QChar& key)
emit stopRecording(); emit stopRecording();
break; break;
case 'y':
emit loadSettings();
break;
case 'u':
emit saveSettings();
break;
case 'v': case 'v':
console->printVersion(); console->printVersion();
break; break;
......
...@@ -37,7 +37,6 @@ signals: ...@@ -37,7 +37,6 @@ signals:
void lineEntered(const QString&); void lineEntered(const QString&);
void numberEntered(const int&); void numberEntered(const int&);
}; };
class Controller : public QObject class Controller : public QObject
...@@ -67,10 +66,10 @@ class Controller : public QObject ...@@ -67,10 +66,10 @@ class Controller : public QObject
void startRecording(); void startRecording();
void stopRecording(); void stopRecording();
void setDuration(int); void setDuration(int);
void loadSettings();
void saveSettings();
// void calibrateCam(); // void calibrateCam();
// void loadSettings();
// void storeSettings();
// ... more signals here, new func XXX // ... more signals here, new func XXX
private: private:
......
...@@ -6,7 +6,6 @@ ...@@ -6,7 +6,6 @@
#include "../cam.h" #include "../cam.h"
#include "qobjectdefs.h" #include "qobjectdefs.h"
// #include "qnamespace.h"
#include <QCoreApplication> #include <QCoreApplication>
#include <QTimer> #include <QTimer>
...@@ -17,10 +16,16 @@ int main(int argc, char *argv[]) ...@@ -17,10 +16,16 @@ int main(int argc, char *argv[])
QCoreApplication::setApplicationVersion(getVersion()); QCoreApplication::setApplicationVersion(getVersion());
QCoreApplication::setApplicationName("recorder"); QCoreApplication::setApplicationName("recorder");
//parse arg //parse args
QStringList arguments = a.arguments(); QStringList arguments = a.arguments();
if (arguments.size()>=2) for (int i = 1; i < arguments.size(); ++i)
configFile(arguments.at(1)); {
if (arguments.at(i).endsWith(".json"))
configFile(arguments.at(i));
else if (arguments.at(i).endsWith(".xml"))
settingsFile(arguments.at(i));
}
Controller controller; Controller controller;
Core core; Core core;
...@@ -33,6 +38,8 @@ int main(int argc, char *argv[]) ...@@ -33,6 +38,8 @@ int main(int argc, char *argv[])
QObject::connect(&controller, &Controller::startRecording, &core, &Core::startRecording); QObject::connect(&controller, &Controller::startRecording, &core, &Core::startRecording);
QObject::connect(&controller, &Controller::stopRecording, &core, &Core::stopRecording); QObject::connect(&controller, &Controller::stopRecording, &core, &Core::stopRecording);
QObject::connect(&controller, &Controller::setDuration, &core, &Core::setDuration); QObject::connect(&controller, &Controller::setDuration, &core, &Core::setDuration);
QObject::connect(&controller, &Controller::loadSettings, &core, &Core::loadSettings);
QObject::connect(&controller, &Controller::saveSettings, &core, &Core::saveSettings);
// XXX add new func // XXX add new func
QTimer::singleShot(0, Console::getInstance(), SLOT(printVersion())); QTimer::singleShot(0, Console::getInstance(), SLOT(printVersion()));
......
...@@ -168,3 +168,15 @@ void Core::setDuration(int dur) ...@@ -168,3 +168,15 @@ void Core::setDuration(int dur)
{ {
_recDuration = seconds(dur); _recDuration = seconds(dur);
} }
void Core::loadSettings()
{
if( cam() )
cam()->loadSettings();
}
void Core::saveSettings()
{
if( cam() )
cam()->saveSettings();
}
...@@ -31,12 +31,14 @@ public slots: ...@@ -31,12 +31,14 @@ public slots:
void onCameraChanged(CameraPtr,UpdateTriggerType); void onCameraChanged(CameraPtr,UpdateTriggerType);
void openCam(); void openCam();
void closeCam(); void closeCam();
void loadSettings();
void saveSettings();
// XXX add new func // XXX add new func
CamPtr cam(const unsigned long &idx=-1); CamPtr cam(const unsigned long &idx=-1);
void startRecording(); void startRecording();
void stopRecording(); //XXX also stop singleshot-timer or it will try to close an already closed cam void stopRecording();
void setDuration(int); void setDuration(int);
private slots: private slots:
......
...@@ -144,8 +144,8 @@ void parseConfig(QList<QPair<QString,QString>>& parsedCameras) ...@@ -144,8 +144,8 @@ void parseConfig(QList<QPair<QString,QString>>& parsedCameras)
QFile file(configFile()); QFile file(configFile());
if (!file.open(QIODevice::ReadOnly)) if (!file.open(QIODevice::ReadOnly))
{ {
qWarning() << "Failed"; qWarning() << "Failed. Could not open " + configFile();
return; exit(VmbErrorNotFound);
} }
QByteArray jsonData = file.readAll(); QByteArray jsonData = file.readAll();
...@@ -189,21 +189,36 @@ void parseConfig(QList<QPair<QString,QString>>& parsedCameras) ...@@ -189,21 +189,36 @@ void parseConfig(QList<QPair<QString,QString>>& parsedCameras)
// } // }
} }
// needed to find cams via ip
QString configFile(QString filename) QString configFile(QString filename)
{ {
static QString _filename; static QString _configFile;
if( _filename.isEmpty() ) if( _configFile.isEmpty() )
{ {
if(filename.isEmpty()) if(filename.isEmpty())
{ {
_filename = QCoreApplication::applicationDirPath() + "/test.json" ; _configFile = QCoreApplication::applicationDirPath() + "/config.json" ; //default
} }
else else
{ {
_filename = filename; _configFile = filename;
} }
} }
return _filename; return _configFile;
} }
// optional - only set cam settings when they changed
QString settingsFile(QString filename)
{
static QString _settingsFile;
if( _settingsFile.isEmpty() )
{
_settingsFile = filename;
if(filename.isEmpty())
QCoreApplication::applicationDirPath() + "/settings.xml" ; //default
}
return _settingsFile;
}
...@@ -11,6 +11,7 @@ class QDir; ...@@ -11,6 +11,7 @@ class QDir;
void parseConfig(QList<QPair<QString,QString>>& parsedCameras); void parseConfig(QList<QPair<QString,QString>>& parsedCameras);
QString configFile(QString filename=""); QString configFile(QString filename="");
QString settingsFile(QString filename="");
const QStringList getVersions(); const QStringList getVersions();
const QString getVersion(); const QString getVersion();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment