diff options
author | Klaus Schmidinger <vdr@tvdr.de> | 2002-09-29 13:40:45 +0200 |
---|---|---|
committer | Klaus Schmidinger <vdr@tvdr.de> | 2002-09-29 13:40:45 +0200 |
commit | fc668608474ed16f015f71e57366f6bd2c5d8c8d (patch) | |
tree | cc94791b1001e240ded1dc7afdae8ed0e0c1a3b7 /remote.h | |
parent | f3af8e065a6022ca7234bd6c60e061d2064a6dff (diff) | |
download | vdr-fc668608474ed16f015f71e57366f6bd2c5d8c8d.tar.gz vdr-fc668608474ed16f015f71e57366f6bd2c5d8c8d.tar.bz2 |
Made remote controls plugin aware
Diffstat (limited to 'remote.h')
-rw-r--r-- | remote.h | 104 |
1 files changed, 33 insertions, 71 deletions
@@ -1,10 +1,10 @@ /* - * remote.h: Interface to the Remote Control Unit + * remote.h: General Remote Control handling * * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: remote.h 1.16 2002/05/09 11:43:04 kls Exp $ + * $Id: remote.h 1.17 2002/09/29 11:26:45 kls Exp $ */ #ifndef __REMOTE_H @@ -12,91 +12,53 @@ #include <stdio.h> #include <time.h> +#include "keys.h" #include "thread.h" #include "tools.h" -class cRcIoBase { -protected: - time_t t; -public: - enum { modeH = 'h', modeB = 'b', modeS = 's' }; - cRcIoBase(void); - virtual ~cRcIoBase(); - virtual bool SetCode(unsigned char Code, unsigned short Address) { return true; } - virtual bool SetMode(unsigned char Mode) { return true; } - virtual bool Number(int n, bool Hex = false) { return true; } - virtual void SetPoints(unsigned char Dp, bool On) {} - virtual bool String(char *s) { return true; } - virtual bool DetectCode(unsigned char *Code, unsigned short *Address) { return true; } - virtual void Flush(int WaitMs = 0) {} - virtual bool InputAvailable(void) { return false; } - virtual bool GetCommand(unsigned int *Command = NULL, bool *Repeat = NULL, bool *Release = NULL) { return false; } - }; +typedef unsigned long long int uint64; -#if defined REMOTE_KBD - -class cRcIoKBD : public cRcIoBase { +class cRemote : public cListObject { private: - cFile f; + enum { MaxKeys = 16 }; + static eKeys keys[MaxKeys]; + static int in; + static int out; + static bool learning; + static char *unknownCode; + static cMutex mutex; + static cCondVar keyPressed; + 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); public: - cRcIoKBD(void); - virtual ~cRcIoKBD(); - virtual void Flush(int WaitMs = 0); - virtual bool InputAvailable(void); - virtual bool GetCommand(unsigned int *Command = NULL, bool *Repeat = NULL, bool *Release = NULL); + virtual ~cRemote(); + virtual bool Initialize(void) { return true; } + const char *Name(void) { return name; } + static void SetLearning(bool On) { learning = On; } + static void Clear(void); + static bool Put(eKeys Key); + static eKeys Get(int WaitMs = 1000, char **UnknownCode = NULL); }; -#elif defined REMOTE_RCU +class cRemotes : public cList<cRemote> {}; -class cRcIoRCU : public cRcIoBase, private cThread { -private: - int f; - unsigned char dp, code, mode; - unsigned short address; - unsigned short receivedAddress; - unsigned int receivedCommand; - bool receivedData, receivedRepeat, receivedRelease; - int lastNumber; - bool SendCommand(unsigned char Cmd); - int ReceiveByte(int TimeoutMs = 0); - bool SendByteHandshake(unsigned char c); - bool SendByte(unsigned char c); - bool Digit(int n, int v); - virtual void Action(void); -public: - cRcIoRCU(char *DeviceName); - virtual ~cRcIoRCU(); - virtual bool SetCode(unsigned char Code, unsigned short Address); - virtual bool SetMode(unsigned char Mode); - virtual bool Number(int n, bool Hex = false); - virtual void SetPoints(unsigned char Dp, bool On); - virtual bool String(char *s); - virtual bool DetectCode(unsigned char *Code, unsigned short *Address); - virtual void Flush(int WaitMs = 0); - virtual bool InputAvailable(void) { return receivedData; } - virtual bool GetCommand(unsigned int *Command = NULL, bool *Repeat = NULL, bool *Release = NULL); - }; +extern cRemotes Remotes; -#elif defined REMOTE_LIRC +#if defined REMOTE_KBD -class cRcIoLIRC : public cRcIoBase, private cThread { +class cKbdRemote : public cRemote, private cThread { private: - enum { LIRC_KEY_BUF = 30, LIRC_BUFFER_SIZE = 128 }; - int f; - char keyName[LIRC_KEY_BUF]; - bool receivedData, receivedRepeat, receivedRelease; virtual void Action(void); public: - cRcIoLIRC(char *DeviceName); - virtual ~cRcIoLIRC(); - virtual bool InputAvailable(void) { return receivedData; } - virtual bool GetCommand(unsigned int *Command = NULL, bool *Repeat = NULL, bool *Release = NULL); + cKbdRemote(void); + virtual ~cKbdRemote(); }; -#elif !defined REMOTE_NONE - -// #error Please define a remote control mode! - #endif #endif //__REMOTE_H |