Parse back the log entries
[gregoa/zavai.git] / src / app_aux.vala
1 /*
2  * app_aux - AUX button interaction
3  *
4  * Copyright (C) 2010  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 ui {
25 namespace aux {
26
27 public class AUX: zavai.Service
28 {
29     protected Omhacks.Led auxled;
30     protected bool has_aux;
31
32     protected weak clock.AlarmTriggerInfo current_alarm = null;
33
34     public AUX()
35     {
36         Object(name: "ui.aux");
37
38         has_aux = (auxled.init("gta02-aux:red") == 0);
39
40         if (has_aux)
41         {
42             zavai.log.warning("aux: can notify alarm triggers");
43             clock.alarm_trigger_queue.triggered += on_alarm_trigger;
44             clock.alarm_trigger_queue.acked += on_alarm_done;
45             clock.alarm_trigger_queue.canceled += on_alarm_done;
46         } else {
47             zavai.log.warning("aux: no way to notify alarm triggers");
48         }
49
50         // Listen to the button via X
51         input.hotkeys.hotkey += on_auxbutton;
52         input.hotkeys.grab(zavai.config.aux_button_keycode, 0, false);
53         input.hotkeys.request("auxbutton");
54     }
55
56     protected bool on_auxbutton(uint keycode, ulong time, bool pressed)
57     {
58         if (keycode == zavai.config.aux_button_keycode)
59         {
60             if (pressed)
61             {
62                 zavai.log.debug("AUX button pressed");
63                 if (current_alarm != null)
64                 {
65                     zavai.log.debug("HASCA");
66                     clock.alarm_trigger_queue.ack(current_alarm);
67                 }
68             }
69             else
70                 zavai.log.debug("AUX button released");
71             return true;
72         }
73         return false;
74     }
75
76     public void on_alarm_trigger(clock.AlarmTriggerInfo info)
77     {
78         zavai.log.debug("Start blinking");
79         auxled.brightness = 256;
80         // FIXME: is there a better way? I hope there is a better way. Please
81         // tell me there is a better way.
82         var trig = "timer";
83         for (int i = 0; ; ++i)
84         {
85             auxled.trigger[i] = (char)trig[i];
86             if (trig[i] == 0) break;
87         }
88         auxled.delay_on = 200;
89         auxled.delay_off = 300;
90         auxled.set();
91         current_alarm = info;
92     }
93
94     public void on_alarm_done(clock.AlarmTriggerInfo info)
95     {
96         zavai.log.debug("Stop blinking");
97         var trig = "none";
98         for (int i = 0; ; ++i)
99         {
100             auxled.trigger[i] = (char)trig[i];
101             if (trig[i] == 0) break;
102         }
103         auxled.brightness = 0;
104         auxled.set();
105         current_alarm = null;
106     }
107 }
108
109 public AUX aux = null;
110
111 public void init()
112 {
113     aux = new AUX();
114 }
115
116 }
117 }
118 }