-rw-r--r-- | core/opiealarm/opiealarm.c | 36 | ||||
-rwxr-xr-x | root/etc/resume-scripts/R46opiealarm | 2 |
2 files changed, 25 insertions, 13 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 @@ -29,9 +29,9 @@ #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 ); @@ -72,9 +72,12 @@ void sig_handler ( int sig ) } 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 ) @@ -138,18 +141,27 @@ 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 ( ); } } @@ -165,13 +177,13 @@ int main ( int argc, char **argv ) // 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; } @@ -261,28 +273,28 @@ static int onac ( void ) } 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"; diff --git a/root/etc/resume-scripts/R46opiealarm b/root/etc/resume-scripts/R46opiealarm index c258047..169dc30 100755 --- a/root/etc/resume-scripts/R46opiealarm +++ b/root/etc/resume-scripts/R46opiealarm @@ -1,5 +1,5 @@ #!/bin/sh # Starts opiealarm, which only runs while the iPaq sleeps # and wakes it up when the RTC alarm goes off. -/opt/QtPalmtop/bin/opiealarm -r +/opt/QtPalmtop/bin/opiealarm -r -a 120 |