QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SignalHandler.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4
5#include <QtCore/QLoggingCategory>
6#include <QtCore/QObject>
7
8#ifdef Q_OS_WIN
9 class QWinEventNotifier;
10#else
11 class QSocketNotifier;
12#endif
13
14Q_DECLARE_LOGGING_CATEGORY(SignalHandlerLog)
15
16class SignalHandler final : public QObject
17{
18 Q_OBJECT
19
20public:
21 explicit SignalHandler(QObject* parent = nullptr);
22 ~SignalHandler() override;
23
24 int setupSignalHandlers();
25
26 static SignalHandler* current() { return s_current.load(std::memory_order_acquire); }
27
28#ifdef Q_OS_WIN
29 static int consoleCtrlHandler(unsigned long evt);
30#else
31private slots:
32 void _onSigInt();
33 void _onSigTerm();
34#endif
35
36private:
37#ifdef Q_OS_WIN
38 QWinEventNotifier* _notifier{nullptr};
39 Qt::HANDLE _signalEvent{nullptr};
40#else
41 static void _intSignalHandler(int signum);
42 static void _termSignalHandler(int signum);
43
44 int _sigIntFd[2] = {-1, -1}; // socketpair read=0, write=1
45 int _sigTermFd[2] = {-1, -1};
46 QSocketNotifier* _notifierInt{nullptr};
47 QSocketNotifier* _notifierTerm{nullptr};
48#endif
49
50 bool _sigIntTriggered{false};
51 static std::atomic<SignalHandler*> s_current;
52};
Q_DECLARE_LOGGING_CATEGORY(AndroidSerialLog)
static SignalHandler * current()