summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp176
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();