vdr/remote.h

105 lines
2.4 KiB
C
Raw Normal View History

2000-02-19 13:36:48 +01:00
/*
2002-09-29 13:40:45 +02:00
* remote.h: General Remote Control handling
2000-02-19 13:36:48 +01:00
*
2000-04-24 09:46:05 +02:00
* See the main source file 'vdr.c' for copyright information and
2000-02-19 13:36:48 +01:00
* how to reach the author.
*
* $Id: remote.h 1.33 2006/01/29 12:27:08 kls Exp $
2000-02-19 13:36:48 +01:00
*/
#ifndef __REMOTE_H
#define __REMOTE_H
#include <stdio.h>
#include <termios.h>
2000-02-19 13:36:48 +01:00
#include <time.h>
2002-09-29 13:40:45 +02:00
#include "keys.h"
2000-10-08 09:25:20 +02:00
#include "thread.h"
#include "tools.h"
2000-02-19 13:36:48 +01:00
2002-09-29 13:40:45 +02:00
class cRemote : public cListObject {
private:
2002-10-27 15:46:30 +01:00
enum { MaxKeys = MAXKEYSINMACRO };
2002-09-29 13:40:45 +02:00
static eKeys keys[MaxKeys];
static int in;
static int out;
static cTimeMs repeatTimeout;
static cRemote *learning;
2002-09-29 13:40:45 +02:00
static char *unknownCode;
static cMutex mutex;
static cCondVar keyPressed;
static const char *plugin;
2002-09-29 13:40:45 +02:00
char *name;
protected:
cRemote(const char *Name);
const char *GetSetup(void);
void PutSetup(const char *Setup);
bool Put(uint64 Code, bool Repeat = false, bool Release = false);
bool Put(const char *Code, bool Repeat = false, bool Release = false);
2000-07-15 12:39:20 +02:00
public:
2002-09-29 13:40:45 +02:00
virtual ~cRemote();
virtual bool Ready(void) { return true; }
virtual bool Initialize(void);
2002-09-29 13:40:45 +02:00
const char *Name(void) { return name; }
static void SetLearning(cRemote *Learning) { learning = Learning; }
2002-09-29 13:40:45 +02:00
static void Clear(void);
static bool Put(eKeys Key, bool AtFront = false);
2002-10-27 15:46:30 +01:00
static bool PutMacro(eKeys Key);
static void CallPlugin(const char *Plugin);
///< Initiates calling the given plugin's main menu function.
///< The Plugin parameter is the name of the plugin, and must be
///< a static string.
static const char *GetPlugin(void) { return plugin; }
static bool HasKeys(void);
2002-09-29 13:40:45 +02:00
static eKeys Get(int WaitMs = 1000, char **UnknownCode = NULL);
2000-07-15 12:39:20 +02:00
};
2002-09-29 13:40:45 +02:00
class cRemotes : public cList<cRemote> {};
2000-07-15 12:39:20 +02:00
2002-09-29 13:40:45 +02:00
extern cRemotes Remotes;
2000-07-15 12:39:20 +02:00
2002-12-15 10:58:00 +01:00
enum eKbdFunc {
kfNone,
kfF1 = 0x100,
kfF2,
kfF3,
kfF4,
kfF5,
kfF6,
kfF7,
kfF8,
kfF9,
kfF10,
kfF11,
kfF12,
kfUp,
kfDown,
kfLeft,
kfRight,
kfHome,
kfEnd,
kfPgUp,
kfPgDown,
kfIns,
kfDel,
};
2002-09-29 13:40:45 +02:00
class cKbdRemote : public cRemote, private cThread {
2000-07-15 12:39:20 +02:00
private:
2002-12-15 15:58:59 +01:00
static bool kbdAvailable;
2002-12-15 10:58:00 +01:00
static bool rawMode;
struct termios savedTm;
2000-10-08 09:25:20 +02:00
virtual void Action(void);
int ReadKey(void);
uint64 ReadKeySequence(void);
2002-12-15 10:58:00 +01:00
int MapCodeToFunc(uint64 Code);
2000-07-15 12:39:20 +02:00
public:
2002-09-29 13:40:45 +02:00
cKbdRemote(void);
virtual ~cKbdRemote();
2002-12-15 15:58:59 +01:00
static bool KbdAvailable(void) { return kbdAvailable; }
static uint64 MapFuncToCode(int Func);
2002-12-15 10:58:00 +01:00
static void SetRawMode(bool RawMode);
2000-02-19 13:36:48 +01:00
};
#endif //__REMOTE_H