summaryrefslogtreecommitdiff
path: root/src/protocols
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocols')
-rw-r--r--src/protocols/httpserver.cpp39
-rw-r--r--src/protocols/httpserver.h4
-rw-r--r--src/protocols/iprotocol.cpp2
-rw-r--r--src/protocols/iprotocol.h6
4 files changed, 40 insertions, 11 deletions
diff --git a/src/protocols/httpserver.cpp b/src/protocols/httpserver.cpp
index 8819490..164ce54 100644
--- a/src/protocols/httpserver.cpp
+++ b/src/protocols/httpserver.cpp
@@ -22,8 +22,7 @@ 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;
-HttpServer::HttpServer(ICamera *camera,
- // QObject *parent,
+HttpServer::HttpServer(std::shared_ptr<ICamera> camera,
const QHostAddress &address,
const uint16_t port)
: IProtocol{camera}
@@ -44,10 +43,34 @@ HttpServer::HttpServer(ICamera *camera,
[this](const QHttpServerRequest &request) {
return POST_params(request);
});
+ m_server->route(apiPrefix + QStringLiteral("/sensor/image"),
+ QHttpServerRequest::Method::Get,
+ [this]() { return GET_image(); });
+ m_server->route(apiPrefix + QStringLiteral("/sensor/image2"),
+ QHttpServerRequest::Method::Get,
+ [this]() { return GET_image(); });
qDebug().noquote() << Q_FUNC_INFO << ": listen: " << m_server->listen(m_address, m_port);
}
+QHttpServerResponse HttpServer::GET_image()
+{
+ static Image img;
+
+ if (!m_camera->getImage(&img)) {
+ qCritical() << "cannot get image";
+ return QHttpServerResponse::StatusCode::ServiceUnavailable;
+ }
+
+ pgm_save(&img);
+ std::lock_guard<std::mutex> lg(pgm_image_mtx);
+
+ return QHttpServerResponse{QByteArray{(const char *) (pgm_image),
+ static_cast<qsizetype>(
+ pgm_image_size)},
+ QHttpServerResponse::StatusCode::Ok};
+}
+
QHttpServerResponse HttpServer::GET_pixels()
{
QElapsedTimer t;
@@ -69,22 +92,26 @@ QHttpServerResponse HttpServer::GET_pixels()
// const auto sharedCam = m_camera.lock();
// FIME: don't cast anything, use interface
// auto cam = dynamic_cast<VeyeIMX287m *>(sharedCam.get());
- auto cam = dynamic_cast<VeyeIMX287m *>(m_camera);
+ // auto cam = dynamic_cast<VeyeIMX287m *>(m_camera);
- if (!cam) {
+ // if (!cam) {
+ if (!m_camera) {
qWarning() << "NO CAM";
return QHttpServerResponse::StatusCode::ServiceUnavailable;
}
// yeaah
// ::img = &img;
- if (!cam->getImage(img)) {
+ // if (!cam->getImage(img)) {
+ if (!m_camera->getImage(&img)) {
qWarning() << "cannot get image";
return QHttpServerResponse::StatusCode::ServiceUnavailable;
}
// ::pixels = std::move(img.pixels());
- ++cam->processedCounter;
+ // ++cam->processedCounter;
+ // FIXME: take into account
+ // ++m_camera->processedCounter;
}
// FIXME: not thread-safe, don't use this static shared_ptr at all
diff --git a/src/protocols/httpserver.h b/src/protocols/httpserver.h
index 64f7987..600ead4 100644
--- a/src/protocols/httpserver.h
+++ b/src/protocols/httpserver.h
@@ -24,14 +24,14 @@ public:
static constexpr uint16_t DefaultPort{8080};
public:
- explicit HttpServer(ICamera *camera,
- // QObject *parent = nullptr,
+ explicit HttpServer(std::shared_ptr<ICamera> camera,
const QHostAddress &address = DefaultAddress,
const uint16_t port = DefaultPort);
~HttpServer() override = default;
// TODO: methods starting with GET_/POST_ will be routed automatically
public:
+ QHttpServerResponse GET_image();
QHttpServerResponse GET_pixels();
QHttpServerResponse POST_params(const QHttpServerRequest &request);
diff --git a/src/protocols/iprotocol.cpp b/src/protocols/iprotocol.cpp
index d021fb7..5422a9d 100644
--- a/src/protocols/iprotocol.cpp
+++ b/src/protocols/iprotocol.cpp
@@ -1,5 +1,5 @@
#include "iprotocol.h"
-IProtocol::IProtocol(ICamera *camera)
+IProtocol::IProtocol(std::shared_ptr<ICamera> camera)
: m_camera{camera}
{}
diff --git a/src/protocols/iprotocol.h b/src/protocols/iprotocol.h
index 1643036..2d65dac 100644
--- a/src/protocols/iprotocol.h
+++ b/src/protocols/iprotocol.h
@@ -1,13 +1,15 @@
#pragma once
+#include <memory>
+
class ICamera;
class IProtocol
{
public:
- explicit IProtocol(ICamera *camera);
+ explicit IProtocol(std::shared_ptr<ICamera> camera);
virtual ~IProtocol() = default;
protected:
- ICamera *m_camera{nullptr};
+ std::shared_ptr<ICamera> m_camera;
};