summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS1
-rw-r--r--HISTORY6
-rw-r--r--config.c18
-rw-r--r--config.h3
-rw-r--r--interface.c7
-rw-r--r--interface.h3
-rw-r--r--svdrp.c78
-rw-r--r--svdrp.h29
8 files changed, 95 insertions, 50 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 9f6aa1b5..0627c37b 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -18,6 +18,7 @@ Heino Goldenstein <heino.goldenstein@microplex.de>
Guido Fiala <gfiala@s.netic.de>
for implementing slow forward/back
+ for implementing the SVDRP command 'HITK'
Robert Schneider <Robert.Schneider@lotus.com>
for implementing EIT support for displaying the current/next info
diff --git a/HISTORY b/HISTORY
index bf76f840..eb7f7009 100644
--- a/HISTORY
+++ b/HISTORY
@@ -168,7 +168,7 @@ Video Disk Recorder Revision History
entered so far together with the name of that channel are displayed on the
OSD (suggested by Martin Hammerschmid).
-2000-09-16: Version 0.64
+2000-09-17: Version 0.64
- Video files now have the 'group read' bit set.
- Fixed handling errors in 'readstring()'.
@@ -182,3 +182,7 @@ Video Disk Recorder Revision History
response time on user actions. As a consequence the EIT data may sometimes
not be displayed, but this will change later when cEIT runs as a separate
thread.
+- The new SVDRP command 'HITK' can be used to 'hit' a remote control key.
+ Establish an SVDRP connection and enter HITK without a parameter for a list
+ of all valid key names.
+
diff --git a/config.c b/config.c
index 0a965ee5..e161efd7 100644
--- a/config.c
+++ b/config.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 1.22 2000/09/10 15:07:15 kls Exp $
+ * $Id: config.c 1.23 2000/09/17 09:11:59 kls Exp $
*/
#include "config.h"
@@ -155,14 +155,22 @@ eKeys cKeys::Get(unsigned int Code)
return kNone;
}
-unsigned int cKeys::Encode(const char *Command)
+eKeys cKeys::Translate(const char *Command)
{
- if (Command != NULL) {
+ if (Command) {
const tKey *k = keys;
- while ((k->type != kNone) && strcmp(k->name, Command) != 0)
+ while ((k->type != kNone) && strcasecmp(k->name, Command) != 0)
k++;
- return k->code;
+ return k->type;
}
+ return kNone;
+}
+
+unsigned int cKeys::Encode(const char *Command)
+{
+ eKeys k = Translate(Command);
+ if (k != kNone)
+ return keys[k].code;
return 0;
}
diff --git a/config.h b/config.h
index 7a139585..418fa630 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 1.20 2000/09/15 13:25:51 kls Exp $
+ * $Id: config.h 1.21 2000/09/17 09:08:13 kls Exp $
*/
#ifndef __CONFIG_H
@@ -55,6 +55,7 @@ public:
void SetDummyValues(void);
bool Load(const char *FileName = NULL);
bool Save(void);
+ eKeys Translate(const char *Command);
unsigned int Encode(const char *Command);
eKeys Get(unsigned int Code);
void Set(eKeys Key, unsigned int Code);
diff --git a/interface.c b/interface.c
index 0993ba8b..5937e5c4 100644
--- a/interface.c
+++ b/interface.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: interface.c 1.16 2000/09/17 08:21:45 kls Exp $
+ * $Id: interface.c 1.17 2000/09/17 09:25:30 kls Exp $
*/
#include "interface.h"
@@ -66,6 +66,11 @@ eKeys cInterface::GetKey(bool Wait)
return Key;
}
+void cInterface::PutKey(eKeys Key)
+{
+ keyFromWait = Key;
+}
+
eKeys cInterface::Wait(int Seconds, bool KeepChar)
{
int t0 = time_ms() + Seconds * 1000;
diff --git a/interface.h b/interface.h
index 4503dc65..e4f7c852 100644
--- a/interface.h
+++ b/interface.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: interface.h 1.11 2000/09/10 10:35:46 kls Exp $
+ * $Id: interface.h 1.12 2000/09/17 09:19:43 kls Exp $
*/
#ifndef __INTERFACE_H
@@ -30,6 +30,7 @@ public:
void Open(int NumCols = MenuColumns, int NumLines = MenuLines);
void Close(void);
eKeys GetKey(bool Wait = true);
+ void PutKey(eKeys Key);
void Clear(void);
void ClearEol(int x, int y, eDvbColor Color = clrBackground);
void SetCols(int *c);
diff --git a/svdrp.c b/svdrp.c
index 438e9331..fe25c8bf 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 1.7 2000/09/16 13:34:28 kls Exp $
+ * $Id: svdrp.c 1.8 2000/09/17 09:24:52 kls Exp $
*/
#define _GNU_SOURCE
@@ -122,6 +122,9 @@ const char *HelpPages[] = {
" Delete timer.",
"HELP [ <topic> ]\n"
" The HELP command gives help info.",
+ "HITK [ <key> ]\n"
+ " Hit the given remote control key. Without option a list of all\n"
+ " valid key names is given.",
"LSTC [ <number> | <name> ]\n"
" List channels. Without option, all channels are listed. Otherwise\n"
" only the given channel is listed. If a name is given, all channels\n"
@@ -272,7 +275,7 @@ void cSVDRP::Reply(int Code, const char *fmt, ...)
}
}
-void cSVDRP::CmdChan(const char *Option)
+void cSVDRP::CmdCHAN(const char *Option)
{
if (*Option) {
int n = -1;
@@ -329,13 +332,13 @@ void cSVDRP::CmdChan(const char *Option)
Reply(550, "Unable to find channel \"%d\"", CurrentChannel);
}
-void cSVDRP::CmdDelc(const char *Option)
+void cSVDRP::CmdDELC(const char *Option)
{
//TODO combine this with menu action (timers must be updated)
Reply(502, "DELC not yet implemented");
}
-void cSVDRP::CmdDelt(const char *Option)
+void cSVDRP::CmdDELT(const char *Option)
{
if (*Option) {
if (isnumber(Option)) {
@@ -360,7 +363,7 @@ void cSVDRP::CmdDelt(const char *Option)
Reply(501, "Missing timer number");
}
-void cSVDRP::CmdHelp(const char *Option)
+void cSVDRP::CmdHELP(const char *Option)
{
if (*Option) {
const char *hp = GetHelpPage(Option);
@@ -388,7 +391,27 @@ void cSVDRP::CmdHelp(const char *Option)
Reply(214, "End of HELP info");
}
-void cSVDRP::CmdLstc(const char *Option)
+void cSVDRP::CmdHITK(const char *Option)
+{
+ if (*Option) {
+ eKeys k = Keys.Translate(Option);
+ if (k != kNone) {
+ Interface.PutKey(k);
+ Reply(250, "Key \"%s\" accepted", Option);
+ }
+ else
+ Reply(504, "Unknown key: \"%s\"", Option);
+ }
+ else {
+ Reply(-214, "Valid <key> names for the HITK command:");
+ for (int i = 0; i < kNone; i++) {
+ Reply(-214, " %s", Keys.keys[i].name);
+ }
+ Reply(214, "End of key list");
+ }
+}
+
+void cSVDRP::CmdLSTC(const char *Option)
{
if (*Option) {
if (isnumber(Option)) {
@@ -431,7 +454,7 @@ void cSVDRP::CmdLstc(const char *Option)
}
}
-void cSVDRP::CmdLstt(const char *Option)
+void cSVDRP::CmdLSTT(const char *Option)
{
if (*Option) {
if (isnumber(Option)) {
@@ -455,7 +478,7 @@ void cSVDRP::CmdLstt(const char *Option)
}
}
-void cSVDRP::CmdModc(const char *Option)
+void cSVDRP::CmdMODC(const char *Option)
{
if (*Option) {
char *tail;
@@ -484,7 +507,7 @@ void cSVDRP::CmdModc(const char *Option)
Reply(501, "Missing channel settings");
}
-void cSVDRP::CmdModt(const char *Option)
+void cSVDRP::CmdMODT(const char *Option)
{
if (*Option) {
char *tail;
@@ -517,19 +540,19 @@ void cSVDRP::CmdModt(const char *Option)
Reply(501, "Missing timer settings");
}
-void cSVDRP::CmdMovc(const char *Option)
+void cSVDRP::CmdMOVC(const char *Option)
{
//TODO combine this with menu action (timers must be updated)
Reply(502, "MOVC not yet implemented");
}
-void cSVDRP::CmdMovt(const char *Option)
+void cSVDRP::CmdMOVT(const char *Option)
{
//TODO combine this with menu action
Reply(502, "MOVT not yet implemented");
}
-void cSVDRP::CmdNewc(const char *Option)
+void cSVDRP::CmdNEWC(const char *Option)
{
if (*Option) {
cChannel *channel = new cChannel;
@@ -547,7 +570,7 @@ void cSVDRP::CmdNewc(const char *Option)
Reply(501, "Missing channel settings");
}
-void cSVDRP::CmdNewt(const char *Option)
+void cSVDRP::CmdNEWT(const char *Option)
{
if (*Option) {
cTimer *timer = new cTimer;
@@ -571,7 +594,7 @@ void cSVDRP::CmdNewt(const char *Option)
Reply(501, "Missing timer settings");
}
-void cSVDRP::CmdUpdt(const char *Option)
+void cSVDRP::CmdUPDT(const char *Option)
{
if (*Option) {
cTimer *timer = new cTimer;
@@ -610,19 +633,20 @@ void cSVDRP::Execute(char *Cmd)
while (*s && !isspace(*s))
s++;
*s++ = 0;
- if (CMD("CHAN")) CmdChan(s);
- else if (CMD("DELC")) CmdDelc(s);
- else if (CMD("DELT")) CmdDelt(s);
- else if (CMD("HELP")) CmdHelp(s);
- else if (CMD("LSTC")) CmdLstc(s);
- else if (CMD("LSTT")) CmdLstt(s);
- else if (CMD("MODC")) CmdModc(s);
- else if (CMD("MODT")) CmdModt(s);
- else if (CMD("MOVC")) CmdMovc(s);
- else if (CMD("MOVT")) CmdMovt(s);
- else if (CMD("NEWC")) CmdNewc(s);
- else if (CMD("NEWT")) CmdNewt(s);
- else if (CMD("UPDT")) CmdUpdt(s);
+ if (CMD("CHAN")) CmdCHAN(s);
+ else if (CMD("DELC")) CmdDELC(s);
+ else if (CMD("DELT")) CmdDELT(s);
+ else if (CMD("HELP")) CmdHELP(s);
+ else if (CMD("HITK")) CmdHITK(s);
+ else if (CMD("LSTC")) CmdLSTC(s);
+ else if (CMD("LSTT")) CmdLSTT(s);
+ else if (CMD("MODC")) CmdMODC(s);
+ else if (CMD("MODT")) CmdMODT(s);
+ else if (CMD("MOVC")) CmdMOVC(s);
+ else if (CMD("MOVT")) CmdMOVT(s);
+ else if (CMD("NEWC")) CmdNEWC(s);
+ else if (CMD("NEWT")) CmdNEWT(s);
+ else if (CMD("UPDT")) CmdUPDT(s);
else if (CMD("QUIT")
|| CMD("\x04")) Close();
else Reply(500, "Command unrecognized: \"%s\"", Cmd);
diff --git a/svdrp.h b/svdrp.h
index 674639e1..6c1fbb29 100644
--- a/svdrp.h
+++ b/svdrp.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: svdrp.h 1.3 2000/09/16 11:48:36 kls Exp $
+ * $Id: svdrp.h 1.4 2000/09/17 08:52:51 kls Exp $
*/
#ifndef __SVDRP_H
@@ -32,19 +32,20 @@ private:
void Close(void);
bool Send(const char *s, int length = -1);
void Reply(int Code, const char *fmt, ...);
- void CmdChan(const char *Option);
- void CmdDelc(const char *Option);
- void CmdDelt(const char *Option);
- void CmdHelp(const char *Option);
- void CmdLstc(const char *Option);
- void CmdLstt(const char *Option);
- void CmdModc(const char *Option);
- void CmdModt(const char *Option);
- void CmdMovc(const char *Option);
- void CmdMovt(const char *Option);
- void CmdNewc(const char *Option);
- void CmdNewt(const char *Option);
- void CmdUpdt(const char *Option);
+ void CmdCHAN(const char *Option);
+ void CmdDELC(const char *Option);
+ void CmdDELT(const char *Option);
+ void CmdHELP(const char *Option);
+ void CmdHITK(const char *Option);
+ void CmdLSTC(const char *Option);
+ void CmdLSTT(const char *Option);
+ void CmdMODC(const char *Option);
+ void CmdMODT(const char *Option);
+ void CmdMOVC(const char *Option);
+ void CmdMOVT(const char *Option);
+ void CmdNEWC(const char *Option);
+ void CmdNEWT(const char *Option);
+ void CmdUPDT(const char *Option);
void Execute(char *Cmd);
public:
cSVDRP(int Port);