mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	KBD active by default; no more 'ncurses' necessary for KBD
This commit is contained in:
		| @@ -501,3 +501,6 @@ Emil Naepflein <Emil.Naepflein@philosys.de> | ||||
| Gerald Berwolf <genka@genka.de> | ||||
|  for suggesting to deactivate some templates in tools.h in case some plugin needs to | ||||
|  use the STL | ||||
|  | ||||
| Thomas Sailer <sailer@scs.ch> | ||||
|  for pointing out how to set the terminal parameters to read from the keyboard | ||||
|   | ||||
							
								
								
									
										13
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -1837,7 +1837,7 @@ Video Disk Recorder Revision History | ||||
| - The new plugin 'sky' can be used to integrate a Sky Digibox into the VDR system, | ||||
|   using a Kfir MPEG2 encoder card (see PLUGINS/src/sky/README for details). | ||||
|  | ||||
| 2002-12-07: Version 1.1.19 | ||||
| 2002-12-08: Version 1.1.19 | ||||
|  | ||||
| - The character '|' in description texts of EPG records is now interpreted as a | ||||
|   newline character (suggested by Gerhard Steiner). | ||||
| @@ -1851,3 +1851,14 @@ Video Disk Recorder Revision History | ||||
|   in testing this). Since switching channels now no longer explicitly waits for a | ||||
|   channel lock in the foreground thread, the "panic level" mechanism is no longer | ||||
|   used (maybe we don't need it nay more, anyway). | ||||
| - The keyboard is now by default always active to control VDR. The 'make' option | ||||
|   REMOTE=KBD is therefore obsolete. When compiling VDR with REMOTE=RCU or REMOTE=LIRC, | ||||
|   the keyboard can thus now be active together with the remote control. If you want | ||||
|   to build VDR _without_ keyboard support you can set NO_KBD=1 in the 'make' call. | ||||
|   Since the keyboard codes are now different from the ones used previously (which | ||||
|   were mapped by the 'ncurses' library) you will need to go through the "Learning | ||||
|   keys" procedure again. To do so, either delete the file /video/remote.conf or | ||||
|   remove the KBD.* entries from it before starting this version of VDR. | ||||
|   (Thanks to Thomas Sailer for pointing out how to set the terminal parameters to | ||||
|   read from the keyboard). | ||||
| - The 'ncurses' library is now only necessary when compiling VDR with DEBUG_OSD=1. | ||||
|   | ||||
							
								
								
									
										10
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								INSTALL
									
									
									
									
									
								
							| @@ -26,17 +26,17 @@ installed. | ||||
| IMPORTANT: See "Configuration files" below for information on how | ||||
| =========  to set up the configuration files at the proper location! | ||||
|  | ||||
| The 'vdr' program can be controlled via the PC keyboard or | ||||
| an infrared remote control unit. Define the REMOTE macro to one of the | ||||
| following values 'make' call to activate the respective control mode: | ||||
| By default the 'vdr' program can be controlled via the PC keyboard. If you have | ||||
| an infrared remote control unit you can define the REMOTE macro to one of the | ||||
| following values in the 'make' call to activate the respective control mode: | ||||
|  | ||||
|   REMOTE=KBD    control via the PC keyboard (default) | ||||
|   REMOTE=RCU    control via the "Remote Control Unit" receiver | ||||
|                 (see http://www.cadsoft.de/vdr/remote.htm) | ||||
|   REMOTE=LIRC   control via the "Linux Infrared Remote Control" | ||||
|                 (see http://www.lirc.org) | ||||
|   REMOTE=NONE   no remote control (in case only SVDRP shall be used) | ||||
|  | ||||
| If you want to disable control via the PC keyboard, you can add NO_KBD=1 | ||||
| to the 'make' call. | ||||
| Adding "DEBUG_OSD=1" will use the PC screen (or current window) | ||||
| to display texts instead of the DVB card's on-screen display | ||||
| interface. These modes are useful when testing new menus if you | ||||
|   | ||||
							
								
								
									
										10
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
| # See the main source file 'vdr.c' for copyright information and | ||||
| # how to reach the author. | ||||
| # | ||||
| # $Id: Makefile 1.52 2002/11/29 15:23:02 kls Exp $ | ||||
| # $Id: Makefile 1.53 2002/12/08 12:20:37 kls Exp $ | ||||
|  | ||||
| .DELETE_ON_ERROR: | ||||
|  | ||||
| @@ -38,12 +38,8 @@ OBJS = audio.o channels.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbosd | ||||
| OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1 | ||||
| FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1 | ||||
|  | ||||
| ifndef REMOTE | ||||
| REMOTE = KBD | ||||
| endif | ||||
|  | ||||
| ifeq ($(REMOTE), KBD) | ||||
| NCURSESLIB = -lncurses | ||||
| ifndef NO_KBD | ||||
| DEFINES += -DREMOTE_KBD | ||||
| endif | ||||
|  | ||||
| DEFINES += -DREMOTE_$(REMOTE) | ||||
|   | ||||
							
								
								
									
										14
									
								
								osd.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								osd.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: osd.c 1.38 2002/11/16 14:20:26 kls Exp $ | ||||
|  * $Id: osd.c 1.39 2002/12/08 13:17:13 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "osd.h" | ||||
| @@ -26,15 +26,8 @@ | ||||
|  | ||||
| void cOsd::Initialize(void) | ||||
| { | ||||
| #if defined(DEBUG_OSD) || defined(REMOTE_KBD) | ||||
|   initscr(); | ||||
|   keypad(stdscr, true); | ||||
|   nonl(); | ||||
|   cbreak(); | ||||
|   noecho(); | ||||
|   timeout(10); | ||||
| #endif | ||||
| #if defined(DEBUG_OSD) | ||||
|   initscr(); | ||||
|   start_color(); | ||||
|   leaveok(stdscr, true); | ||||
| #endif | ||||
| @@ -43,7 +36,7 @@ void cOsd::Initialize(void) | ||||
| void cOsd::Shutdown(void) | ||||
| { | ||||
|   Close(); | ||||
| #if defined(DEBUG_OSD) || defined(REMOTE_KBD) | ||||
| #if defined(DEBUG_OSD) | ||||
|   endwin(); | ||||
| #endif | ||||
| } | ||||
| @@ -150,6 +143,7 @@ void cOsd::Clear(void) | ||||
| #ifdef DEBUG_OSD | ||||
|   SetColor(clrBackground, clrBackground); | ||||
|   Fill(0, 0, cols, rows, clrBackground); | ||||
|   refresh(); | ||||
| #else | ||||
|   osd->Clear(); | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										4
									
								
								osd.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								osd.h
									
									
									
									
									
								
							| @@ -4,13 +4,13 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: osd.h 1.37 2002/11/24 10:32:29 kls Exp $ | ||||
|  * $Id: osd.h 1.38 2002/12/08 12:21:26 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef __OSD_H | ||||
| #define __OSD_H | ||||
|  | ||||
| #if defined(DEBUG_OSD) || defined(REMOTE_KBD) | ||||
| #if defined(DEBUG_OSD) | ||||
| #include <ncurses.h> | ||||
| #endif | ||||
| #include "config.h" | ||||
|   | ||||
							
								
								
									
										65
									
								
								remote.c
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								remote.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: remote.c 1.33 2002/12/07 11:48:10 kls Exp $ | ||||
|  * $Id: remote.c 1.34 2002/12/08 13:37:13 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "remote.h" | ||||
| @@ -13,13 +13,7 @@ | ||||
| #include <string.h> | ||||
| #include <sys/types.h> | ||||
| #include <sys/time.h> | ||||
| #include <termios.h> | ||||
| #include <unistd.h> | ||||
|  | ||||
| #if defined REMOTE_KBD | ||||
| #include <ncurses.h> | ||||
| #endif | ||||
|  | ||||
| #include "tools.h" | ||||
|  | ||||
| // --- cRemote --------------------------------------------------------------- | ||||
| @@ -155,30 +149,65 @@ cRemotes Remotes; | ||||
|  | ||||
| // --- cKbdRemote ------------------------------------------------------------ | ||||
|  | ||||
| #if defined REMOTE_KBD | ||||
|  | ||||
| cKbdRemote::cKbdRemote(void) | ||||
| :cRemote("KBD") | ||||
| { | ||||
|   active = false; | ||||
|   tcgetattr(STDIN_FILENO, &savedTm); | ||||
|   struct termios tm; | ||||
|   if (tcgetattr(STDIN_FILENO, &tm) == 0) { | ||||
|      tm.c_iflag = 0; | ||||
|      tm.c_lflag &= ~(ICANON | ECHO); | ||||
|      tm.c_cc[VMIN] = 0; | ||||
|      tm.c_cc[VTIME] = 0; | ||||
|      tcsetattr(STDIN_FILENO, TCSANOW, &tm); | ||||
|      } | ||||
|   Start(); | ||||
| } | ||||
|  | ||||
| cKbdRemote::~cKbdRemote() | ||||
| { | ||||
|   Cancel(); | ||||
|   active = false; | ||||
|   Cancel(3); | ||||
|   tcsetattr(STDIN_FILENO, TCSANOW, &savedTm); | ||||
| } | ||||
|  | ||||
| void cKbdRemote::Action(void) | ||||
| { | ||||
|   dsyslog("KBD remote control thread started (pid=%d)", getpid()); | ||||
|   cPoller Poller(STDIN_FILENO); | ||||
|   for (;;) {//XXX | ||||
|       int Command = getch(); | ||||
|       if (Command != EOF) | ||||
|          Put(Command); | ||||
|       Poller.Poll(100); | ||||
|       } | ||||
|   active = true; | ||||
|   while (active) { | ||||
|         if (Poller.Poll(100)) { | ||||
|            uint64 Command = 0; | ||||
|            uint i = 0; | ||||
|            int t0 = time_ms(); | ||||
|            while (active && i < sizeof(Command)) { | ||||
|                  uchar ch; | ||||
|                  int r = read(STDIN_FILENO, &ch, 1); | ||||
|                  if (r == 1) { | ||||
|                     Command <<= 8; | ||||
|                     Command |= ch; | ||||
|                     i++; | ||||
|                     } | ||||
|                  else if (r == 0) { | ||||
|                     // don't know why, but sometimes special keys that start with | ||||
|                     // 0x1B ('ESC') cause a short gap between the 0x1B and the rest | ||||
|                     // of their codes, so we'll need to wait some 100ms to see if | ||||
|                     // there is more coming up - or whether this really is the 'ESC' | ||||
|                     // key (if somebody knows how to clean this up, please let me know): | ||||
|                     if (Command == 0x1B && time_ms() - t0 < 100) | ||||
|                        continue; | ||||
|                     if (Command) | ||||
|                        Put(Command); | ||||
|                     break; | ||||
|                     } | ||||
|                  else { | ||||
|                     LOG_ERROR; | ||||
|                     break; | ||||
|                     } | ||||
|                  } | ||||
|            } | ||||
|         } | ||||
|   dsyslog("KBD remote control thread ended (pid=%d)", getpid()); | ||||
| } | ||||
|  | ||||
| #endif | ||||
|   | ||||
							
								
								
									
										9
									
								
								remote.h
									
									
									
									
									
								
							
							
						
						
									
										9
									
								
								remote.h
									
									
									
									
									
								
							| @@ -4,13 +4,14 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: remote.h 1.21 2002/12/01 10:39:10 kls Exp $ | ||||
|  * $Id: remote.h 1.22 2002/12/08 13:37:02 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef __REMOTE_H | ||||
| #define __REMOTE_H | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <termios.h> | ||||
| #include <time.h> | ||||
| #include "keys.h" | ||||
| #include "thread.h" | ||||
| @@ -50,16 +51,14 @@ class cRemotes : public cList<cRemote> {}; | ||||
|  | ||||
| extern cRemotes Remotes; | ||||
|  | ||||
| #if defined REMOTE_KBD | ||||
|  | ||||
| class cKbdRemote : public cRemote, private cThread { | ||||
| private: | ||||
|   bool active; | ||||
|   struct termios savedTm; | ||||
|   virtual void Action(void); | ||||
| public: | ||||
|   cKbdRemote(void); | ||||
|   virtual ~cKbdRemote(); | ||||
|   }; | ||||
|  | ||||
| #endif | ||||
|  | ||||
| #endif //__REMOTE_H | ||||
|   | ||||
							
								
								
									
										19
									
								
								vdr.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								vdr.c
									
									
									
									
									
								
							| @@ -22,13 +22,14 @@ | ||||
|  * | ||||
|  * The project's page is at http://www.cadsoft.de/people/kls/vdr | ||||
|  * | ||||
|  * $Id: vdr.c 1.136 2002/12/01 10:44:48 kls Exp $ | ||||
|  * $Id: vdr.c 1.137 2002/12/08 13:34:39 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include <getopt.h> | ||||
| #include <locale.h> | ||||
| #include <signal.h> | ||||
| #include <stdlib.h> | ||||
| #include <termios.h> | ||||
| #include <unistd.h> | ||||
| #include "audio.h" | ||||
| #include "channels.h" | ||||
| @@ -77,6 +78,11 @@ static void Watchdog(int signum) | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|   // Save terminal settings: | ||||
|  | ||||
|   struct termios savedTm; | ||||
|   tcgetattr(STDIN_FILENO, &savedTm); | ||||
|  | ||||
|   // Initiate locale: | ||||
|  | ||||
|   setlocale(LC_ALL, ""); | ||||
| @@ -294,7 +300,7 @@ int main(int argc, char *argv[]) | ||||
|   // Daemon mode: | ||||
|  | ||||
|   if (DaemonMode) { | ||||
| #if !defined(DEBUG_OSD) && !defined(REMOTE_KBD) | ||||
| #if !defined(DEBUG_OSD) | ||||
|      pid_t pid = fork(); | ||||
|      if (pid < 0) { | ||||
|         fprintf(stderr, "%m\n"); | ||||
| @@ -307,7 +313,7 @@ int main(int argc, char *argv[]) | ||||
|      fclose(stdout); | ||||
|      fclose(stderr); | ||||
| #else | ||||
|      fprintf(stderr, "vdr: can't run in daemon mode with DEBUG_OSD or REMOTE_KBD on!\n"); | ||||
|      fprintf(stderr, "vdr: can't run in daemon mode with DEBUG_OSD on!\n"); | ||||
|      return 2; | ||||
| #endif | ||||
|      } | ||||
| @@ -378,8 +384,10 @@ int main(int argc, char *argv[]) | ||||
|   new cRcuRemote("/dev/ttyS1"); | ||||
| #elif defined(REMOTE_LIRC) | ||||
|   new cLircRemote("/dev/lircd"); | ||||
| #elif defined(REMOTE_KBD) | ||||
|   new cKbdRemote; | ||||
| #endif | ||||
| #if defined(REMOTE_KBD) | ||||
|   if (!DaemonMode) | ||||
|      new cKbdRemote; | ||||
| #endif | ||||
|   Interface->LearnKeys(); | ||||
|  | ||||
| @@ -716,6 +724,7 @@ int main(int argc, char *argv[]) | ||||
|   isyslog("exiting"); | ||||
|   if (SysLogLevel > 0) | ||||
|      closelog(); | ||||
|   tcsetattr(STDIN_FILENO, TCSANOW, &savedTm); | ||||
|   if (cThread::EmergencyExit()) { | ||||
|      esyslog("emergency exit!"); | ||||
|      return 1; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user