ipaq-sleep 0.9: Remove supposed fixes for all bugs except the most prominent one.
authorPaul Sokolovsky <pmiscml@gmail.com>
Mon, 31 Dec 2007 16:03:00 +0000 (16:03 +0000)
committerPaul Sokolovsky <pmiscml@gmail.com>
Mon, 31 Dec 2007 16:03:00 +0000 (16:03 +0000)
* Apparently, it was big, big mistake to touch this code. Code Police, thy curse
can't be lifted, let Perl be my witness!
* Leave only obvious fix (off-by one error) for #3540.
* Fixes #3586. (Well, it should. Noone really have reported that ipaq-sleep
does *not* use 100% of CPU time during its normal course of action.)
* This puts average latency of backlight coming back up after it was power-saved
and touch/keypress happens to 1 second (which was the matter of other fixes,
which reduced latency to ~0.2s).

packages/ipaq-sleep/files/unbreak.patch
packages/ipaq-sleep/ipaq-sleep_0.9.bb

index 5884bf6..5116e99 100644 (file)
@@ -1,39 +1,5 @@
 --- a/ipaq-sleep.c.org 2006-01-20 19:43:14.000000000 +0200
 +++ a/ipaq-sleep.c     2007-12-26 06:26:32.000000000 +0200
-@@ -27,14 +27,14 @@
- #include <X11/Xlib.h>
- #include <X11/extensions/scrnsaver.h>
--#undef DEBUG
-+#define DEBUG
- int irqs[MAX_IRQS]; /* irqs to examine have a value of 1 */
- long v, irq_count[MAX_IRQS]; /* holds previous counters of the irq's */
- int sleep_idle=3 * 60; /* in seconds */
- int dim_idle=1 * 60; /* in seconds */
- int daemonize=1;
--int sleep_time = DEFAULT_SLEEP_TIME;
-+int sleep_time = 1; //DEFAULT_SLEEP_TIME;
- int cpu=1;
- int apm=1;
- int dimming=1;
-@@ -57,6 +57,7 @@
- Window root;              /* The root window (which holds MIT_SCREEN_SAVER
-                              info). */
- XScreenSaverInfo *info;           /* The MIT_SCREEN_SAVER info object. */
-+int xfd = -1;
- int init() { 
-       int first_event, first_error;
-@@ -69,6 +70,8 @@
-       else {
-               XScreenSaverQueryExtension(dpy, &first_event, &first_error);
-               root = DefaultRootWindow(dpy);
-+              XSelectInput(dpy, root, KeyPressMask | KeyReleaseMask | PointerMotionMask);
-+              xfd = ConnectionNumber(dpy);
-               info = XScreenSaverAllocInfo();
- #ifdef DEBUG
-               if (debug) 
 @@ -108,7 +111,7 @@
        if (fgets (buf, 32, input))
        {
          else
            r = -1;
        }
-@@ -189,7 +192,7 @@
-                               if (strcmp(func, Lflag)==0) {
-                                       dim_level=atoi(value);
- #ifdef DEBUG
--                                      if (debug) fprintf(dgfp, "dim_idle=%d\n", dim_idle);
-+                                      if (debug) fprintf(dgfp, "dim_level=%d\n", dim_idle);
- #endif
-                               }
-                               if (strcmp(func, aflag)==0) {
-@@ -282,6 +285,12 @@
-                                               dimming=0;
-                                       }
-                               }
-+                              if (strcmp(func, Lflag)==0) {
-+                                      dim_level=atoi(value);
-+#ifdef DEBUG
-+                                      if (debug) fprintf(dgfp, "dim_level=%d\n", dim_idle);
-+#endif
-+                              }
-                               if (strcmp(func, aflag)==0) {
-                                       apm=atoi(value);
- #ifdef DEBUG
-@@ -487,8 +496,11 @@
-               return(1);
-       }
-+      if (info.ac_line_status == AC_LINE_STATUS_UNKNOWN || info.battery_status == BATTERY_STATUS_UNKNOWN)
-+              return(0);
-+
- #ifdef DEBUG
--      if (debug) fprintf(dgfp,"You are NOT on external power. Its all good.....\n");
-+      if (debug) fprintf(dgfp,"You are NOT on external power. Line status: %d, battery status: %d.\n", info.ac_line_status, info.battery_status);
- #endif
-       runtime = info.battery_time;
-       if (apm && runtime >= 0 && runtime < battery_level)
-@@ -587,12 +599,17 @@
-       
- }             
-+/* X idle status checked every sleep_time,
-+  other boring and expensive stuff - sleep_time * CYCLE_INTERLEAVE */
-+#define CYCLE_INTERLEAVE 10
-+
- /* Keep checking the interrupts. As long as there is activity, do nothing. */
- void main_loop (void) {
--      int activity, i, total_unused=0, apm_active=0, old_apm=0;
-+      int activity, i, apm_active=0, old_apm=0, last_active = time(NULL);
-       int dimmed=0, current_bl=32;
-       int newIdle, oldIdle, lastIdle, oldTime, newTime;
-       char iline[64];
-+      int cycle = 0;
-       
-       Time idleTime; /* milliseconds */
-         FILE *f;
-@@ -656,6 +673,9 @@
-                       if (dimming  && !dimmed && !apm_active) {
-                               if ((newIdle-oldIdle)>=dim_idle) {
-                                       current_bl = read_backlight ();
-+#ifdef DEBUG
-+                                      if (debug) fprintf(dgfp, "Dim timeout. Current bl value=%d, setting to=%d\n", current_bl, dim_level);
-+#endif
-                                       set_backlight (dim_level);
-                                       dimmed=1;
-                               }
-@@ -664,6 +684,11 @@
-                       lastIdle=newIdle;
-       
-               }
-+              
-+              cycle++;
-+              cycle %= CYCLE_INTERLEAVE;
-+              if (cycle)
-+                      goto sleep;
-               apm_active=check_apm();
-               if (apm_active) {
-@@ -698,17 +723,15 @@
-               }
-               if (activity) {
--                      total_unused = 0;
-+                      last_active = time(NULL);
-               }
-               else {
--                      total_unused += sleep_time;
--                      if (total_unused >= sleep_idle && sleeping) {
-+                      if (time(NULL) - last_active >= sleep_idle && sleeping) {
-                               
-                               if (check_cpu() || check_PID() || probe_IRQs()) {
- #ifdef DEBUG
-                                       if (debug) fprintf(dgfp,"You cannot sleep at this time! Not going to sleep....\n");
- #endif
--                                      total_unused=0;
-                                       oldIdle=newIdle;
-                               }
-                               else {
-@@ -718,24 +741,37 @@
-                                       do_sleep ();
-                                       set_backlight (current_bl);
-                                       dimmed=0;                                       
--                                      total_unused=0;
-+                                      last_active = time(NULL);
-                               }
-                       }
-                       
-               }
-+sleep:
- #ifdef DEBUG          
-               if (debug) fflush(dgfp);
- #endif
--              sleep(sleep_time);
-+              {
-+              struct timeval tv;
-+              fd_set readset;
-+              FD_ZERO(&readset);
-+              if (xfd != -1)
-+                  FD_SET(xfd, &readset);
-+              tv.tv_sec = 1;
-+              tv.tv_usec = 0;
-+#ifdef DEBUG          
-+              if (debug) fprintf(dgfp, "select=%d, tv_sec=%d, tv_usec=%d\n", select(xfd+1, &readset, NULL, NULL, &tv), tv.tv_sec, tv.tv_usec);
-+#endif
-+              }
-+              
-               
-               newTime=time(NULL);
--              if (oldTime && newTime-sleep_time > oldTime +1) {
-+              if (oldTime && newTime-sleep_time > oldTime +2) {
- #ifdef DEBUG
-                       if (debug)
--                        fprintf(stderr, "%i sec sleep; resetting timer and resetting dimmer...", (int)(newTime - oldTime));
-+                        fprintf(dgfp, "%i sec sleep, apparently, was suspended; resetting timer and resetting dimmer...", (int)(newTime - oldTime));
- #endif
--                      total_unused=0;
-+                      last_active = time(NULL);
-                       
-                       query_idle(&idleTime);
-                       lastIdle=oldIdle=(int)idleTime;
index 005c606..a3fcbdf 100644 (file)
@@ -10,7 +10,7 @@ SRC_URI_append = " file://init-script-busybox.patch;patch=1"
 SRC_URI_append = " file://install-fix.patch;patch=1"
 SRC_URI_append = " file://unbreak.patch;patch=1"
 
-PR = "r5"
+PR = "r6"
 
 DESCRIPTION = "Automatic sleep/suspend control daemon"