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

connect signals/slots in iPrinter ctor level. use Console singleton, use...

connect signals/slots in iPrinter ctor level. use Console singleton, use conditional compilation for console
parent 6aa7df37
Branches
No related tags found
No related merge requests found
...@@ -9,7 +9,8 @@ SOURCES += $$SRC_DIR/cmd/*.cpp \ ...@@ -9,7 +9,8 @@ SOURCES += $$SRC_DIR/cmd/*.cpp \
HEADERS += $$SRC_DIR/cmd/*.h \ HEADERS += $$SRC_DIR/cmd/*.h \
$$SRC_DIR/*.h $$SRC_DIR/*.h
DEFINES *= QT_USE_QSTRINGBUILDER #converts + to % when building strings DEFINES *= QT_USE_QSTRINGBUILDER #converts + to % when building strings #append macro
DEFINES += CONSOLE #add macro
# opencv # opencv
CONFIG += link_pkgconfig CONFIG += link_pkgconfig
......
#include "cam.h" #include "cam.h"
#include "VmbCPP/SharedPointerDefines.h"
#include "utils.h" #include "utils.h"
#include "frameobserver.h" #include "frameobserver.h"
#include "VmbCPP/SharedPointerDefines.h"
#include <chrono> #include <chrono>
#include <memory> //shared_ptr #include <memory> //shared_ptr
#include <unistd.h> #include <unistd.h>
...@@ -13,8 +14,7 @@ ...@@ -13,8 +14,7 @@
using State = Cam::State; using State = Cam::State;
using namespace VmbCPP; using namespace VmbCPP;
Cam::Cam(CameraPtr pCamera) : Cam::Cam(CameraPtr pCamera) : IPrinter(),
IPrinter(),
_cam(pCamera), _cam(pCamera),
_name(""), _name(""),
_state(disconnected), _state(disconnected),
...@@ -23,12 +23,6 @@ _payloadSize(0LL), ...@@ -23,12 +23,6 @@ _payloadSize(0LL),
_pixelFormat("") _pixelFormat("")
{ {
name(); name();
//vmb (core) -> ui (controller.console)
// QObject::connect(&core, SIGNAL(error(const QString&, const int&)), controller.console, SLOT(error(const QString&, const int&)), Qt::DirectConnection);
// QObject::connect(&core, SIGNAL(error(const int&)), controller.console, SLOT(error(const int&)), Qt::DirectConnection);
// QObject::connect(&core, SIGNAL(info(const QString&)), controller.console, SLOT(print(const QString&)), Qt::DirectConnection);
// QObject::connect(&core, SIGNAL(info(const QStringList&)), controller.console, SLOT(print(const QStringList&)), Qt::DirectConnection);
} }
// Copy constructor // Copy constructor
...@@ -45,16 +39,12 @@ _pixelFormat(other._pixelFormat) ...@@ -45,16 +39,12 @@ _pixelFormat(other._pixelFormat)
Cam::~Cam() Cam::~Cam()
{ {
qDebug() << __FUNCTION__ << "():" << __LINE__ << "name:" << _name; qDebug() << __FUNCTION__ << "():" << __LINE__ << "name:" << _name;
// if( _state == recording ) if( _state == recording )
// stopRecording(); stopRecording();
// if( _state == opened ) if( _state == opened )
// close(); close();
// close() should be called automatically, when the last shared_ptr to the camera is destroyed // close() should be called automatically, when the last shared_ptr to the camera is destroyed
// for ( auto cam : cameras )
// cam->Close();
} }
...@@ -128,10 +118,12 @@ void Cam::startRecording(std::chrono::seconds dur) ...@@ -128,10 +118,12 @@ void Cam::startRecording(std::chrono::seconds dur)
g( _cam->GetFeatureByName ("AcquisitionStart", pFeature ),"get AcquisitionStart"); g( _cam->GetFeatureByName ("AcquisitionStart", pFeature ),"get AcquisitionStart");
g( pFeature->RunCommand(),"run AcquisitionStart"); g( pFeature->RunCommand(),"run AcquisitionStart");
} }
catch (const std::runtime_error& xx) catch (const std::runtime_error& xx)
{ {
qDebug() << "Exception caught: " << xx.what(); qDebug() << "Exception caught: " << xx.what();
return;
} }
_state = recording; _state = recording;
...@@ -166,20 +158,16 @@ void Cam::stopRecording() ...@@ -166,20 +158,16 @@ void Cam::stopRecording()
g(_cam->RevokeAllFrames(),"revoke all frames"); g(_cam->RevokeAllFrames(),"revoke all frames");
for( FramePtr frame : _frames ) for( FramePtr frame : _frames )
g(frame->UnregisterObserver(),"unregister observer"); g(frame->UnregisterObserver(),"unregister observer");
}
catch (const std::runtime_error& xx)
{
qDebug() << "Exception caught: " << xx.what();
}
_state = opened; _state = opened;
} }
catch (const std::runtime_error& xx)
{} //ignore
}
// id,name,model,serial,interfaceID,state // id,name,model,serial,interfaceID,state
QString Cam::info() QString Cam::info()
{ {
// qDebug() << "Camera Name: " << _name;
// qDebug() << "Camera State: " << _state;
QString camInfo; QString camInfo;
try try
{ {
......
...@@ -45,11 +45,11 @@ public: ...@@ -45,11 +45,11 @@ public:
void close(); void close();
void startRecording(std::chrono::minutes dur); void startRecording(std::chrono::minutes dur);
void startRecording(std::chrono::seconds dur); //use as literals "1s, 1min" void startRecording(std::chrono::seconds dur); //use as literals "1s, 1min"
void stopRecording();
QString info(); QString info();
inline CameraPtr getCameraPtr() const { return _cam; } inline CameraPtr getCameraPtr() const { return _cam; }
public slots: public slots:
void stopRecording();
void onCameraDisconnected(); void onCameraDisconnected();
private: private:
......
...@@ -6,9 +6,16 @@ ...@@ -6,9 +6,16 @@
#include <QDebug> #include <QDebug>
#include <QCoreApplication> #include <QCoreApplication>
#include <QTimer>
#include <iostream> #include <iostream>
#include <math.h> #include <math.h>
Console* Console::getInstance() {
static Console* instance = new Console; // Static local variable ensures single instance
return instance;
}
void Console::listenKeys() void Console::listenKeys()
{ {
// listen to keyevents in endless loop // listen to keyevents in endless loop
...@@ -105,13 +112,15 @@ void Console::printHelp() ...@@ -105,13 +112,15 @@ void Console::printHelp()
// ############################### // ###############################
// Controller // Controller
Controller::Controller() : console(new Console()) Controller::Controller()
{ {
auto console = Console::getInstance();
console->moveToThread(&thread); console->moveToThread(&thread);
connect(&thread, &QThread::finished, console, &QObject::deleteLater); connect(&thread, &QThread::finished, console, &QObject::deleteLater);
connect(this, &Controller::operate, console, &Console::listenKeys); connect(this, &Controller::operate, console, &Console::listenKeys);
connect(console, &Console::keyPressed, this, &Controller::keyPress); connect(console, &Console::keyPressed, this, &Controller::keyPress);
QTimer::singleShot(0, this, SIGNAL(operate()));
thread.start(); thread.start();
} }
...@@ -124,7 +133,7 @@ Controller::~Controller() ...@@ -124,7 +133,7 @@ Controller::~Controller()
void Controller::keyPress(const QChar& key) void Controller::keyPress(const QChar& key)
{ {
auto console = Console::getInstance();
qDebug().noquote() << __FUNCTION__ << ": " << key; qDebug().noquote() << __FUNCTION__ << ": " << key;
if ( key.isDigit() ) if ( key.isDigit() )
{ {
...@@ -171,6 +180,4 @@ void Controller::keyPress(const QChar& key) ...@@ -171,6 +180,4 @@ void Controller::keyPress(const QChar& key)
break; break;
} }
} }
} }
...@@ -11,6 +11,15 @@ class Console : public QObject ...@@ -11,6 +11,15 @@ class Console : public QObject
{ {
Q_OBJECT Q_OBJECT
public:
static Console* getInstance();
Console(const Console&) = delete; // Delete copy constructor and assignment operator to prevent copying
Console& operator=(const Console&) = delete;
private:
Console() : QObject(){}; //// Private constructor to prevent instantiation
public slots: public slots:
void listenKeys(); void listenKeys();
QString getLine(); QString getLine();
...@@ -29,6 +38,7 @@ class Console : public QObject ...@@ -29,6 +38,7 @@ class Console : public QObject
// void lineEntered(const QString&); // void lineEntered(const QString&);
// void numberEntered(const int&); // void numberEntered(const int&);
}; };
class Controller : public QObject class Controller : public QObject
...@@ -39,7 +49,6 @@ class Controller : public QObject ...@@ -39,7 +49,6 @@ class Controller : public QObject
public: public:
Controller(); Controller();
~Controller(); ~Controller();
Console* console;
public slots: public slots:
void keyPress(const QChar &); void keyPress(const QChar &);
......
...@@ -24,19 +24,8 @@ int main(int argc, char *argv[]) ...@@ -24,19 +24,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);
// XXX add new func // XXX add new func
//vmb (core) -> ui (controller.console)
QObject::connect(&core, SIGNAL(error(const QString&, const int&)), controller.console, SLOT(error(const QString&, const int&)), Qt::DirectConnection);
QObject::connect(&core, SIGNAL(error(const int&)), controller.console, SLOT(error(const int&)), Qt::DirectConnection);
QObject::connect(&core, SIGNAL(info(const QString&)), controller.console, SLOT(print(const QString&)), Qt::DirectConnection);
QObject::connect(&core, SIGNAL(info(const QStringList&)), controller.console, SLOT(print(const QStringList&)), Qt::DirectConnection);
// sa Controller() for delegating to Console
QTimer::singleShot(0, &controller, SIGNAL(operate()));
// QTimer::singleShot(10, controller.console, SLOT(printVersion()), Qt::DirectConnection); // for testing // QTimer::singleShot(10, controller.console, SLOT(printVersion()), Qt::DirectConnection); // for testing
// QTimer::singleShot(200, &core, SLOT(openCam())); // for testing // QTimer::singleShot(200, &core, SLOT(openCam())); // for testing
......
...@@ -21,8 +21,7 @@ ...@@ -21,8 +21,7 @@
using namespace VmbCPP; using namespace VmbCPP;
using namespace std::chrono_literals; //seconds, minutes, hours using namespace std::chrono_literals; //seconds, minutes, hours
Core::Core() : Core::Core() : IPrinter(),
IPrinter(),
_apiStarted( false ), _apiStarted( false ),
_sys( VmbSystem::GetInstance() ), // create and get Vimba singleton _sys( VmbSystem::GetInstance() ), // create and get Vimba singleton
_cameras( CamPtrVector() ), _cameras( CamPtrVector() ),
...@@ -82,7 +81,8 @@ void Core::updateCameras() ...@@ -82,7 +81,8 @@ void Core::updateCameras()
} }
if (!found) if (!found)
{ {
_cameras.push_back(std::make_shared<Cam>(vcam));
_cameras.push_back(std::make_shared<Cam>(vcam)); //create Cam() from CameraPtr vcam
print("cam connected"); print("cam connected");
//vcam->GetName(), threadsPerCam //vcam->GetName(), threadsPerCam
} }
......
...@@ -14,6 +14,7 @@ using std::chrono::seconds; ...@@ -14,6 +14,7 @@ using std::chrono::seconds;
class Core : public IPrinter class Core : public IPrinter
{ {
Q_OBJECT Q_OBJECT
public: public:
......
#include "iprinter.h" #include "iprinter.h"
#ifdef CONSOLE
#include "cmd/console.h"
#endif
IPrinter::IPrinter(QObject *parent) : QObject(parent) IPrinter::IPrinter(QObject *parent) : QObject(parent)
{ {
#ifdef CONSOLE //defined in .pro
//vmb (core, cam) -> ui (controller.console)
Console* console = Console::getInstance();
connect(this, SIGNAL(error(const QString&, const int&)), console, SLOT(error(const QString&, const int&)), Qt::DirectConnection);
connect(this, SIGNAL(error(const int&)), console, SLOT(error(const int&)), Qt::DirectConnection);
connect(this, SIGNAL(info(const QString&)), console, SLOT(print(const QString&)), Qt::DirectConnection);
connect(this, SIGNAL(info(const QStringList&)), console, SLOT(print(const QStringList&)), Qt::DirectConnection);
#endif
} }
IPrinter::~IPrinter() IPrinter::~IPrinter()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment