hyperion.ng/src/hyperiond/hyperiond.h

156 lines
3.6 KiB
C
Raw Normal View History

#pragma once
#include <QObject>
#include <QJsonObject>
#ifdef ENABLE_DISPMANX
#include <grabber/DispmanxWrapper.h>
#else
typedef QObject DispmanxWrapper;
#endif
#ifdef ENABLE_V4L2
#include <grabber/V4L2Wrapper.h>
#else
typedef QObject V4L2Wrapper;
#endif
#ifdef ENABLE_FB
#include <grabber/FramebufferWrapper.h>
#else
typedef QObject FramebufferWrapper;
#endif
#ifdef ENABLE_AMLOGIC
#include <grabber/AmlogicWrapper.h>
#else
typedef QObject AmlogicWrapper;
#endif
#ifdef ENABLE_OSX
#include <grabber/OsxWrapper.h>
#else
typedef QObject OsxWrapper;
#endif
#ifdef ENABLE_X11
#include <grabber/X11Wrapper.h>
#else
typedef QObject X11Wrapper;
#endif
#include <utils/Logger.h>
2018-12-27 23:11:32 +01:00
#include <utils/Image.h>
#include <utils/VideoMode.h>
2018-12-27 23:11:32 +01:00
// settings management
#include <utils/settings.h>
2018-12-27 23:11:32 +01:00
class Hyperion;
class SysTray;
2018-12-27 23:11:32 +01:00
class JsonServer;
class UDPListener;
class Stats;
class BonjourBrowserWrapper;
class WebServer;
class SettingsManager;
class PythonInit;
2018-12-30 22:07:53 +01:00
class SSDPHandler;
class FlatBufferServer;
class HyperionDaemon : public QObject
{
Q_OBJECT
friend SysTray;
public:
HyperionDaemon(QString configFile, QString rootPath, QObject *parent, const bool& logLvlOverwrite );
~HyperionDaemon();
JSON Auto correction + hyperion schema split for better readability (#452) * revoke schema split * add "getAutoCorrectedConfig" function * revoke schema split * revoke schema split * revoke schema split * Prevent compiler error if none grabber is available * revoke schema split * add "getAutoCorrectedConfig" function * revoke schema split * remove "configMigrator" * remove "configMigrator" * Change TestConfigFile to show how the autocorrection works * revoke schema split * revoke schema split * remove "ConfigMigrator" * remove "ConfigMigrator" * remove "ConfigMigratorBase" * remove "ConfigMigratorBase" * Add QJsonUtils.h * added ability "ignore-required" It has been added the ability to correct the configuration without having to pay attention to the keyword "required" in the hyperion schema * Allow Comments in Hyperion Schema * add ability to ignore the "required" keyword in hyperion schema * add ability to ignore the "required" keyword in hyperion schema * add ability to ignore the "required" keyword in hyperion schema * //Allow Comments in Hyperion Schema * Update jsonschema.py to version 0.8.0 to support ... references in json schema * add RefResolver from jsonschema.py to resolve references in hyperion schema * remove dupe code * split the hyperion schema in separatly files For better readability * add function "resolveReferences" to resolve references in hyperion schema. * remove CURRENT_CONFIG_VERSION * remove CURRENT_CONFIG_VERSION * split the hyperion schema in separatly files For better readability * Create schema-backgroundEffect.json * Add the rest of the Hyperion schema via upload * Remove Comments in config file * Add return variable to function writeJson(). fix function resolveReferences(). edit function load() to handle QPair result from schemaChecker. * edit function validate() to return QPair variable * fit function loadEffectDefinition() * fit function checkJson() * Expand error check by dividing "_error" variable in "_error" and "_schemaError". Replace variable "bool" in validate() in QPair * Extend function "cmd_cfg_set" to handle auto correction * Extend function "loadConfig" to handle auto correction * fix function loadConfig()
2017-07-30 13:32:10 +02:00
2018-12-30 22:07:53 +01:00
///
/// @brief Get webserver pointer (systray)
///
WebServer* getWebServerInstance() { return _webserver; };
2018-12-27 23:11:32 +01:00
///
/// @brief Get the current videoMode
///
const VideoMode & getVideoMode() { return _currVideoMode; };
///
/// @brief get the settings
///
const QJsonDocument getSetting(const settings::type& type);
void startNetworkServices();
2018-12-27 23:11:32 +01:00
static HyperionDaemon* getInstance() { return daemon; };
static HyperionDaemon* daemon;
public slots:
void freeObjects();
2018-12-27 23:11:32 +01:00
signals:
///
/// @brief PIPE settings events from Hyperion class to HyperionDaemon components
///
void settingsChanged(const settings::type& type, const QJsonDocument& data);
///
/// @brief After eval of setVideoMode this signal emits with a new one on change
///
void videoMode(const VideoMode& mode);
private slots:
///
/// @brief Handle settings update from Hyperion Settingsmanager emit or this constructor
/// @param type settingyType from enum
/// @param config configuration object
///
void handleSettingsUpdate(const settings::type& type, const QJsonDocument& config);
///
/// @brief Listen for videoMode changes and emit videoMode in case of a change, update _currVideoMode
/// @param mode The requested video mode
///
void setVideoMode(const VideoMode& mode);
private:
void createGrabberDispmanx();
void createGrabberAmlogic();
void createGrabberFramebuffer(const QJsonObject & grabberConfig);
void createGrabberOsx(const QJsonObject & grabberConfig);
void createGrabberX11(const QJsonObject & grabberConfig);
2018-12-27 23:11:32 +01:00
Logger* _log;
BonjourBrowserWrapper* _bonjourBrowserWrapper;
PythonInit* _pyInit;
WebServer* _webserver;
JsonServer* _jsonServer;
UDPListener* _udpListener;
std::vector<V4L2Wrapper*> _v4l2Grabbers;
2018-12-27 23:11:32 +01:00
DispmanxWrapper* _dispmanx;
X11Wrapper* _x11Grabber;
AmlogicWrapper* _amlGrabber;
FramebufferWrapper* _fbGrabber;
OsxWrapper* _osxGrabber;
Hyperion* _hyperion;
Stats* _stats;
2018-12-30 22:07:53 +01:00
SSDPHandler* _ssdp;
FlatBufferServer* _flatBufferServer;
unsigned _grabber_width;
unsigned _grabber_height;
unsigned _grabber_frequency;
unsigned _grabber_cropLeft;
unsigned _grabber_cropRight;
unsigned _grabber_cropTop;
2018-12-31 15:48:29 +01:00
unsigned _grabber_cropBottom;
QString _prevType;
2018-12-27 23:11:32 +01:00
VideoMode _currVideoMode;
SettingsManager* _settingsManager;
};