mirror of
				https://github.com/vdr-projects/vdr.git
				synced 2025-03-01 10:50:46 +00:00 
			
		
		
		
	New remote control key 'Power'
This commit is contained in:
		
							
								
								
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								HISTORY
									
									
									
									
									
								
							| @@ -682,4 +682,5 @@ Video Disk Recorder Revision History | ||||
| - Changed version number notation. | ||||
| - Implemented automatic shutdown (see INSTALL and MANUAL for details). | ||||
| - New SVDRP command NEXT to show the next timer event. | ||||
|  | ||||
| - The new remote control key "Power" can be used to turn the VDR machine | ||||
|   off (this requires the presence of the '-s' option). | ||||
|   | ||||
							
								
								
									
										10
									
								
								INSTALL
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								INSTALL
									
									
									
									
									
								
							| @@ -120,6 +120,12 @@ receives a SIGTERM when the computer is actually shut down. So in case | ||||
| the shutdown fails, or the shutdown program for some reason decides not to | ||||
| perform a shutdown, VDR will stay up and running. | ||||
|  | ||||
| If there are currently no timers active, both parameters will be '0'. | ||||
| In that case the program shall not set the hardware for automatic restart | ||||
| and only perform the system shutdown. A program that uses the second parameter | ||||
| to set the hardware for restart must therefore also check whether the first | ||||
| parameter is '0'. | ||||
|  | ||||
| Before the shutdown program is called, the user will be prompted to inform | ||||
| him that the system is about to shut down. If any remote control key is | ||||
| pressed while this prompt is visible, the shutdown will be cancelled (and | ||||
| @@ -140,6 +146,9 @@ that event. The 'sudo halt' command then shuts down the computer. | ||||
| You will have to substitute both commands with whatever applies to your | ||||
| particular hard- and software environment. | ||||
|  | ||||
| If the '-s' option is present, the VDR machine can be turned off by pressing | ||||
| the "Power" key on the remote control. | ||||
|  | ||||
| Command line options: | ||||
| --------------------- | ||||
|  | ||||
| @@ -281,6 +290,7 @@ The default PC key assignments are: | ||||
|   Back                      'End' in numeric block | ||||
|   Red, Green, Yellow, Blue  'F1'..'F4' | ||||
|   0..9                      '0'..'9' in top row | ||||
|   Power                     'P' | ||||
|  | ||||
| If you prefer different key assignments, or if the default doesn't work for | ||||
| your keyboard, simply delete the file 'keys-pc.conf' and restart 'vdr' to get | ||||
|   | ||||
							
								
								
									
										1
									
								
								MANUAL
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								MANUAL
									
									
									
									
									
								
							| @@ -22,6 +22,7 @@ Video Disk Recorder User's Manual | ||||
|   Yellow  -           Eject DVD  Delete     Delete     -             Delete      Skip +60s | ||||
|   Blue    -           Resume     Mark       Mark(1)    -             Summary     Stop | ||||
|   0..9    Ch select   -          -          -          Numeric inp.  -           Editing | ||||
|   Power   Shutdown    -          -          -          -             -           - | ||||
|  | ||||
|   (1) The "Mark" button in the "Timers" menu only works if sorting the timers | ||||
|       has been disabled in the "Setup" menu. | ||||
|   | ||||
							
								
								
									
										3
									
								
								config.c
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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.60 2001/08/31 13:46:26 kls Exp $ | ||||
|  * $Id: config.c 1.61 2001/09/01 10:02:21 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "config.h" | ||||
| @@ -38,6 +38,7 @@ tKey keyTable[] = { // "Up" and "Down" must be the first two keys! | ||||
|                     { k7,             "7",             0 }, | ||||
|                     { k8,             "8",             0 }, | ||||
|                     { k9,             "9",             0 }, | ||||
|                     { kPower,         "Power",         0 }, | ||||
|                     { kNone,          "",              0 }, | ||||
|                   }; | ||||
|  | ||||
|   | ||||
							
								
								
									
										3
									
								
								config.h
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								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.67 2001/09/01 07:15:26 kls Exp $ | ||||
|  * $Id: config.h 1.68 2001/09/01 10:01:51 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #ifndef __CONFIG_H | ||||
| @@ -44,6 +44,7 @@ enum eKeys { // "Up" and "Down" must be the first two keys! | ||||
|              kYellow, | ||||
|              kBlue, | ||||
|              k0, k1, k2, k3, k4, k5, k6, k7, k8, k9, | ||||
|              kPower, | ||||
|              kNone, | ||||
|              // The following flags are OR'd with the above codes: | ||||
|              k_Repeat  = 0x8000, | ||||
|   | ||||
							
								
								
									
										29
									
								
								i18n.c
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								i18n.c
									
									
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: i18n.c 1.36 2001/08/31 15:37:05 kls Exp $ | ||||
|  * $Id: i18n.c 1.37 2001/09/01 10:52:35 kls Exp $ | ||||
|  * | ||||
|  * Slovenian translations provided by Miha Setina <mihasetina@softhome.net> | ||||
|  * Italian   translations provided by Alberto Carraro <bertocar@tin.it> | ||||
| @@ -385,6 +385,15 @@ const tPhrase Phrases[] = { | ||||
|     "Annuler les modifications?", | ||||
|     "Avbryte redigering", | ||||
|   }, | ||||
|   { "Recording - shut down anyway?", | ||||
|     "Aufnahme l<>uft - trotzdem ausschalten?", | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|   }, | ||||
|   { "Press any key to cancel shutdown", | ||||
|     "Taste dr<64>cken um Shutdown abzubrechen", | ||||
|     "", // TODO | ||||
| @@ -667,6 +676,15 @@ const tPhrase Phrases[] = { | ||||
|     "Montage d<>j<EFBFBD> en cours!", | ||||
|     "Redigeringsprosessen er allerede aktiv!", | ||||
|   }, | ||||
|   { "Can't shutdown - option '-s' not given!", | ||||
|     "Shutdown unm<6E>glich - Option '-s' fehlt!", | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|   }, | ||||
|   // Setup parameters: | ||||
|   { "OSD-Language", | ||||
|     "OSD-Sprache", | ||||
| @@ -1139,6 +1157,15 @@ const tPhrase Phrases[] = { | ||||
|     "Bleu", | ||||
|     "Bl<EFBFBD>", | ||||
|   }, | ||||
|   { "Power", | ||||
|     "Ausschalten", | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|     "", // TODO | ||||
|   }, | ||||
|   // Miscellaneous: | ||||
|   { "yes", | ||||
|     "ja", | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  * See the main source file 'vdr.c' for copyright information and | ||||
|  * how to reach the author. | ||||
|  * | ||||
|  * $Id: interface.c 1.42 2001/09/01 07:30:37 kls Exp $ | ||||
|  * $Id: interface.c 1.43 2001/09/01 10:33:03 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #include "interface.h" | ||||
| @@ -356,7 +356,7 @@ void cInterface::QueryKeys(void) | ||||
|   WriteText(1, 5, tr("Press any key on the RC unit")); | ||||
|   Flush(); | ||||
| #ifndef REMOTE_KBD | ||||
|   unsigned char Code = 0; | ||||
|   unsigned char Code = '0'; | ||||
|   unsigned short Address; | ||||
| #endif | ||||
|   for (;;) { | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								keys-pc.conf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								keys-pc.conf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										70
									
								
								vdr.c
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								vdr.c
									
									
									
									
									
								
							| @@ -22,7 +22,7 @@ | ||||
|  * | ||||
|  * The project's page is at http://www.cadsoft.de/people/kls/vdr | ||||
|  * | ||||
|  * $Id: vdr.c 1.65 2001/09/01 08:57:11 kls Exp $ | ||||
|  * $Id: vdr.c 1.66 2001/09/01 11:44:08 kls Exp $ | ||||
|  */ | ||||
|  | ||||
| #define _GNU_SOURCE | ||||
| @@ -303,6 +303,7 @@ int main(int argc, char *argv[]) | ||||
|   int PreviousChannel = cDvbApi::CurrentChannel(); | ||||
|   time_t LastActivity = 0; | ||||
|   int MaxLatencyTime = 0; | ||||
|   bool ForceShutdown = false; | ||||
|  | ||||
|   if (WatchdogTimeout > 0) { | ||||
|      dsyslog(LOG_INFO, "setting watchdog timer to %d seconds", WatchdogTimeout); | ||||
| @@ -427,6 +428,18 @@ int main(int argc, char *argv[]) | ||||
|              case kMenu: Menu = new cMenuMain(ReplayControl); break; | ||||
|              // Viewing Control: | ||||
|              case kOk:   LastChannel = -1; break; // forces channel display | ||||
|              // Power off: | ||||
|              case kPower: isyslog(LOG_INFO, "Power button pressed"); | ||||
|                           if (!Shutdown) { | ||||
|                              Interface->Error(tr("Can't shutdown - option '-s' not given!")); | ||||
|                              break; | ||||
|                              } | ||||
|                           if (cRecordControls::Active()) { | ||||
|                              if (Interface->Confirm(tr("Recording - shut down anyway?"))) | ||||
|                                 ForceShutdown = true; | ||||
|                              } | ||||
|                           LastActivity = 1; // not 0, see below! | ||||
|                           break; | ||||
|              default:    break; | ||||
|              } | ||||
|            } | ||||
| @@ -434,39 +447,40 @@ int main(int argc, char *argv[]) | ||||
|            EITScanner.Process(); | ||||
|            cVideoCutter::Active(); | ||||
|            } | ||||
|         if (!*Interact && !cRecordControls::Active()) { | ||||
|         if (!*Interact && (!cRecordControls::Active() || ForceShutdown)) { | ||||
|            time_t Now = time(NULL); | ||||
|            if (Now - LastActivity > ACTIVITYTIMEOUT) { | ||||
|               // Shutdown: | ||||
|               if (Shutdown && Setup.MinUserInactivity && Now - LastActivity > Setup.MinUserInactivity * 60) { | ||||
|               if (Shutdown && (Setup.MinUserInactivity && Now - LastActivity > Setup.MinUserInactivity * 60 || ForceShutdown)) { | ||||
|                  ForceShutdown = false; | ||||
|                  cTimer *timer = Timers.GetNextActiveTimer(); | ||||
|                  if (timer) { | ||||
|                     time_t Next = timer->StartTime(); | ||||
|                     time_t Delta = Next - Now; | ||||
|                  time_t Next  = timer ? timer->StartTime() : 0; | ||||
|                  time_t Delta = timer ? Next - Now : 0; | ||||
|                  if (timer) | ||||
|                     dsyslog(LOG_INFO, "next timer event at %s", ctime(&Next)); | ||||
|                     if (Delta > Setup.MinEventTimeout * 60) { | ||||
|                        if (!LastActivity) { | ||||
|                           // Apparently the user started VDR manually | ||||
|                           dsyslog(LOG_INFO, "assuming manual start of VDR"); | ||||
|                           LastActivity = Now; | ||||
|                           continue; | ||||
|                           } | ||||
|                        if (WatchdogTimeout > 0) | ||||
|                           signal(SIGALRM, SIG_IGN); | ||||
|                        if (Interface->Confirm(tr("Press any key to cancel shutdown"), SHUTDOWNWAIT, true)) { | ||||
|                           char *cmd; | ||||
|                           asprintf(&cmd, "%s %ld %ld", Shutdown, Next, Delta); | ||||
|                           isyslog(LOG_INFO, "executing '%s'", cmd); | ||||
|                           system(cmd); | ||||
|                           delete cmd; | ||||
|                           } | ||||
|                        else if (WatchdogTimeout > 0) { | ||||
|                           alarm(WatchdogTimeout); | ||||
|                           if (signal(SIGALRM, Watchdog) == SIG_IGN) | ||||
|                              signal(SIGALRM, SIG_IGN); | ||||
|                           } | ||||
|                        LastActivity = Now; // don't try again too soon | ||||
|                  if (!Next || Delta > Setup.MinEventTimeout * 60) { | ||||
|                     if (!LastActivity) { | ||||
|                        // Apparently the user started VDR manually | ||||
|                        dsyslog(LOG_INFO, "assuming manual start of VDR"); | ||||
|                        LastActivity = Now; | ||||
|                        continue; // skip the rest of the housekeeping for now | ||||
|                        } | ||||
|                     if (WatchdogTimeout > 0) | ||||
|                        signal(SIGALRM, SIG_IGN); | ||||
|                     if (Interface->Confirm(tr("Press any key to cancel shutdown"), LastActivity == 1 ? 5 : SHUTDOWNWAIT, true)) { | ||||
|                        char *cmd; | ||||
|                        asprintf(&cmd, "%s %ld %ld", Shutdown, Next, Delta); | ||||
|                        isyslog(LOG_INFO, "executing '%s'", cmd); | ||||
|                        system(cmd); | ||||
|                        delete cmd; | ||||
|                        } | ||||
|                     else if (WatchdogTimeout > 0) { | ||||
|                        alarm(WatchdogTimeout); | ||||
|                        if (signal(SIGALRM, Watchdog) == SIG_IGN) | ||||
|                           signal(SIGALRM, SIG_IGN); | ||||
|                        } | ||||
|                     LastActivity = Now; // don't try again too soon | ||||
|                     continue; // skip the rest of the housekeeping for now | ||||
|                     } | ||||
|                  } | ||||
|               // Disk housekeeping: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user