-rw-r--r-- | core/opiealarm/opiealarm.c | 36 |
1 files changed, 24 insertions, 12 deletions
diff --git a/core/opiealarm/opiealarm.c b/core/opiealarm/opiealarm.c index 3a06236..ac98832 100644 --- a/core/opiealarm/opiealarm.c +++ b/core/opiealarm/opiealarm.c @@ -27,13 +27,13 @@ #define PIDFILE "/var/run/opiealarm.pid" #define APMFILE "/proc/apm" FILE *log; // debug only -int resume ( void ); +int resume ( int resuspend ); int suspend ( void ); int main ( int argc, char **argv ); int fork_with_pidfile ( void ); int kill_with_pidfile ( void ); void remove_pidfile ( void ); void usage ( void ); @@ -70,13 +70,16 @@ void sig_handler ( int sig ) remove_pidfile ( ); exit ( 0 ); } void usage ( void ) { - fprintf ( stderr, "Usage: opiealarm -r|-s\n" ); + fprintf ( stderr, "Usage: opiealarm -r|-s [-a]\n\n" ); + fprintf ( stderr, "\t-s\tSuspend mode: set RTC alarm\n" ); + fprintf ( stderr, "\t-r\tResume mode: kill running opiealarm\n" ); + fprintf ( stderr, "\t-a <x>\tResuspend in <x> seconds (resume mode)\n\n" ); exit ( 1 ); } int fork_with_pidfile ( void ) { FILE *fp; @@ -136,22 +139,31 @@ void remove_pidfile ( void ) } int main ( int argc, char **argv ) { int mode = 0; + int ac_resusp = 0; int opt; - while (( opt = getopt ( argc, argv, "rs" )) != EOF ) { + while (( opt = getopt ( argc, argv, "a:rs" )) != EOF ) { switch ( opt ) { case 's': mode = 's'; break; case 'r': mode = 'r'; break; + case 'a': + ac_resusp = atoi ( optarg ); + if ( ac_resusp < 30 ) { + ac_resusp = 120; + + fprintf ( stderr, "Warning: resuspend timeout must be >= 30 sec. -- now set to 120 sec\n" ); + } + break; default: usage ( ); } } if ( geteuid ( ) != 0 ) { @@ -163,17 +175,17 @@ int main ( int argc, char **argv ) usage ( ); // kill running opiealarm opiealarm_was_running = kill_with_pidfile ( ); remove_pidfile ( ); - if ( mode == 'r' ) - return resume ( ); - else - return suspend ( ); - + switch ( mode ) { + case 'r': return resume ( ac_resusp ); + case 's': + default : return suspend ( ); + } return 0; } int suspend ( void ) { @@ -259,32 +271,32 @@ static int onac ( void ) fclose ( fp ); } return on; } -int resume ( void ) +int resume ( int resuspend ) { FILE *fp; // re-suspend when on AC (optional) when woken up via RTC if ( !opiealarm_was_running ) { // opiealarm -s got it's RTC signal -> wake up by RTC - if ( onac ( )) { + if ( resuspend && onac ( )) { time_t start, now; char *argv [4]; if ( !fork_with_pidfile ( )) return 4; - // sleep 120sec (not less!) + // sleep <resuspend> sec (not less!) time ( &start ); do { sleep ( 1 ); time ( &now ); - } while (( now - start ) < 120 ); + } while (( now - start ) < resuspend ); if ( onac ( )) { // still on ac // system() without fork argv[0] = "qcop"; argv[1] = "QPE/Desktop"; argv[2] = "suspend()"; |