mirror of
https://github.com/jellyfin/jellyfin-desktop.git
synced 2026-10-26 16:45:24 +00:00
75 lines
1.8 KiB
C++
75 lines
1.8 KiB
C++
#ifndef INPUTCEC_H
|
|
#define INPUTCEC_H
|
|
|
|
#include <QMutex>
|
|
#include <QTimer>
|
|
#include "input/InputComponent.h"
|
|
#include <libcec/cec.h>
|
|
|
|
using namespace CEC;
|
|
|
|
#define CEC_LONGPRESS_DURATION 1000 // duration after keypress is considerered as long
|
|
|
|
#define CEC_INPUT_NAME "CEC"
|
|
|
|
class InputCECWorker;
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
class InputCEC : public InputBase
|
|
{
|
|
public:
|
|
InputCEC(QObject* parent);
|
|
|
|
virtual const char* inputName()
|
|
{ return CEC_INPUT_NAME; }
|
|
|
|
virtual bool initInput();
|
|
|
|
private:
|
|
QThread* m_cecThread;
|
|
InputCECWorker* m_cecWorker;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////
|
|
class InputCECWorker : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
InputCECWorker(QObject* parent = 0) : QObject(parent), m_adapter(0), m_adapterPort("")
|
|
{
|
|
}
|
|
|
|
~InputCECWorker();
|
|
|
|
Q_SLOT bool init();
|
|
Q_SIGNAL void receivedInput(const QString& source, const QString& keycode, float amount);
|
|
|
|
public slots:
|
|
void checkAdapter();
|
|
|
|
private:
|
|
void closeCec();
|
|
|
|
bool openAdapter();
|
|
void closeAdapter();
|
|
|
|
QString getCommandString(cec_user_control_code code, unsigned int duration);
|
|
void sendReceivedInput(const QString& source, const QString& keycode, float amount = 1.0);
|
|
QString getCommandParamsList(cec_command command);
|
|
|
|
// libcec callbacks
|
|
static int CecLogMessage(void* cbParam, const cec_log_message message);
|
|
static int CecKeyPress(void* cbParam, const cec_keypress key);
|
|
static int CecCommand(void* cbParam, const cec_command command);
|
|
static int CecAlert(void* cbParam, const libcec_alert type, const libcec_parameter param);
|
|
|
|
libcec_configuration m_configuration;
|
|
ICECCallbacks m_callbacks;
|
|
ICECAdapter* m_adapter;
|
|
QString m_adapterPort;
|
|
QTimer* m_timer;
|
|
bool m_verboseLogging;
|
|
};
|
|
|
|
#endif // INPUTCEC_H
|