close cameras before cutting power
This commit is contained in:
183
src/main.cpp
183
src/main.cpp
@ -58,101 +58,104 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
Log::level = Log::WARN;
|
Log::level = Log::WARN;
|
||||||
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
QCoreApplication::setOrganizationName("UVOS");
|
|
||||||
QCoreApplication::setOrganizationDomain("uvos.xyz");
|
|
||||||
QCoreApplication::setApplicationName("LubircantThiknessMapperUi");
|
|
||||||
QCoreApplication::setApplicationVersion("0.1");
|
|
||||||
|
|
||||||
QSplashScreen splash(QPixmap(":/images/splash.png"));
|
|
||||||
splash.show();
|
|
||||||
|
|
||||||
QDir().mkpath(Profile::profileLocation());
|
|
||||||
|
|
||||||
qRegisterMetaType<cv::Mat>("cv::Mat");
|
|
||||||
qRegisterMetaType<size_t>("size_t");
|
|
||||||
qRegisterMetaType<Camera::Image>("Camera::Image");
|
|
||||||
qRegisterMetaType<Camera::Image>("Image");
|
|
||||||
qRegisterMetaType<std::vector<Camera::Image>>("std::vector<Camera::Image>");
|
|
||||||
|
|
||||||
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
|
||||||
|
|
||||||
uvosled led;
|
uvosled led;
|
||||||
int uvosledRet = uvosled_connect(&led);
|
int uvosledRet = uvosled_connect(&led);
|
||||||
|
int ret;
|
||||||
if(uvosledRet >= 0)
|
|
||||||
{
|
{
|
||||||
qDebug()<<"uvosled_poweron";
|
QApplication a(argc, argv);
|
||||||
uvosled_poweron(&led);
|
QCoreApplication::setOrganizationName("UVOS");
|
||||||
// Give cameras some time to power on
|
QCoreApplication::setOrganizationDomain("uvos.xyz");
|
||||||
// TODO: figure out how to do this better
|
QCoreApplication::setApplicationName("LubircantThiknessMapperUi");
|
||||||
sleep(10);
|
QCoreApplication::setApplicationVersion("0.1");
|
||||||
|
|
||||||
|
QSplashScreen splash(QPixmap(":/images/splash.png"));
|
||||||
|
splash.show();
|
||||||
|
|
||||||
|
QDir().mkpath(Profile::profileLocation());
|
||||||
|
|
||||||
|
qRegisterMetaType<cv::Mat>("cv::Mat");
|
||||||
|
qRegisterMetaType<size_t>("size_t");
|
||||||
|
qRegisterMetaType<Camera::Image>("Camera::Image");
|
||||||
|
qRegisterMetaType<Camera::Image>("Image");
|
||||||
|
qRegisterMetaType<std::vector<Camera::Image>>("std::vector<Camera::Image>");
|
||||||
|
|
||||||
|
QSettings settings(QSettings::IniFormat, QSettings::UserScope, QCoreApplication::organizationName(), QCoreApplication::applicationName());
|
||||||
|
|
||||||
|
if(uvosledRet >= 0)
|
||||||
|
{
|
||||||
|
qDebug()<<"uvosled_poweron";
|
||||||
|
uvosled_poweron(&led);
|
||||||
|
// Give cameras some time to power on
|
||||||
|
// TODO: figure out how to do this better
|
||||||
|
sleep(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
Cameras cameras(uvosledRet < 0 ? nullptr : &led);
|
||||||
|
cameras.setFree(false);
|
||||||
|
ImagePipeline pipe(&cameras);
|
||||||
|
|
||||||
|
MainWindow w;
|
||||||
|
|
||||||
|
QObject::connect(&cameras, &Cameras::cameraAdded, &w, &MainWindow::addCamera);
|
||||||
|
QObject::connect(&cameras, &Cameras::cameraRemoved, &w, &MainWindow::removeCamera);
|
||||||
|
QObject::connect(&w, &MainWindow::sigCapture, [&cameras](){cameras.start(); cameras.trigger();});
|
||||||
|
|
||||||
|
QObject::connect(&w, &MainWindow::sigChooseCameras, [&cameras]()
|
||||||
|
{
|
||||||
|
bool accepted;
|
||||||
|
std::vector<cam::Camera::Description> descs = showCameraSelectionDialog(&accepted);
|
||||||
|
if(accepted)
|
||||||
|
cameras.setCameras(descs);
|
||||||
|
});
|
||||||
|
|
||||||
|
QObject::connect(&w, &MainWindow::sigEditProfiles, [&cameras, &w](){showProfileDialog(&cameras); w.refreshProfiles();});
|
||||||
|
QObject::connect(&pipe, &ImagePipeline::sigResult, w.mainImageViewer(), &CvImageViewer::setImage, Qt::QueuedConnection);
|
||||||
|
QObject::connect(&pipe, &ImagePipeline::sigResult, [&w](){w.statusMsg("idle");});
|
||||||
|
QObject::connect(&pipe, &ImagePipeline::sigInvalidProfile, &w, &MainWindow::profileInconpatible);
|
||||||
|
|
||||||
|
QObject::connect(&w, &MainWindow::sigProfile, [&pipe](QString name)
|
||||||
|
{
|
||||||
|
Profile profile;
|
||||||
|
profile.load(name);
|
||||||
|
if(profile.cameras.size() != 0)
|
||||||
|
qDebug()<<"loading profile"<<name<<"with"<<profile.cameras.size()<<"cameras and first camera"<<profile.cameras.at(0).id;
|
||||||
|
else
|
||||||
|
qDebug()<<"empty profile!!";
|
||||||
|
pipe.setProfile(profile);
|
||||||
|
});
|
||||||
|
|
||||||
|
cameras.load(settings);
|
||||||
|
|
||||||
|
splash.hide();
|
||||||
|
w.show();
|
||||||
|
|
||||||
|
if(uvosledRet < 0)
|
||||||
|
QMessageBox::warning(&w, "UVOS LED", "Can not connect to the UVOS LED device");
|
||||||
|
|
||||||
|
if(cameras.getCameras().empty())
|
||||||
|
{
|
||||||
|
QMessageBox::information(&w, "Cameras", "No cameras configured, please choose at least one camera.");
|
||||||
|
cameras.setCameras(showCameraSelectionDialog());
|
||||||
|
}
|
||||||
|
|
||||||
|
QString name = w.getProfileName();
|
||||||
|
if(!name.isEmpty())
|
||||||
|
{
|
||||||
|
Profile profile;
|
||||||
|
profile.load(w.getProfileName());
|
||||||
|
if(profile.cameras.size() != 0)
|
||||||
|
qDebug()<<"loading profile"<<name<<"with"<<profile.cameras.size()<<"cameras and first camera"<<profile.cameras.at(0).id;
|
||||||
|
else
|
||||||
|
qDebug()<<"empty profile!!";
|
||||||
|
pipe.setProfile(profile);
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = a.exec();
|
||||||
|
|
||||||
|
cameras.store(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
Cameras cameras(uvosledRet < 0 ? nullptr : &led);
|
|
||||||
cameras.setFree(false);
|
|
||||||
ImagePipeline pipe(&cameras);
|
|
||||||
|
|
||||||
MainWindow w;
|
|
||||||
|
|
||||||
QObject::connect(&cameras, &Cameras::cameraAdded, &w, &MainWindow::addCamera);
|
|
||||||
QObject::connect(&cameras, &Cameras::cameraRemoved, &w, &MainWindow::removeCamera);
|
|
||||||
QObject::connect(&w, &MainWindow::sigCapture, [&cameras](){cameras.start(); cameras.trigger();});
|
|
||||||
|
|
||||||
QObject::connect(&w, &MainWindow::sigChooseCameras, [&cameras]()
|
|
||||||
{
|
|
||||||
bool accepted;
|
|
||||||
std::vector<cam::Camera::Description> descs = showCameraSelectionDialog(&accepted);
|
|
||||||
if(accepted)
|
|
||||||
cameras.setCameras(descs);
|
|
||||||
});
|
|
||||||
|
|
||||||
QObject::connect(&w, &MainWindow::sigEditProfiles, [&cameras, &w](){showProfileDialog(&cameras); w.refreshProfiles();});
|
|
||||||
QObject::connect(&pipe, &ImagePipeline::sigResult, w.mainImageViewer(), &CvImageViewer::setImage, Qt::QueuedConnection);
|
|
||||||
QObject::connect(&pipe, &ImagePipeline::sigResult, [&w](){w.statusMsg("idle");});
|
|
||||||
QObject::connect(&pipe, &ImagePipeline::sigInvalidProfile, &w, &MainWindow::profileInconpatible);
|
|
||||||
|
|
||||||
QObject::connect(&w, &MainWindow::sigProfile, [&pipe](QString name)
|
|
||||||
{
|
|
||||||
Profile profile;
|
|
||||||
profile.load(name);
|
|
||||||
if(profile.cameras.size() != 0)
|
|
||||||
qDebug()<<"loading profile"<<name<<"with"<<profile.cameras.size()<<"cameras and first camera"<<profile.cameras.at(0).id;
|
|
||||||
else
|
|
||||||
qDebug()<<"empty profile!!";
|
|
||||||
pipe.setProfile(profile);
|
|
||||||
});
|
|
||||||
|
|
||||||
cameras.load(settings);
|
|
||||||
|
|
||||||
splash.hide();
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
if(uvosledRet < 0)
|
|
||||||
QMessageBox::warning(&w, "UVOS LED", "Can not connect to the UVOS LED device");
|
|
||||||
|
|
||||||
if(cameras.getCameras().empty())
|
|
||||||
{
|
|
||||||
QMessageBox::information(&w, "Cameras", "No cameras configured, please choose at least one camera.");
|
|
||||||
cameras.setCameras(showCameraSelectionDialog());
|
|
||||||
}
|
|
||||||
|
|
||||||
QString name = w.getProfileName();
|
|
||||||
if(!name.isEmpty())
|
|
||||||
{
|
|
||||||
Profile profile;
|
|
||||||
profile.load(w.getProfileName());
|
|
||||||
if(profile.cameras.size() != 0)
|
|
||||||
qDebug()<<"loading profile"<<name<<"with"<<profile.cameras.size()<<"cameras and first camera"<<profile.cameras.at(0).id;
|
|
||||||
else
|
|
||||||
qDebug()<<"empty profile!!";
|
|
||||||
pipe.setProfile(profile);
|
|
||||||
}
|
|
||||||
|
|
||||||
int ret = a.exec();
|
|
||||||
|
|
||||||
cameras.store(settings);
|
|
||||||
|
|
||||||
if(uvosledRet >= 0)
|
if(uvosledRet >= 0)
|
||||||
uvosled_poweroff(&led);
|
uvosled_poweroff(&led);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user