feat: add app entry point and CMake target for Qt GUI app
This commit is contained in:
parent
32426b3028
commit
9cc912b0a3
@ -25,6 +25,15 @@ add_library(core
|
|||||||
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
target_include_directories(core PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
target_link_libraries(core PUBLIC Qt5::Core)
|
target_link_libraries(core PUBLIC Qt5::Core)
|
||||||
|
|
||||||
|
# Main Application
|
||||||
|
add_executable(app
|
||||||
|
src/app/main.cxx
|
||||||
|
src/app/MainWindow.cxx
|
||||||
|
include/MainWindow.hpp
|
||||||
|
)
|
||||||
|
target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
|
||||||
|
target_link_libraries(app PRIVATE core Qt5::Widgets)
|
||||||
|
|
||||||
#tests
|
#tests
|
||||||
enable_testing()
|
enable_testing()
|
||||||
add_subdirectory(tests)
|
add_subdirectory(tests)
|
||||||
|
|||||||
58
src/app/main.cxx
Normal file
58
src/app/main.cxx
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
// main.cxx
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
// Author: Unai Blazquez <unaibg2000@gmail.com>
|
||||||
|
|
||||||
|
#include <QApplication>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
#include "Consumer.hpp"
|
||||||
|
#include "MainWindow.hpp"
|
||||||
|
#include "Producer.hpp"
|
||||||
|
#include "UnixIpcBridge.hpp"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
|
const std::string socket_path = "/tmp/azkoyen.sock";
|
||||||
|
const std::string sysfs_path = "./fake_sysfs_input";
|
||||||
|
|
||||||
|
// 1. Consumer — listens on the socket, emits Qt signal on receive
|
||||||
|
ConsumerThread consumer(socket_path);
|
||||||
|
|
||||||
|
// 2. GUI — minimal window that displays received values
|
||||||
|
MainWindow window;
|
||||||
|
window.show();
|
||||||
|
|
||||||
|
// Connect consumer signal → window slot (auto-queued across threads,
|
||||||
|
// so the GUI never blocks even if the producer is stuck in cool-down)
|
||||||
|
QObject::connect(&consumer, &ConsumerThread::valueReceived, &window,
|
||||||
|
&MainWindow::onValueReceived);
|
||||||
|
|
||||||
|
consumer.start();
|
||||||
|
|
||||||
|
// 3. Bridge — sends ints over the UNIX domain socket
|
||||||
|
UnixIpcBridge bridge(socket_path);
|
||||||
|
|
||||||
|
// 4. Producer — reads sysfs, generates random int, sends via bridge.
|
||||||
|
// Logs to a file instead of console (console is for the consumer).
|
||||||
|
std::ofstream log_file("producer.log", std::ios::app);
|
||||||
|
|
||||||
|
Producer producer(
|
||||||
|
sysfs_path, [&bridge](int value) { bridge.send(value); },
|
||||||
|
[]() { return std::rand() % 1000; },
|
||||||
|
[&log_file](const std::string& msg) { log_file << msg << std::endl; });
|
||||||
|
|
||||||
|
producer.start();
|
||||||
|
|
||||||
|
// 5. Run the Qt event loop (GUI stays responsive, signals are delivered)
|
||||||
|
int result = app.exec();
|
||||||
|
|
||||||
|
// 6. Graceful shutdown
|
||||||
|
producer.stop();
|
||||||
|
consumer.stop();
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user