From 9f42c33ef6793482a5c2515f9a87c13c0d189c60 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 25 Feb 2007 18:00:00 +0100 Subject: =?UTF-8?q?Version=201.5.1=20-=20Added=20cDevice::HasCi()=20so=20t?= =?UTF-8?q?hat=20devices=20with=20Common=20Interface=20can=20be=20avoided?= =?UTF-8?q?=20=20=20when=20tuning=20to=20an=20FTA=20channel,=20thus=20pres?= =?UTF-8?q?erving=20the=20CAM=20resources=20even=20on=20budget=20=20=20DVB?= =?UTF-8?q?=20cards=20(suggested=20by=20Petri=20Helin).=20-=20Fixed=20i18n?= =?UTF-8?q?=20characters=20for=20the=20Hungarian=20texts=20(thanks=20to=20?= =?UTF-8?q?Thomas=20G=C3=BCnther).=20-=20Now=20using=20cPipe=20instead=20o?= =?UTF-8?q?f=20popen()=20in=20cCommand::Execute()=20to=20avoid=20problems?= =?UTF-8?q?=20=20=20with=20open=20file=20handles=20when=20starting=20backg?= =?UTF-8?q?round=20commands=20(thanks=20to=20Reinhard=20=20=20Nissl).=20-?= =?UTF-8?q?=20Removed=20'assert(0)'=20from=20cDvbSpuDecoder::setTime()=20(?= =?UTF-8?q?thanks=20to=20Marco=20Schl=C3=BC=C3=9Fler).=20-=20Fixed=20a=20p?= =?UTF-8?q?ossible=20crash=20when=20loading=20an=20invalid=20XPM=20file=20?= =?UTF-8?q?(thanks=20to=20Martin=20Wache).=20-=20Updated=20satellite=20nam?= =?UTF-8?q?es=20in=20'sources.conf'=20(thanks=20to=20Thilo=20Wunderlich).?= =?UTF-8?q?=20-=20Adapted=20'libsi'=20to=20DVB-S2=20(thanks=20to=20Marco?= =?UTF-8?q?=20Schl=C3=BC=C3=9Fler).=20-=20Fixed=20handling=20error=20statu?= =?UTF-8?q?s=20in=20cDvbTuner::GetFrontendStatus()=20(thanks=20to=20=20=20?= =?UTF-8?q?Reinhard=20Nissl).=20-=20Shutdown=20handling=20has=20been=20rew?= =?UTF-8?q?ritten=20(thanks=20to=20Udo=20Richter).=20-=20Plugins=20can=20n?= =?UTF-8?q?ow=20implement=20the=20new=20function=20WakeupTime()=20to=20req?= =?UTF-8?q?uest=20VDR=20to=20wake=20=20=20up=20at=20a=20particular=20time?= =?UTF-8?q?=20(thanks=20to=20Udo=20Richter).=20-=20The=20HUP=20signal=20no?= =?UTF-8?q?w=20forces=20a=20restart=20of=20VDR=20(thanks=20to=20Udo=20Rich?= =?UTF-8?q?ter).=20-=20cThread::EmergencyExit()=20has=20been=20replaced=20?= =?UTF-8?q?by=20ShutdownHandler.RequestEmergencyExit().=20-=20Several=20re?= =?UTF-8?q?ferences=20to=20"button"=20in=20a=20remote=20control=20context?= =?UTF-8?q?=20have=20been=20changed=20=20=20to=20"key"=20(based=20on=20a?= =?UTF-8?q?=20report=20from=20Marko=20M=C3=A4kel=C3=A4=20regarding=20the?= =?UTF-8?q?=20"Menu=20button=20closes"=20=20=20text).=20The=20"MenuButtonC?= =?UTF-8?q?loses"=20parameter=20in=20'setup.conf'=20has=20therefore=20been?= =?UTF-8?q?=20=20=20renamed=20to=20"MenuKeyCloses",=20accordingly.=20This?= =?UTF-8?q?=20will=20result=20in=20an=20"unknown=20config=20=20=20paramete?= =?UTF-8?q?r:=20MenuButtonCloses"=20error=20message=20in=20the=20log=20fil?= =?UTF-8?q?e,=20so=20you=20may=20want=20to=20=20=20remove=20that=20entry?= =?UTF-8?q?=20from=20your=20'setup.conf'=20file.=20-=20Simplified=20the=20?= =?UTF-8?q?error=20handling=20in=20cDvbTuner::GetFrontendStatus()=20(based?= =?UTF-8?q?=20on=20a=20=20=20discussion=20with=20Reinhard=20Nissl).=20-=20?= =?UTF-8?q?Updated=20the=20Finnish=20OSD=20texts=20(thanks=20to=20Rolf=20A?= =?UTF-8?q?hrenberg).=20-=20Increased=20the=20maximum=20number=20of=20DVB?= =?UTF-8?q?=20devices=20to=208=20(thanks=20to=20Rolf=20Ahrenberg).=20-=20T?= =?UTF-8?q?he=20new=20Setup=20parameter=20"Channel=20entry=20timeout"=20ca?= =?UTF-8?q?n=20be=20used=20to=20customize=20the=20time=20=20=20since=20the?= =?UTF-8?q?=20last=20keypress=20until=20a=20numerically=20entered=20channe?= =?UTF-8?q?l=20number=20is=20considered=20=20=20complete,=20and=20the=20ch?= =?UTF-8?q?annel=20is=20switched=20(suggested=20by=20Helmut=20Auer).=20Set?= =?UTF-8?q?ting=20this=20=20=20parameter=20to=200=20turns=20off=20the=20au?= =?UTF-8?q?tomatic=20channel=20switching,=20and=20the=20user=20will=20=20?= =?UTF-8?q?=20have=20to=20confirm=20the=20entry=20by=20pressing=20the=20"O?= =?UTF-8?q?k"=20key.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- shutdown.h | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 shutdown.h (limited to 'shutdown.h') diff --git a/shutdown.h b/shutdown.h new file mode 100644 index 0000000..4dff8ea --- /dev/null +++ b/shutdown.h @@ -0,0 +1,112 @@ +/* + * shutdown.h: Handling of shutdown and inactivity + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * Original version written by Udo Richter . + * + * $Id: shutdown.h 1.1 2007/02/24 17:23:59 kls Exp $ + */ + +#ifndef __SHUTDOWN_H +#define __SHUTDOWN_H + +#include + +class cCountdown { +private: + time_t timeout; ///< 5-minute countdown timer + int counter; ///< last shown time in 10s units + bool timedOut; ///< countdown did run down to 0 and was not canceled + const char *message; ///< message to display, %s is placeholder for time +public: + cCountdown(void); + void Start(const char *Message, int Seconds); + ///< Start the 5 minute shutdown warning countdown. + void Cancel(void); + ///< Cancel the 5 minute shutdown warning countdown. + bool Done(void); + ///< Check if countdown timer has run out without canceling. + operator bool(void) const { return timeout != 0; } + ///< Check if countdown is running. + bool Update(void); + ///< Update status display of the countdown. + ///< Returns true on actual update. + }; + +class cShutdownHandler { +private: + time_t activeTimeout; + ///< Time when VDR will become non-interactive. 0 means never. + time_t retry; + ///< Time for retrying the shutdown. + char *shutdownCommand; + ///< Command for shutting down VDR. + int exitCode; + ///< Exit code, if VDR exit was requested, or -1 if not requested. + bool emergencyExitRequested; + ///< The requested exit is an emergency exit. +public: + cCountdown countdown; + cShutdownHandler(void); + ~cShutdownHandler(); + void Exit(int ExitCode) { exitCode = ExitCode; } + ///< Set VDR exit code and initiate end of VDR main loop. + ///< This will exit VDR without any confirmation. + bool DoExit(void) { return exitCode >= 0; } + ///< Check if an exit code was set, and VDR should exit. + int GetExitCode(void) { return exitCode >= 0 ? exitCode : 0; } + ///< Get the currently set exit code of VDR. + bool EmergencyExitRequested(void) { return emergencyExitRequested; } + ///< Returns true if an emergency exit was requested. + void RequestEmergencyExit(void); + ///< Requests an emergency exit of the VDR main loop. + void CheckManualStart(int ManualStart); + ///< Check whether the next timer is in ManualStart time window. + ///< If yes, assume non-interactive use. + void SetShutdownCommand(const char *ShutdownCommand); + ///< Set the command string for shutdown command. + void CallShutdownCommand(time_t WakeupTime, int Channel, const char *File, bool UserShutdown); + ///< Call the shutdown command with the given parameters. + bool IsUserInactive(time_t AtTime = 0) { return activeTimeout && activeTimeout <= (AtTime ? AtTime : time(NULL)); } + ///< Check whether VDR is in interactive mode or non-interactive mode (waiting for shutdown). + ///< AtTime checks whether VDR will probably be inactive at that time. + time_t GetUserInactiveTime(void) { return activeTimeout; } + ///< Time when user will become non-inactive, or 0 if never. + void SetUserInactiveTimeout(int Seconds = -1, bool Force = false); + ///< Set the time when VDR will switch into non-interactive mode or power down. + ///< -1 means Setup.MinUserInactivity in the future. + ///< Otherwise, seconds in the future. + ///< If MinUserInactivity = 0 and Force = false, Seconds is ignored and VDR will + ///< stay interactive forever. + void SetUserInactive(void) { SetUserInactiveTimeout(0, true); } + ///< Set VDR manually into non-interactive mode. + bool Retry(time_t AtTime = 0) { return retry <= (AtTime ? AtTime : time(NULL)); } + ///< Check whether its time to re-try the shutdown. + ///< AtTime checks whether VDR will probably be inactive at that time. + time_t GetRetry(void) { return retry; } + ///< Time when shutdown retry block ends. + void SetRetry(int Seconds) { retry = time(NULL) + Seconds; } + ///< Set shutdown retry so that VDR will not try to automatically shut down + ///< within Seconds. + bool ConfirmShutdown(bool Ask); + ///< Check for background activity that blocks shutdown. + ///< Returns immediately and without user interaction if Ask = false. + ///< Asks for confirmation if Ask = true. + ///< Returns true if ready for shutdown. + bool ConfirmRestart(bool Ask); + ///< Check for background activity that blocks restart. + ///< Returns immediately and without user interaction if Ask = false. + ///< Asks for confirmation if Ask = true. + ///< Returns true if ready for restart. + bool DoShutdown(bool Force); + ///< Call the shutdown script with data of the next pending timer. + ///< Fails if Force = false and a timer is running or within MinEventTimeout. + ///< Always calls shutdown on Force = true. + ///< Returns true on success. + }; + +extern cShutdownHandler ShutdownHandler; + +#endif -- cgit v1.2.3