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.
|
|
|
|
*
|
2003-04-12 14:37:57 +02:00
|
|
|
* $Id: remote.h 1.25 2003/04/12 14:14:49 kls Exp $
|
2000-02-19 13:36:48 +01:00
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef __REMOTE_H
|
|
|
|
#define __REMOTE_H
|
|
|
|
|
|
|
|
#include <stdio.h>
|
2002-12-08 14:30:32 +01:00
|
|
|
#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"
|
2000-09-17 08:23:46 +02:00
|
|
|
#include "tools.h"
|
2000-02-19 13:36:48 +01:00
|
|
|
|
2002-09-29 13:40:45 +02:00
|
|
|
class cRemote : public cListObject {
|
2000-09-17 08:23:46 +02:00
|
|
|
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;
|
2002-11-01 10:53:07 +01:00
|
|
|
static cRemote *learning;
|
2002-09-29 13:40:45 +02:00
|
|
|
static char *unknownCode;
|
|
|
|
static cMutex mutex;
|
|
|
|
static cCondVar keyPressed;
|
2002-12-01 10:48:08 +01:00
|
|
|
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();
|
2003-04-12 14:37:57 +02:00
|
|
|
virtual bool Ready(void) { return true; }
|
2002-09-29 13:40:45 +02:00
|
|
|
virtual bool Initialize(void) { return true; }
|
|
|
|
const char *Name(void) { return name; }
|
2002-11-01 10:53:07 +01:00
|
|
|
static void SetLearning(cRemote *Learning) { learning = Learning; }
|
2002-09-29 13:40:45 +02:00
|
|
|
static void Clear(void);
|
|
|
|
static bool Put(eKeys Key);
|
2002-10-27 15:46:30 +01:00
|
|
|
static bool PutMacro(eKeys Key);
|
2002-12-01 10:48:08 +01:00
|
|
|
static const char *GetPlugin(void) { return plugin; }
|
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-08 14:30:32 +01:00
|
|
|
bool active;
|
2002-12-15 15:58:59 +01:00
|
|
|
static bool kbdAvailable;
|
2002-12-15 10:58:00 +01:00
|
|
|
static bool rawMode;
|
2002-12-08 14:30:32 +01:00
|
|
|
struct termios savedTm;
|
2000-10-08 09:25:20 +02:00
|
|
|
virtual void Action(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
|