mirror of
https://github.com/vdr-projects/vdr.git
synced 2025-03-01 10:50:46 +00:00
Version 0.04
- Changed name from 'osm' to 'vdr' to avoid mixups with the 'oms' program that appears to be in use with DVD replay. - Implemented a channel display in the top menu line. - Implemented replay progress display (press "Ok" when replaying to bring it up). - Implemented direct channel selecting by pressing the numeric keys. - Added several 'const' keywords to please stricter compilers. - The repeat function for the remote control no longer adapts dynamically to the timing of the RCU (this sometimes caused the repeat function to kick in too early). - Channel selection is now blocked when recording or replaying. - Improved process handling.
This commit is contained in:
47
remote.c
47
remote.c
@@ -1,10 +1,10 @@
|
||||
/*
|
||||
* remote.c: Interface to the Remote Control Unit
|
||||
*
|
||||
* See the main source file 'osm.c' for copyright information and
|
||||
* See the main source file 'vdr.c' for copyright information and
|
||||
* how to reach the author.
|
||||
*
|
||||
* $Id: remote.c 1.2 2000/04/15 16:00:51 kls Exp $
|
||||
* $Id: remote.c 1.6 2000/04/24 09:45:56 kls Exp $
|
||||
*/
|
||||
|
||||
#include "remote.h"
|
||||
@@ -17,6 +17,9 @@
|
||||
#include <unistd.h>
|
||||
#include "tools.h"
|
||||
|
||||
#define REPEATLIMIT 100 // ms
|
||||
#define REPEATDELAY 250 // ms
|
||||
|
||||
cRcIo::cRcIo(char *DeviceName)
|
||||
{
|
||||
dp = 0;
|
||||
@@ -25,7 +28,6 @@ cRcIo::cRcIo(char *DeviceName)
|
||||
address = 0xFFFF;
|
||||
t = 0;
|
||||
firstTime = lastTime = 0;
|
||||
minDelta = 0;
|
||||
lastCommand = 0;
|
||||
if ((f = open(DeviceName, O_RDWR | O_NONBLOCK)) >= 0) {
|
||||
struct termios t;
|
||||
@@ -35,8 +37,11 @@ cRcIo::cRcIo(char *DeviceName)
|
||||
if (tcsetattr(f, TCSAFLUSH, &t) == 0)
|
||||
return;
|
||||
}
|
||||
LOG_ERROR_STR(DeviceName);
|
||||
close(f);
|
||||
}
|
||||
else
|
||||
LOG_ERROR_STR(DeviceName);
|
||||
f = -1;
|
||||
}
|
||||
|
||||
@@ -46,9 +51,8 @@ cRcIo::~cRcIo()
|
||||
close(f);
|
||||
}
|
||||
|
||||
int cRcIo::ReceiveByte(bool Wait)
|
||||
bool cRcIo::InputAvailable(bool Wait)
|
||||
{
|
||||
// Returns the byte if one was received within 1 second, -1 otherwise
|
||||
if (f >= 0) {
|
||||
fd_set set;
|
||||
struct timeval timeout;
|
||||
@@ -56,13 +60,19 @@ int cRcIo::ReceiveByte(bool Wait)
|
||||
timeout.tv_usec = Wait ? 0 : 10000;
|
||||
FD_ZERO(&set);
|
||||
FD_SET(f, &set);
|
||||
if (select(FD_SETSIZE, &set, NULL, NULL, &timeout) > 0) {
|
||||
if (FD_ISSET(f, &set)) {
|
||||
unsigned char b;
|
||||
if (read(f, &b, 1) == 1)
|
||||
return b;
|
||||
}
|
||||
}
|
||||
if (select(FD_SETSIZE, &set, NULL, NULL, &timeout) > 0)
|
||||
return FD_ISSET(f, &set);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
int cRcIo::ReceiveByte(bool Wait)
|
||||
{
|
||||
// Returns the byte if one was received within a timeout, -1 otherwise
|
||||
if (InputAvailable(Wait)) {
|
||||
unsigned char b;
|
||||
if (read(f, &b, 1) == 1)
|
||||
return b;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
@@ -112,7 +122,6 @@ bool cRcIo::SetCode(unsigned char Code, unsigned short Address)
|
||||
{
|
||||
code = Code;
|
||||
address = Address;
|
||||
minDelta = 200;
|
||||
return SendCommand(code);
|
||||
}
|
||||
|
||||
@@ -157,12 +166,10 @@ bool cRcIo::GetCommand(unsigned int *Command, unsigned short *Address)
|
||||
// let's have a timeout to avoid getting overrun by commands
|
||||
int now = time_ms();
|
||||
int delta = now - lastTime;
|
||||
if (delta < minDelta)
|
||||
minDelta = delta; // dynamically adjust to the smallest delta
|
||||
lastTime = now;
|
||||
if (delta < minDelta * 1.3) { // if commands come in rapidly...
|
||||
if (now - firstTime < 250)
|
||||
return false; // ...repeat function kicks in after 250ms
|
||||
if (delta < REPEATLIMIT) { // if commands come in rapidly...
|
||||
if (now - firstTime < REPEATDELAY)
|
||||
return false; // ...repeat function kicks in after a short delay
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -209,12 +216,12 @@ bool cRcIo::Number(int n, bool Hex)
|
||||
|
||||
bool cRcIo::String(char *s)
|
||||
{
|
||||
char *chars = mode == modeH ? "0123456789ABCDEF" : "0123456789-EHLP ";
|
||||
const char *chars = mode == modeH ? "0123456789ABCDEF" : "0123456789-EHLP ";
|
||||
int n = 0;
|
||||
|
||||
for (int i = 0; *s && i < 4; s++, i++) {
|
||||
n <<= 4;
|
||||
for (char *c = chars; *c; c++) {
|
||||
for (const char *c = chars; *c; c++) {
|
||||
if (*c == *s) {
|
||||
n |= c - chars;
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user