fix various bugs

add commandline parser for various options
allow cameras to be operated in serial fashion
allow disabeling of quirks
allow changing of Photonfocus quirk timeings
This commit is contained in:
uvos 2021-07-08 11:24:19 +02:00
parent 3a77df6dd5
commit b9b4b0fc2a
10 changed files with 134 additions and 36 deletions

View file

@ -6,7 +6,8 @@
#include <unistd.h>
#include <QTimer>
Cameras::Cameras(uvosled* led): led_(led)
Cameras::Cameras(uvosled* led, bool quirks, bool serial):
led_(led), quirks_(quirks), serial_(serial)
{
ledTimer.setSingleShot(true);
cameraFailureTimer.setSingleShot(true);
@ -82,7 +83,7 @@ bool Cameras::addCamera(const cam::Camera::Description& desc)
cameras_.back()->cam()->setExposureTime(exposrueTime_);
if(desc.getVendor().find("Photonfocus") != std::string::npos)
if(quirks_ && desc.getVendor().find("Photonfocus") != std::string::npos)
{
qDebug()<<"Mitiagting broken PhotonFocus single shot mode";
std::shared_ptr<Camera> camera = cameras_.back();
@ -107,7 +108,13 @@ bool Cameras::addCamera(const cam::Camera::Description& desc)
camera->cam()->setAcquisitionMode(cam::Camera::MODE_FREE);
camera->cam()->setFrameRate(10);
camera->cam()->startAcquisition();
QTimer::singleShot(5000, [camera, this](){finishAddCamera(camera);});
if(!serial_)
QTimer::singleShot(quirkTime, this, [this, camera](){finishAddCamera(camera);});
else
{
std::this_thread::sleep_for(std::chrono::microseconds(static_cast<long>(quirkTime*1000)));
finishAddCamera(camera);
}
}
else
{
@ -147,10 +154,23 @@ void Cameras::lightOff()
void Cameras::trigger()
{
lightFor(lighting_, exposrueTime_*1.5);
for(auto& camera : cameras_)
camera->cam()->trigger();
if(serial_)
{
if(captureingCamera == 0)
lightFor(lighting_, exposrueTime_*1.5*cameras_.size());
cameras_[captureingCamera]->cam()->trigger();
++captureingCamera;
if(captureingCamera < cameras_.size())
QTimer::singleShot(exposrueTime_*1000, this, &Cameras::trigger);
else
captureingCamera = 0;
}
else
{
lightFor(lighting_, exposrueTime_*1.5);
for(auto& camera : cameras_)
camera->cam()->trigger();
}
}
bool Cameras::start()
@ -242,7 +262,12 @@ void Cameras::imageRecived(Camera::Image img)
qDebug()<<"Recived"<<images_.size()<<"of"<<cameras_.size()<<"images";
if(images_.size() == 1)
cameraFailureTimer.start(exposrueTime_*1000+1000);
{
if(!serial_)
cameraFailureTimer.start(exposrueTime_*1000+1000);
else
cameraFailureTimer.start(exposrueTime_*1000*(cameras_.size()+1)+2000);
}
if(images_.size() == cameras_.size())
{