diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 111 |
1 files changed, 57 insertions, 54 deletions
diff --git a/src/main.cpp b/src/main.cpp index 2d86dac..c717c7e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -95,6 +95,36 @@ int main(int argc, char *argv[]) qDebug() << "size of raw profile" << sizeof(Pixels); + QElapsedTimer t; + t.start(); + + // FIXME: don't use one var for everything + int ret; + + auto cameras = VeyeIMX287m::search(); + + if (cameras.empty()) { + std::cerr << "No cameras were identified on the system." << std::endl; + + return EXIT_FAILURE; + } + + auto camera = cameras.at(0); + + std::cout << "connect everything" << std::endl; + + for (auto &i : initializers) + i.waitForFinished(); + std::cout << "loaded calibration tables" << std::endl; + + if (!camera->startStream()) { + return EXIT_FAILURE; + } + + // TODO: refactor: scanner and http server depend on each other + const auto scanner = std::make_shared<Scanner>(camera); + auto httpServer = std::make_shared<HttpServer>(scanner); + // Pixels p; // p.counters.encoderPosition = 123; // if (!p.save("/tmp/tmp.pixels")) { @@ -115,7 +145,7 @@ int main(int argc, char *argv[]) if (!openCalibrationTable(QStringLiteral("/home/%1/dumps/binz.calibration_table") .arg(user), // "/tmp/binz.calibration_table", - ::calibrationTableZ)) { + scanner->calibrationTableZ())) { exit(EXIT_FAILURE); } }); @@ -124,7 +154,7 @@ int main(int argc, char *argv[]) if (!openCalibrationTable(QStringLiteral("/home/%1/dumps/binx.calibration_table") .arg(user), // "/tmp/binx.calibration_table", - ::calibrationTableX)) { + scanner->calibrationTableX())) { exit(EXIT_FAILURE); } }); @@ -136,12 +166,11 @@ int main(int argc, char *argv[]) // qDebug() << "height" << calibrationColumnHeight; auto filteredRawProfiles = filter(std::move(rawProfiles)); - qDebug() << "filtered x-profiles count is" - << filteredRawProfiles.count(); + qDebug() << "filtered x-profiles count is" << filteredRawProfiles.count(); - ::calibrationTableX = calibrateX(std::move(filteredRawProfiles)); + calibrateX(std::move(filteredRawProfiles), scanner->calibrationTableX()); - interpolate(::calibrationTableX); + interpolate(scanner->calibrationTableX()); } // load binary calibration dumps and calibrate @@ -154,79 +183,53 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } + std::sort(rawProfiles.begin(), rawProfiles.end(), [](const auto &a, const auto &b) { + return a.counters.encoderPosition < b.counters.encoderPosition; + }); auto filteredRawProfiles = filter(std::move(rawProfiles)); - qDebug() << "filtered z-profiles count is" - << filteredRawProfiles.count(); + qDebug() << "filtered z-profiles count is" << filteredRawProfiles.count(); - ::calibrationTableZ = calibrateZ(std::move(filteredRawProfiles), - requested_params.stepsPerMm); + if (!calibrateZ(std::move(filteredRawProfiles), + requested_params.stepsPerMm, + scanner->calibrationTableZ())) { + qCritical() << "Z calibration failed, exiting"; + exit(EXIT_FAILURE); + } // DEBUG - ::calibrationTableX = CalibrationTablePtr{new CalibrationTable{{0}}}; - memset(::calibrationTableX.get(), 0, sizeof(CalibrationTable)); - interpolate(::calibrationTableZ); + interpolate(scanner->calibrationTableZ()); - if (!dump(::calibrationTableZ, + if (!dump(scanner->calibrationTableZ(), QStringLiteral("/home/%1/dumps/binz.calibration_table").arg(user))) { qApp->exit(EXIT_FAILURE); } } - qDebug() - << "--------------------------------------------------------"; + qDebug() << "--------------------------------------------------------"; if (false) { auto rawProfiles = openDump(QStringLiteral("/home/%1/dumps/binx").arg(user)); qDebug() << "raw x-profiles count is" << rawProfiles.size(); auto filteredRawProfiles = filter(std::move(rawProfiles)); - qDebug() << "filtered x-profiles count is" - << filteredRawProfiles.count(); + qDebug() << "filtered x-profiles count is" << filteredRawProfiles.count(); - ::calibrationTableX = calibrateX(std::move(filteredRawProfiles)); + if (!calibrateX(std::move(filteredRawProfiles), scanner->calibrationTableX())) { + qCritical() << "X calibration failed, exiting"; + exit(EXIT_FAILURE); + } - interpolate(::calibrationTableX); + interpolate(scanner->calibrationTableX()); - if (!dump(::calibrationTableX, + if (!dump(scanner->calibrationTableX(), QStringLiteral("/home/%1/dumps/binx.calibration_table").arg(user))) { qApp->exit(EXIT_FAILURE); } } } + // exit(EXIT_SUCCESS); } - // exit(EXIT_SUCCESS); - - QElapsedTimer t; - t.start(); - - // FIXME: don't use one var for everything - int ret; - - auto cameras = VeyeIMX287m::search(); - - if (cameras.empty()) { - std::cerr << "No cameras were identified on the system." << std::endl; - - return EXIT_FAILURE; - } - - auto camera = cameras.at(0); - - std::cout << "connect everything" << std::endl; - - for (auto &i : initializers) - i.waitForFinished(); - std::cout << "loaded calibration tables" << std::endl; - - if (!camera->startStream()) { - return EXIT_FAILURE; - } - - // TODO: refactor: scanner and http server depend on each other - const auto scanner = std::make_shared<Scanner>(camera); - auto httpServer = std::make_shared<HttpServer>(scanner); - scanner->startAllProtocols(); httpServer->start(); @@ -242,7 +245,7 @@ int main(int argc, char *argv[]) // if (!::calibrationTableZ || !::calibrationTableX) // return QHttpServerResponse::StatusCode::ServiceUnavailable; - const Profile profile{::pixels, ::calibrationTableZ, ::calibrationTableX}; + const Profile profile{::pixels, scanner->calibrationTableZ(), scanner->calibrationTableX()}; const QJsonObject json{{"profile", QJsonObject(profile)}}; // qDebug() << "profile:" << QJsonDocument(json).toJson(); |
