author | sandman <sandman> | 2002-06-09 23:47:03 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-06-09 23:47:03 (UTC) |
commit | c479d93f2a8d7de836ef83c205f1a1789e49aa9a (patch) (unidiff) | |
tree | 7fbb3e84e9e2278af99c8ed532988c72cdd9d338 /core | |
parent | 1c56ab829f04ea5b127c1c632cec330e47bca524 (diff) | |
download | opie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.zip opie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.tar.gz opie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.tar.bz2 |
Made resuspend timeout a command line option (-a <seconds>)
-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 @@ | |||
27 | 27 | ||
28 | #define PIDFILE "/var/run/opiealarm.pid" | 28 | #define PIDFILE "/var/run/opiealarm.pid" |
29 | #define APMFILE "/proc/apm" | 29 | #define APMFILE "/proc/apm" |
30 | 30 | ||
31 | FILE *log; // debug only | 31 | FILE *log; // debug only |
32 | 32 | ||
33 | int resume ( void ); | 33 | int resume ( int resuspend ); |
34 | int suspend ( void ); | 34 | int suspend ( void ); |
35 | int main ( int argc, char **argv ); | 35 | int main ( int argc, char **argv ); |
36 | int fork_with_pidfile ( void ); | 36 | int fork_with_pidfile ( void ); |
37 | int kill_with_pidfile ( void ); | 37 | int kill_with_pidfile ( void ); |
38 | void remove_pidfile ( void ); | 38 | void remove_pidfile ( void ); |
39 | void usage ( void ); | 39 | void usage ( void ); |
@@ -70,13 +70,16 @@ void sig_handler ( int sig ) | |||
70 | remove_pidfile ( ); | 70 | remove_pidfile ( ); |
71 | exit ( 0 ); | 71 | exit ( 0 ); |
72 | } | 72 | } |
73 | 73 | ||
74 | void usage ( void ) | 74 | void 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 | ||
80 | int fork_with_pidfile ( void ) | 83 | int fork_with_pidfile ( void ) |
81 | { | 84 | { |
82 | FILE *fp; | 85 | FILE *fp; |
@@ -136,22 +139,31 @@ void remove_pidfile ( void ) | |||
136 | } | 139 | } |
137 | 140 | ||
138 | 141 | ||
139 | int main ( int argc, char **argv ) | 142 | int 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 | } |
156 | 168 | ||
157 | if ( geteuid ( ) != 0 ) { | 169 | if ( geteuid ( ) != 0 ) { |
@@ -163,17 +175,17 @@ int main ( int argc, char **argv ) | |||
163 | usage ( ); | 175 | usage ( ); |
164 | 176 | ||
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 | ||
178 | int suspend ( void ) | 190 | int suspend ( void ) |
179 | { | 191 | { |
@@ -259,32 +271,32 @@ static int onac ( void ) | |||
259 | 271 | ||
260 | fclose ( fp ); | 272 | fclose ( fp ); |
261 | } | 273 | } |
262 | return on; | 274 | return on; |
263 | } | 275 | } |
264 | 276 | ||
265 | int resume ( void ) | 277 | int 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"; |
289 | argv[1] = "QPE/Desktop"; | 301 | argv[1] = "QPE/Desktop"; |
290 | argv[2] = "suspend()"; | 302 | argv[2] = "suspend()"; |