Started to write own power monitor
[gregoa/zavai.git] / src / power.vala
1 /*
2  * power - zavai power event handling
3  *
4  * Copyright (C) 2009  Enrico Zini <enrico@enricozini.org>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 using GLib;
22
23 namespace zavai {
24 namespace power {
25
26 class Power : Service
27 {
28     protected string battery_device;
29     protected uint timeout;
30
31     public Power()
32     {
33         battery_device = "";
34         timeout = 0;
35     }
36
37     /// Activate the service
38     protected override void start()
39     {
40         if (started) return;
41
42         uint poll_time;
43         if (uevent.uevent != null)
44         {
45             uevent.uevent.event += on_uevent;
46             uevent.uevent.request("zavai.power");
47             // If we can get plug/unplug notifications, it's ok to just poll
48             // every 5 minutes
49             poll_time = 300 * 1000;
50         } else {
51             // Else poll every 30 seconds to be somehow reactive to plug/unplug
52             // events
53             poll_time = 30 * 1000;
54         }
55
56         // Poll battery every minute
57         timeout = Timeout.add(poll_time, on_timeout);
58
59         base.start();
60     }
61
62     /// Deactivate the service
63     protected override void stop()
64     {
65         if (!started) return;
66
67         // Stop polling
68         Source.remove(timeout);
69
70         if (uevent.uevent != null)
71         {
72             uevent.uevent.release("zavai.power");
73             uevent.uevent.event -= on_uevent;
74         }
75
76         base.stop();
77     }
78
79     bool on_timeout()
80     {
81         return true;
82     }
83
84     void on_uevent()
85     {
86 stderr.printf("EVENT %s\n", uevent.uevent.event_data.buffer);
87     }
88 }
89
90 Power power;
91
92 public void init()
93 {
94     power = new Power();
95 }
96
97 }
98 }