summaryrefslogtreecommitdiff
authorsandman <sandman>2002-06-09 23:47:03 (UTC)
committer sandman <sandman>2002-06-09 23:47:03 (UTC)
commitc479d93f2a8d7de836ef83c205f1a1789e49aa9a (patch) (unidiff)
tree7fbb3e84e9e2278af99c8ed532988c72cdd9d338
parent1c56ab829f04ea5b127c1c632cec330e47bca524 (diff)
downloadopie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.zip
opie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.tar.gz
opie-c479d93f2a8d7de836ef83c205f1a1789e49aa9a.tar.bz2
Made resuspend timeout a command line option (-a <seconds>)
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
@@ -17,33 +17,33 @@
17#include <fcntl.h> 17#include <fcntl.h>
18#include <unistd.h> 18#include <unistd.h>
19#include <errno.h> 19#include <errno.h>
20#include <time.h> 20#include <time.h>
21#include <stdlib.h> 21#include <stdlib.h>
22#include <syslog.h> 22#include <syslog.h>
23#include <signal.h> 23#include <signal.h>
24#include <errno.h> 24#include <errno.h>
25#include <string.h> 25#include <string.h>
26 26
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
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 );
38void remove_pidfile ( void ); 38void remove_pidfile ( void );
39void usage ( void ); 39void usage ( void );
40void sig_handler ( int sig ); 40void sig_handler ( int sig );
41void error_msg_and_die ( int perr, const char *msg ); 41void error_msg_and_die ( int perr, const char *msg );
42int onac ( void ); 42int onac ( void );
43 43
44static int opiealarm_was_running; 44static int opiealarm_was_running;
45 45
46 46
47void log_msg ( const char *msg ) 47void log_msg ( const char *msg )
48{ 48{
49 if ( log ) { 49 if ( log ) {
@@ -60,33 +60,36 @@ void error_msg_and_die ( int perr, const char *msg )
60 60
61 while ( 1 ) // pretend we are waiting on RTC, so opiealarm -r can kill us 61 while ( 1 ) // pretend we are waiting on RTC, so opiealarm -r can kill us
62 sleep ( 1 ); 62 sleep ( 1 );
63} 63}
64 64
65 65
66void sig_handler ( int sig ) 66void sig_handler ( int sig )
67{ 67{
68 log_msg ( "GOT SIGNAL -> EXITING\n" ); 68 log_msg ( "GOT SIGNAL -> EXITING\n" );
69 fclose ( log ); 69 fclose ( log );
70 remove_pidfile ( ); 70 remove_pidfile ( );
71 exit ( 0 ); 71 exit ( 0 );
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 )
81{ 84{
82 FILE *fp; 85 FILE *fp;
83 pid_t pid; 86 pid_t pid;
84 87
85 pid = fork ( ); 88 pid = fork ( );
86 89
87 if ( pid > 0 ) 90 if ( pid > 0 )
88 exit ( 0 ); 91 exit ( 0 );
89 else if ( pid < 0 ) { 92 else if ( pid < 0 ) {
90 perror ( "forking failed" ); 93 perror ( "forking failed" );
91 return 0; 94 return 0;
92 } 95 }
@@ -126,64 +129,73 @@ int kill_with_pidfile ( void )
126 } 129 }
127 return 0; 130 return 0;
128} 131}
129 132
130void remove_pidfile ( void ) 133void remove_pidfile ( void )
131{ 134{
132 unlink ( PIDFILE ); 135 unlink ( PIDFILE );
133 136
134 signal ( SIGTERM, SIG_DFL ); 137 signal ( SIGTERM, SIG_DFL );
135 signal ( SIGINT, SIG_DFL ); 138 signal ( SIGINT, SIG_DFL );
136} 139}
137 140
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 }
156 168
157 if ( geteuid ( ) != 0 ) { 169 if ( geteuid ( ) != 0 ) {
158 fprintf ( stderr, "You need root priviledges to run opiealarm." ); 170 fprintf ( stderr, "You need root priviledges to run opiealarm." );
159 return 2; 171 return 2;
160 } 172 }
161 173
162 if ( !mode ) 174 if ( !mode )
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
178int suspend ( void ) 190int suspend ( void )
179{ 191{
180 FILE *fp; 192 FILE *fp;
181 char buf [64]; 193 char buf [64];
182 time_t t; 194 time_t t;
183 struct tm *tm; 195 struct tm *tm;
184 int fd; 196 int fd;
185 197
186 198
187 if ( !fork_with_pidfile ( )) 199 if ( !fork_with_pidfile ( ))
188 return 3; 200 return 3;
189 201
@@ -249,52 +261,52 @@ int suspend ( void )
249static int onac ( void ) 261static int onac ( void )
250{ 262{
251 FILE *fp; 263 FILE *fp;
252 int on = 0; 264 int on = 0;
253 265
254 if (( fp = fopen ( APMFILE, "r" ))) { 266 if (( fp = fopen ( APMFILE, "r" ))) {
255 int ac = 0; 267 int ac = 0;
256 268
257 if ( fscanf ( fp, "%*[^ ] %*d.%*d 0x%*x 0x%x 0x%*x 0x%*x %*d%% %*i %*c", &ac ) == 1 ) 269 if ( fscanf ( fp, "%*[^ ] %*d.%*d 0x%*x 0x%x 0x%*x 0x%*x %*d%% %*i %*c", &ac ) == 1 )
258 on = ( ac == 0x01 ) ? 1 : 0; 270 on = ( ac == 0x01 ) ? 1 : 0;
259 271
260 fclose ( fp ); 272 fclose ( fp );
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";
289 argv[1] = "QPE/Desktop"; 301 argv[1] = "QPE/Desktop";
290 argv[2] = "suspend()"; 302 argv[2] = "suspend()";
291 argv[3] = 0; 303 argv[3] = 0;
292 304
293 // hard coded for now ...but needed 305 // hard coded for now ...but needed
294 setenv ( "LOGNAME", "root", 1 ); 306 setenv ( "LOGNAME", "root", 1 );
295 setenv ( "HOME", "/root", 1 ); 307 setenv ( "HOME", "/root", 1 );
296 setenv ( "LD_LIBRARY_PATH", "/opt/QtPalmtop/lib", 1 ); 308 setenv ( "LD_LIBRARY_PATH", "/opt/QtPalmtop/lib", 1 );
297 setenv ( "QTDIR", "/opt/QtPalmtop", 1 ); 309 setenv ( "QTDIR", "/opt/QtPalmtop", 1 );
298 310
299 remove_pidfile ( ); 311 remove_pidfile ( );
300 312
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