On Fri 26. Aug 13:07:13, Stefan Seyfried wrote:
> Hi,
> 
> i noticed, that wile discharging the battery, i get a battery event
> about every minute, but the battery is polled anyway:
> 
> time    event
> 00:00   polling battery, 100%
> 00:30   ACPI battery event: 99%
> 01:00   polling battery, 99% "battery should not be polled that often"
> 01:30   ACPI battery event: 98%
> 02:00   polling battery, 98% "battery should not be polled that often"
> ..
> you get it. We should not poll, if we had an event before or better: on
> every battery polling, we should reset the timeout, regardless if we
> polled because of a timeout or because of an event.

That's ok.

> 
> This (compile-tested, not runtime) patch could fix this:
> 
> Index: daemon/acpi.cpp
> ===================================================================
> RCS file: /cvsroot/powersave/powersave/daemon/acpi.cpp,v
> retrieving revision 1.40
> diff -u -p -r1.40 acpi.cpp
> --- daemon/acpi.cpp     25 Aug 2005 13:07:30 -0000      1.40
> +++ daemon/acpi.cpp     26 Aug 2005 11:01:00 -0000
> @@ -218,6 +218,7 @@ int ACPI_Interface::handleHWEventRequest
> 
>                 checkACStateChanges();
>                 checkBatteryStateChanges();
> +               PM_Interface::msecs_last_battery_read = 0;
>                 // WTF is this good for? -> This is to avoid polling of
> battery
>                 // set /proc/acpi/battery/*/alarm and wait for events in
> /proc/acpi/event
> 
> Index: daemon/powersaved.h
> ===================================================================
> RCS file: /cvsroot/powersave/powersave/daemon/powersaved.h,v
> retrieving revision 1.41
> diff -u -p -r1.41 powersaved.h
> --- daemon/powersaved.h 21 Aug 2005 19:41:08 -0000      1.41
> +++ daemon/powersaved.h 26 Aug 2005 11:01:00 -0000
> @@ -117,7 +117,7 @@ class PM_Interface{
>         unsigned long msecs_cpu_idle;
> 
>         // sum up time battery/temperature was not polled
> -       unsigned msecs_last_battery_read;
> +//     unsigned msecs_last_battery_read;
>         unsigned msecs_last_temperature_read;
> 
>         /* this is to remember pid of daemon for children
> @@ -149,6 +149,7 @@ class PM_Interface{
>         DBUS_ERROR handleActionMessage( DBusMessage *msg );
> 
>   protected:
> +       unsigned msecs_last_battery_read;
>         int cooling_mode_supported;
>         int throttling_supported;
>         int thermal_trip_points_supported;
> 
> 
> I am not sure about the protected/private header stuff, and if it is
> enough or if i'd better create an "void touch_battery()"-Function in
> class PM_Interface which resets the polling timestamp instead of messing
> around with the timestamp directly.
> 
> Please comment, this is not very important, but annoying for me ;-)

Having functions in instead of accessing member variables directly is
always better or some sort of good coding style when programming c++
applications. But that's somehow my own opinion. So doing it the way
above is also no real problem. Protected/ private stuff is ok this
way.

So apply it and I will test it.

Greetings,
        Holger
_______________________________________________
powersave-devel mailing list
[email protected]
http://forge.novell.com/mailman/listinfo/powersave-devel

Reply via email to