diff options
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 176 |
1 files changed, 105 insertions, 71 deletions
diff --git a/src/main.cpp b/src/main.cpp index c717c7e..24e2bf4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,5 @@ // cpp and linux -#include <chrono> #include <csignal> -#include <errno.h> #include <fcntl.h> #include <iostream> #include <linux/videodev2.h> @@ -29,17 +27,11 @@ #include "calibration.h" #include "camera/veyeimx287m.h" #include "dumps.h" -#include "imagealgos.h" #include "printerclient.h" #include "profile.h" #include "protocols/httpserver.h" #include "scanner.h" -// -#include "rapidjson/document.h" -#include "rapidjson/stringbuffer.h" -#include "rapidjson/writer.h" - extern uint8_t pgm_image[64 + img_width * img_height * sizeof(uint8_t)]; extern size_t pgm_image_size; extern std::mutex pgm_image_mtx; @@ -56,7 +48,7 @@ ScanningModeFlags scanningModeFlags{ScanningModeFlags::None}; QElapsedTimer calibrationTimer; -extern volatile int32_t positionSteps; +// extern volatile int32_t positionSteps; requested_params_t requested_params; @@ -69,9 +61,7 @@ QMutex calibrationPixelsMutex; using namespace std::chrono_literals; auto printPixels = [](const auto &pixels) { - for (size_t i = (img_width - 10) / 2; - i < img_width - ((img_width - 10) / 2); - ++i) { + for (size_t i = (img_width - 10) / 2; i < img_width - ((img_width - 10) / 2); ++i) { std::cout << pixels[i] << " "; } std::cout << std::endl; @@ -137,8 +127,30 @@ int main(int argc, char *argv[]) // } // qDebug() << p.counters.encoderPosition << p.counters.encoderPosition; // return EXIT_SUCCESS; + auto stand = std::make_shared<Esp32Stand>(QHostAddress{"192.168.18.248"}, 80, 1600); + + if (false) { + if (false) { + // const QString tmpFN{"/home/radxa/dumps/binz/raw_profile_meas_100009_enc_35416"}; + // const QString tmpFN{"/home/radxa/dumps/binz/raw_profile_meas_754290_enc_276336"}; + // const QString tmpFN{"/tmp/raw_pixels"}; + const QString tmpFN{"/home/radxa/dumps/binz/raw_profile_meas_509718_enc_185763"}; + const auto tmpRP = Pixels::load(tmpFN); + + if (!tmpRP) { + qCritical() << "cannot open raw profiles file:" << tmpFN; + exit(EXIT_FAILURE); + } + + const auto rp = *tmpRP; + qDebug() << "tmp enc pos:" << rp.counters.encoderPosition; + + for (const auto &p : rp.pixels) { + qDebug() << '\t' << p; + } - if (true) { + exit(EXIT_FAILURE); + } // open binary calibration table if (false) { initializers << QtConcurrent::run([&]() { @@ -183,6 +195,14 @@ int main(int argc, char *argv[]) return EXIT_FAILURE; } + // for (const auto &rp : rawProfiles) { + // if (rp.debugPrintIfInvalid()) { + // exit(EXIT_FAILURE); + // } + // } + + exit(EXIT_FAILURE); + std::sort(rawProfiles.begin(), rawProfiles.end(), [](const auto &a, const auto &b) { return a.counters.encoderPosition < b.counters.encoderPosition; }); @@ -190,24 +210,31 @@ int main(int argc, char *argv[]) qDebug() << "filtered z-profiles count is" << filteredRawProfiles.count(); if (!calibrateZ(std::move(filteredRawProfiles), - requested_params.stepsPerMm, + // requested_params.stepsPerMm, + stand->stepsPerMm(), scanner->calibrationTableZ())) { qCritical() << "Z calibration failed, exiting"; exit(EXIT_FAILURE); } // DEBUG - interpolate(scanner->calibrationTableZ()); + // interpolate(scanner->calibrationTableZ()); - if (!dump(scanner->calibrationTableZ(), - QStringLiteral("/home/%1/dumps/binz.calibration_table").arg(user))) { + const auto dumpZPath = QStringLiteral("/home/%1/dumps/binz.calibration_table") + .arg(user); + if (!dump(scanner->calibrationTableZ(), dumpZPath)) { qApp->exit(EXIT_FAILURE); } + qDebug() << __func__ << "calibration table z dump finished"; + + calibrationTableToImage(scanner->calibrationTableZ()).save(dumpZPath + ".png"); + qDebug() << __func__ << "calibration table z image dump finished"; } qDebug() << "--------------------------------------------------------"; - if (false) { + if (true) { + qDebug() << "open dump x"; auto rawProfiles = openDump(QStringLiteral("/home/%1/dumps/binx").arg(user)); qDebug() << "raw x-profiles count is" << rawProfiles.size(); @@ -219,12 +246,20 @@ int main(int argc, char *argv[]) exit(EXIT_FAILURE); } + qDebug() << __func__ << "try to interpolate"; interpolate(scanner->calibrationTableX()); + qDebug() << __func__ << "interpolated"; - if (!dump(scanner->calibrationTableX(), - QStringLiteral("/home/%1/dumps/binx.calibration_table").arg(user))) { + const auto dumpXPath = QStringLiteral("/home/%1/dumps/binx.calibration_table") + .arg(user); + + if (!dump(scanner->calibrationTableX(), dumpXPath)) { + qCritical() << "cannot dump calibration table x, exit with failure"; qApp->exit(EXIT_FAILURE); } + qDebug() << __func__ << "calibration table x dump finished"; + calibrationTableToImage(scanner->calibrationTableZ()).save(dumpXPath + ".png"); + qDebug() << __func__ << "calibration table x image dump finished"; } } // exit(EXIT_SUCCESS); @@ -233,8 +268,6 @@ int main(int argc, char *argv[]) scanner->startAllProtocols(); httpServer->start(); - auto stand = std::make_shared<Esp32Stand>(QHostAddress{"192.168.18.248"}, 80, 1600); - QHttpServer qHttpServer; qHttpServer.route("/v1/profile", [&]() -> QHttpServerResponse { @@ -253,74 +286,75 @@ int main(int argc, char *argv[]) return QHttpServerResponse(QJsonDocument(json).toJson()); }); - qHttpServer - .route("/v1/commands/resetEncoder", - [&](const QHttpServerRequest &request) -> QHttpServerResponse { - std::cout << "http: resetEncoder" << std::endl; - if (request.method() != QHttpServerRequest::Method::Post) { - return QHttpServerResponse::StatusCode::NotFound; - } - - qDebug() << "reset encoder"; + qHttpServer.route("/v1/commands/resetEncoder", + [&](const QHttpServerRequest &request) -> QHttpServerResponse { + std::cout << "http: resetEncoder" << std::endl; + if (request.method() != QHttpServerRequest::Method::Post) { + return QHttpServerResponse::StatusCode::NotFound; + } - positionSteps = 0; + qDebug() << "reset encoder"; - return QHttpServerResponse::StatusCode::Ok; - }); + // positionSteps = 0; + stand->resetPosSteps(); - qHttpServer - .route("/v1/commands/startCalibration", - [&](const QHttpServerRequest &request) -> QHttpServerResponse { - std::cout << "http: startCalibration" << std::endl; - if (request.method() != QHttpServerRequest::Method::Post) { - return QHttpServerResponse::StatusCode::NotFound; - } + return QHttpServerResponse::StatusCode::Ok; + }); - qDebug() << "start calibration"; + qHttpServer.route("/v1/commands/startCalibration", + [&](const QHttpServerRequest &request) -> QHttpServerResponse { + std::cout << "http: startCalibration" << std::endl; + if (request.method() != QHttpServerRequest::Method::Post) { + return QHttpServerResponse::StatusCode::NotFound; + } - // TODO: use flags - scanningModeFlags = ScanningModeFlags::Calibration; - calibrationTimer.start(); - QObject::connect(camera.get(), &ICamera::moveMm, stand.get(), &IStand::moveMm); - QObject::connect(stand.get(), - &IStand::moveFinished, - camera.get(), - &ICamera::onMoveFinished); + qDebug() << "start calibration"; + // TODO: use flags + scanningModeFlags = ScanningModeFlags::Calibration; + calibrationTimer.start(); + QObject::connect(camera.get(), + &ICamera::moveMm, + stand.get(), + &IStand::moveMm); + QObject::connect(stand.get(), + &IStand::moveFinished, + camera.get(), + &ICamera::onMoveFinished); - //camera->startCalibration(stand, 200); - camera->startCalibration(stand, 200); + //camera->startCalibration(stand, 200); + // camera->startCalibration(stand, 200); + camera->startCalibration(stand, ::debugZRange); - return QHttpServerResponse::StatusCode::Ok; - }); + return QHttpServerResponse::StatusCode::Ok; + }); - qHttpServer - .route("/v1/commands/gCode", - [&](const QHttpServerRequest &request) -> QHttpServerResponse { - std::cout << "http: gCode" << std::endl; - if (request.method() != QHttpServerRequest::Method::Post) { - return QHttpServerResponse::StatusCode::NotFound; - } + qHttpServer.route("/v1/commands/gCode", + [&](const QHttpServerRequest &request) -> QHttpServerResponse { + std::cout << "http: gCode" << std::endl; + if (request.method() != QHttpServerRequest::Method::Post) { + return QHttpServerResponse::StatusCode::NotFound; + } - const auto command = request.body(); + const auto command = request.body(); - qDebug() << "send gCode:" << command; + qDebug() << "send gCode:" << command; - // WARNING: tmp logic - auto distanceMm = command.split(' ').at(1); - distanceMm.remove(0, 1); + // WARNING: tmp logic + auto distanceMm = command.split(' ').at(1); + distanceMm.remove(0, 1); - // printerClient.sendCommand(command); - stand->moveMm(distanceMm.toInt()); + // printerClient.sendCommand(command); + stand->moveMm(distanceMm.toInt()); - return QHttpServerResponse::StatusCode::Ok; - }); + return QHttpServerResponse::StatusCode::Ok; + }); qDebug() << "listen: " << qHttpServer.listen(QHostAddress::Any, 8081); //////////////////////////////////////////////////////////////////////////// std::clog << std::flush; std::cerr << std::flush; - std::cout << "ok for now" << std::endl << std::flush; + std::cout << __func__ << ": ok for now" << std::endl << std::flush; auto result = app.exec(); |
