summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/opiealarm/opiealarm.c36
-rwxr-xr-xroot/etc/resume-scripts/R46opiealarm2
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 @@
29 #define APMFILE "/proc/apm" 29 #define APMFILE "/proc/apm"
30 30
31FILE *log; // debug only 31FILE *log; // debug only
32 32
33int resume ( void ); 33int resume ( int resuspend );
34int suspend ( void ); 34int suspend ( void );
35int main ( int argc, char **argv ); 35int main ( int argc, char **argv );
36int fork_with_pidfile ( void ); 36int fork_with_pidfile ( void );
37int kill_with_pidfile ( void ); 37int kill_with_pidfile ( void );
@@ -72,9 +72,12 @@ void sig_handler ( int sig )
72} 72}
73 73
74void usage ( void ) 74void usage ( void )
75{ 75{
76 fprintf ( stderr, "Usage: opiealarm -r|-s\n" ); 76 fprintf ( stderr, "Usage: opiealarm -r|-s [-a]\n\n" );
77 fprintf ( stderr, "\t-s\tSuspend mode: set RTC alarm\n" );
78 fprintf ( stderr, "\t-r\tResume mode: kill running opiealarm\n" );
79 fprintf ( stderr, "\t-a <x>\tResuspend in <x> seconds (resume mode)\n\n" );
77 exit ( 1 ); 80 exit ( 1 );
78} 81}
79 82
80int fork_with_pidfile ( void ) 83int fork_with_pidfile ( void )
@@ -138,18 +141,27 @@ void remove_pidfile ( void )
138 141
139int main ( int argc, char **argv ) 142int main ( int argc, char **argv )
140{ 143{
141 int mode = 0; 144 int mode = 0;
145 int ac_resusp = 0;
142 int opt; 146 int opt;
143 147
144 while (( opt = getopt ( argc, argv, "rs" )) != EOF ) { 148 while (( opt = getopt ( argc, argv, "a:rs" )) != EOF ) {
145 switch ( opt ) { 149 switch ( opt ) {
146 case 's': 150 case 's':
147 mode = 's'; 151 mode = 's';
148 break; 152 break;
149 case 'r': 153 case 'r':
150 mode = 'r'; 154 mode = 'r';
151 break; 155 break;
156 case 'a':
157 ac_resusp = atoi ( optarg );
158 if ( ac_resusp < 30 ) {
159 ac_resusp = 120;
160
161 fprintf ( stderr, "Warning: resuspend timeout must be >= 30 sec. -- now set to 120 sec\n" );
162 }
163 break;
152 default: 164 default:
153 usage ( ); 165 usage ( );
154 } 166 }
155 } 167 }
@@ -165,13 +177,13 @@ int main ( int argc, char **argv )
165 // kill running opiealarm 177 // kill running opiealarm
166 opiealarm_was_running = kill_with_pidfile ( ); 178 opiealarm_was_running = kill_with_pidfile ( );
167 remove_pidfile ( ); 179 remove_pidfile ( );
168 180
169 if ( mode == 'r' ) 181 switch ( mode ) {
170 return resume ( ); 182 case 'r': return resume ( ac_resusp );
171 else 183 case 's':
172 return suspend ( ); 184 default : return suspend ( );
173 185 }
174 return 0; 186 return 0;
175 } 187 }
176 188
177 189
@@ -261,28 +273,28 @@ static int onac ( void )
261 } 273 }
262 return on; 274 return on;
263} 275}
264 276
265int resume ( void ) 277int resume ( int resuspend )
266{ 278{
267 FILE *fp; 279 FILE *fp;
268 280
269 // re-suspend when on AC (optional) when woken up via RTC 281 // re-suspend when on AC (optional) when woken up via RTC
270 282
271 if ( !opiealarm_was_running ) { // opiealarm -s got it's RTC signal -> wake up by RTC 283 if ( !opiealarm_was_running ) { // opiealarm -s got it's RTC signal -> wake up by RTC
272 if ( onac ( )) { 284 if ( resuspend && onac ( )) {
273 time_t start, now; 285 time_t start, now;
274 char *argv [4]; 286 char *argv [4];
275 287
276 if ( !fork_with_pidfile ( )) 288 if ( !fork_with_pidfile ( ))
277 return 4; 289 return 4;
278 290
279 // sleep 120sec (not less!) 291 // sleep <resuspend> sec (not less!)
280 time ( &start ); 292 time ( &start );
281 do { 293 do {
282 sleep ( 1 ); 294 sleep ( 1 );
283 time ( &now ); 295 time ( &now );
284 } while (( now - start ) < 120 ); 296 } while (( now - start ) < resuspend );
285 297
286 if ( onac ( )) { // still on ac 298 if ( onac ( )) { // still on ac
287 // system() without fork 299 // system() without fork
288 argv[0] = "qcop"; 300 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 @@
1#!/bin/sh 1#!/bin/sh
2# Starts opiealarm, which only runs while the iPaq sleeps 2# Starts opiealarm, which only runs while the iPaq sleeps
3# and wakes it up when the RTC alarm goes off. 3# and wakes it up when the RTC alarm goes off.
4 4
5/opt/QtPalmtop/bin/opiealarm -r 5/opt/QtPalmtop/bin/opiealarm -r -a 120