mirror of
https://github.com/VDR4Arch/vdr.git
synced 2023-10-10 13:36:52 +02:00
Implemented SVDRP command 'HITK'
This commit is contained in:
parent
4716cfb5a1
commit
27046cf8a9
@ -18,6 +18,7 @@ Heino Goldenstein <heino.goldenstein@microplex.de>
|
|||||||
|
|
||||||
Guido Fiala <gfiala@s.netic.de>
|
Guido Fiala <gfiala@s.netic.de>
|
||||||
for implementing slow forward/back
|
for implementing slow forward/back
|
||||||
|
for implementing the SVDRP command 'HITK'
|
||||||
|
|
||||||
Robert Schneider <Robert.Schneider@lotus.com>
|
Robert Schneider <Robert.Schneider@lotus.com>
|
||||||
for implementing EIT support for displaying the current/next info
|
for implementing EIT support for displaying the current/next info
|
||||||
|
6
HISTORY
6
HISTORY
@ -168,7 +168,7 @@ Video Disk Recorder Revision History
|
|||||||
entered so far together with the name of that channel are displayed on the
|
entered so far together with the name of that channel are displayed on the
|
||||||
OSD (suggested by Martin Hammerschmid).
|
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.
|
- Video files now have the 'group read' bit set.
|
||||||
- Fixed handling errors in 'readstring()'.
|
- 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
|
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
|
not be displayed, but this will change later when cEIT runs as a separate
|
||||||
thread.
|
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.
|
||||||
|
|
||||||
|
22
config.c
22
config.c
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "config.h"
|
||||||
@ -155,14 +155,22 @@ eKeys cKeys::Get(unsigned int Code)
|
|||||||
return kNone;
|
return kNone;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eKeys cKeys::Translate(const char *Command)
|
||||||
|
{
|
||||||
|
if (Command) {
|
||||||
|
const tKey *k = keys;
|
||||||
|
while ((k->type != kNone) && strcasecmp(k->name, Command) != 0)
|
||||||
|
k++;
|
||||||
|
return k->type;
|
||||||
|
}
|
||||||
|
return kNone;
|
||||||
|
}
|
||||||
|
|
||||||
unsigned int cKeys::Encode(const char *Command)
|
unsigned int cKeys::Encode(const char *Command)
|
||||||
{
|
{
|
||||||
if (Command != NULL) {
|
eKeys k = Translate(Command);
|
||||||
const tKey *k = keys;
|
if (k != kNone)
|
||||||
while ((k->type != kNone) && strcmp(k->name, Command) != 0)
|
return keys[k].code;
|
||||||
k++;
|
|
||||||
return k->code;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3
config.h
3
config.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __CONFIG_H
|
||||||
@ -55,6 +55,7 @@ public:
|
|||||||
void SetDummyValues(void);
|
void SetDummyValues(void);
|
||||||
bool Load(const char *FileName = NULL);
|
bool Load(const char *FileName = NULL);
|
||||||
bool Save(void);
|
bool Save(void);
|
||||||
|
eKeys Translate(const char *Command);
|
||||||
unsigned int Encode(const char *Command);
|
unsigned int Encode(const char *Command);
|
||||||
eKeys Get(unsigned int Code);
|
eKeys Get(unsigned int Code);
|
||||||
void Set(eKeys Key, unsigned int Code);
|
void Set(eKeys Key, unsigned int Code);
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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"
|
#include "interface.h"
|
||||||
@ -66,6 +66,11 @@ eKeys cInterface::GetKey(bool Wait)
|
|||||||
return Key;
|
return Key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void cInterface::PutKey(eKeys Key)
|
||||||
|
{
|
||||||
|
keyFromWait = Key;
|
||||||
|
}
|
||||||
|
|
||||||
eKeys cInterface::Wait(int Seconds, bool KeepChar)
|
eKeys cInterface::Wait(int Seconds, bool KeepChar)
|
||||||
{
|
{
|
||||||
int t0 = time_ms() + Seconds * 1000;
|
int t0 = time_ms() + Seconds * 1000;
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __INTERFACE_H
|
||||||
@ -30,6 +30,7 @@ public:
|
|||||||
void Open(int NumCols = MenuColumns, int NumLines = MenuLines);
|
void Open(int NumCols = MenuColumns, int NumLines = MenuLines);
|
||||||
void Close(void);
|
void Close(void);
|
||||||
eKeys GetKey(bool Wait = true);
|
eKeys GetKey(bool Wait = true);
|
||||||
|
void PutKey(eKeys Key);
|
||||||
void Clear(void);
|
void Clear(void);
|
||||||
void ClearEol(int x, int y, eDvbColor Color = clrBackground);
|
void ClearEol(int x, int y, eDvbColor Color = clrBackground);
|
||||||
void SetCols(int *c);
|
void SetCols(int *c);
|
||||||
|
78
svdrp.c
78
svdrp.c
@ -10,7 +10,7 @@
|
|||||||
* and interact with the Video Disk Recorder - or write a full featured
|
* and interact with the Video Disk Recorder - or write a full featured
|
||||||
* graphical interface that sits on top of an SVDRP connection.
|
* 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
|
#define _GNU_SOURCE
|
||||||
@ -122,6 +122,9 @@ const char *HelpPages[] = {
|
|||||||
" Delete timer.",
|
" Delete timer.",
|
||||||
"HELP [ <topic> ]\n"
|
"HELP [ <topic> ]\n"
|
||||||
" The HELP command gives help info.",
|
" 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"
|
"LSTC [ <number> | <name> ]\n"
|
||||||
" List channels. Without option, all channels are listed. Otherwise\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"
|
" 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) {
|
if (*Option) {
|
||||||
int n = -1;
|
int n = -1;
|
||||||
@ -329,13 +332,13 @@ void cSVDRP::CmdChan(const char *Option)
|
|||||||
Reply(550, "Unable to find channel \"%d\"", CurrentChannel);
|
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)
|
//TODO combine this with menu action (timers must be updated)
|
||||||
Reply(502, "DELC not yet implemented");
|
Reply(502, "DELC not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdDelt(const char *Option)
|
void cSVDRP::CmdDELT(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
if (isnumber(Option)) {
|
if (isnumber(Option)) {
|
||||||
@ -360,7 +363,7 @@ void cSVDRP::CmdDelt(const char *Option)
|
|||||||
Reply(501, "Missing timer number");
|
Reply(501, "Missing timer number");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdHelp(const char *Option)
|
void cSVDRP::CmdHELP(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
const char *hp = GetHelpPage(Option);
|
const char *hp = GetHelpPage(Option);
|
||||||
@ -388,7 +391,27 @@ void cSVDRP::CmdHelp(const char *Option)
|
|||||||
Reply(214, "End of HELP info");
|
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 (*Option) {
|
||||||
if (isnumber(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 (*Option) {
|
||||||
if (isnumber(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) {
|
if (*Option) {
|
||||||
char *tail;
|
char *tail;
|
||||||
@ -484,7 +507,7 @@ void cSVDRP::CmdModc(const char *Option)
|
|||||||
Reply(501, "Missing channel settings");
|
Reply(501, "Missing channel settings");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdModt(const char *Option)
|
void cSVDRP::CmdMODT(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
char *tail;
|
char *tail;
|
||||||
@ -517,19 +540,19 @@ void cSVDRP::CmdModt(const char *Option)
|
|||||||
Reply(501, "Missing timer settings");
|
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)
|
//TODO combine this with menu action (timers must be updated)
|
||||||
Reply(502, "MOVC not yet implemented");
|
Reply(502, "MOVC not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdMovt(const char *Option)
|
void cSVDRP::CmdMOVT(const char *Option)
|
||||||
{
|
{
|
||||||
//TODO combine this with menu action
|
//TODO combine this with menu action
|
||||||
Reply(502, "MOVT not yet implemented");
|
Reply(502, "MOVT not yet implemented");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdNewc(const char *Option)
|
void cSVDRP::CmdNEWC(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
cChannel *channel = new cChannel;
|
cChannel *channel = new cChannel;
|
||||||
@ -547,7 +570,7 @@ void cSVDRP::CmdNewc(const char *Option)
|
|||||||
Reply(501, "Missing channel settings");
|
Reply(501, "Missing channel settings");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdNewt(const char *Option)
|
void cSVDRP::CmdNEWT(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
cTimer *timer = new cTimer;
|
cTimer *timer = new cTimer;
|
||||||
@ -571,7 +594,7 @@ void cSVDRP::CmdNewt(const char *Option)
|
|||||||
Reply(501, "Missing timer settings");
|
Reply(501, "Missing timer settings");
|
||||||
}
|
}
|
||||||
|
|
||||||
void cSVDRP::CmdUpdt(const char *Option)
|
void cSVDRP::CmdUPDT(const char *Option)
|
||||||
{
|
{
|
||||||
if (*Option) {
|
if (*Option) {
|
||||||
cTimer *timer = new cTimer;
|
cTimer *timer = new cTimer;
|
||||||
@ -610,19 +633,20 @@ void cSVDRP::Execute(char *Cmd)
|
|||||||
while (*s && !isspace(*s))
|
while (*s && !isspace(*s))
|
||||||
s++;
|
s++;
|
||||||
*s++ = 0;
|
*s++ = 0;
|
||||||
if (CMD("CHAN")) CmdChan(s);
|
if (CMD("CHAN")) CmdCHAN(s);
|
||||||
else if (CMD("DELC")) CmdDelc(s);
|
else if (CMD("DELC")) CmdDELC(s);
|
||||||
else if (CMD("DELT")) CmdDelt(s);
|
else if (CMD("DELT")) CmdDELT(s);
|
||||||
else if (CMD("HELP")) CmdHelp(s);
|
else if (CMD("HELP")) CmdHELP(s);
|
||||||
else if (CMD("LSTC")) CmdLstc(s);
|
else if (CMD("HITK")) CmdHITK(s);
|
||||||
else if (CMD("LSTT")) CmdLstt(s);
|
else if (CMD("LSTC")) CmdLSTC(s);
|
||||||
else if (CMD("MODC")) CmdModc(s);
|
else if (CMD("LSTT")) CmdLSTT(s);
|
||||||
else if (CMD("MODT")) CmdModt(s);
|
else if (CMD("MODC")) CmdMODC(s);
|
||||||
else if (CMD("MOVC")) CmdMovc(s);
|
else if (CMD("MODT")) CmdMODT(s);
|
||||||
else if (CMD("MOVT")) CmdMovt(s);
|
else if (CMD("MOVC")) CmdMOVC(s);
|
||||||
else if (CMD("NEWC")) CmdNewc(s);
|
else if (CMD("MOVT")) CmdMOVT(s);
|
||||||
else if (CMD("NEWT")) CmdNewt(s);
|
else if (CMD("NEWC")) CmdNEWC(s);
|
||||||
else if (CMD("UPDT")) CmdUpdt(s);
|
else if (CMD("NEWT")) CmdNEWT(s);
|
||||||
|
else if (CMD("UPDT")) CmdUPDT(s);
|
||||||
else if (CMD("QUIT")
|
else if (CMD("QUIT")
|
||||||
|| CMD("\x04")) Close();
|
|| CMD("\x04")) Close();
|
||||||
else Reply(500, "Command unrecognized: \"%s\"", Cmd);
|
else Reply(500, "Command unrecognized: \"%s\"", Cmd);
|
||||||
|
29
svdrp.h
29
svdrp.h
@ -4,7 +4,7 @@
|
|||||||
* See the main source file 'vdr.c' for copyright information and
|
* See the main source file 'vdr.c' for copyright information and
|
||||||
* how to reach the author.
|
* 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
|
#ifndef __SVDRP_H
|
||||||
@ -32,19 +32,20 @@ private:
|
|||||||
void Close(void);
|
void Close(void);
|
||||||
bool Send(const char *s, int length = -1);
|
bool Send(const char *s, int length = -1);
|
||||||
void Reply(int Code, const char *fmt, ...);
|
void Reply(int Code, const char *fmt, ...);
|
||||||
void CmdChan(const char *Option);
|
void CmdCHAN(const char *Option);
|
||||||
void CmdDelc(const char *Option);
|
void CmdDELC(const char *Option);
|
||||||
void CmdDelt(const char *Option);
|
void CmdDELT(const char *Option);
|
||||||
void CmdHelp(const char *Option);
|
void CmdHELP(const char *Option);
|
||||||
void CmdLstc(const char *Option);
|
void CmdHITK(const char *Option);
|
||||||
void CmdLstt(const char *Option);
|
void CmdLSTC(const char *Option);
|
||||||
void CmdModc(const char *Option);
|
void CmdLSTT(const char *Option);
|
||||||
void CmdModt(const char *Option);
|
void CmdMODC(const char *Option);
|
||||||
void CmdMovc(const char *Option);
|
void CmdMODT(const char *Option);
|
||||||
void CmdMovt(const char *Option);
|
void CmdMOVC(const char *Option);
|
||||||
void CmdNewc(const char *Option);
|
void CmdMOVT(const char *Option);
|
||||||
void CmdNewt(const char *Option);
|
void CmdNEWC(const char *Option);
|
||||||
void CmdUpdt(const char *Option);
|
void CmdNEWT(const char *Option);
|
||||||
|
void CmdUPDT(const char *Option);
|
||||||
void Execute(char *Cmd);
|
void Execute(char *Cmd);
|
||||||
public:
|
public:
|
||||||
cSVDRP(int Port);
|
cSVDRP(int Port);
|
||||||
|
Loading…
Reference in New Issue
Block a user