Import: python PoC
[espeaktime] / python / espeaktime.py
1 #!/usr/bin/python
2
3 """
4
5 signal sender=:1.12 -> dest=(null destination) serial=1208 path=/org/freedesktop/Hal/devices/computer_logicaldev_input; interface=org.freedesktop.Hal.Device; member=Condition
6    string "ButtonPressed"
7       string "power"
8
9 signal sender=:1.11 -> dest=(null destination) serial=750 path=/com/nokia/mce/signal; interface=com.nokia.mce.signal; member=display_status_ind
10    string "on"
11
12 signal sender=:1.11 -> dest=(null destination) serial=731 path=/com/nokia/mce/signal; interface=com.nokia.mce.signal; member=tklock_mode_ind
13    string "locked"
14 """
15
16 # mce/dbus-names.h
17 MCE_SERVICE             = "com.nokia.mce"
18 MCE_REQUEST_IF          = "com.nokia.mce.request"
19 MCE_SIGNAL_IF           = "com.nokia.mce.signal"
20 MCE_REQUEST_PATH        = "/com/nokia/mce/request"
21 MCE_SIGNAL_PATH         = "/com/nokia/mce/signal"
22 MCE_TKLOCK_MODE_SIG     = "tklock_mode_ind"
23 MCE_DISPLAY_SIG         = "display_status_ind"
24
25 import gobject
26 import dbus
27 import dbus.mainloop.glib
28 import time
29 import os
30
31 class SpeakTimeController(object):
32         def __init__(self):
33                 bus = dbus.SystemBus()
34                 mce_req = dbus.Interface(
35                         bus.get_object(MCE_SERVICE, MCE_REQUEST_PATH),
36                         dbus_interface=MCE_REQUEST_IF)
37                 mce = dbus.Interface(
38                         bus.get_object(MCE_SERVICE, MCE_SIGNAL_PATH),
39                         dbus_interface=MCE_SIGNAL_IF)
40                 hal = dbus.Interface(
41                         bus.get_object("org.freedesktop.Hal", "/org/freedesktop/Hal/devices/computer_logicaldev_input"),
42                         dbus_interface="org.freedesktop.Hal.Device")
43
44                 self.sig_display_status(mce_req.get_display_status())
45                 self.sig_tklock_mode(mce_req.get_tklock_mode())
46
47                 mce.connect_to_signal(MCE_DISPLAY_SIG, self.sig_display_status)
48                 mce.connect_to_signal(MCE_TKLOCK_MODE_SIG, self.sig_tklock_mode)
49                 hal.connect_to_signal("Condition", self.sig_condition)
50
51
52
53         def sig_display_status(self, status):
54                 print "display status [%s]" % status
55                 self.display_status = status
56
57         def sig_tklock_mode(self, mode):
58                 print "lock mode [%s]" % mode
59                 self.tklock_mode = mode
60
61         def sig_condition(self, name, *args):
62                 print "condition: name=[%s] args=[%r]" % (name, args)
63                 if name == 'ButtonPressed' and args[0] == 'power':
64                         print "power button"
65                         if self.display_status == "on" and self.tklock_mode == "locked":
66                                 s = time.strftime("%H:%M")
67                                 print "speak: [%s]" % s
68                                 print os.system("espeak \"%s\"" % s)
69
70
71 def main():
72         dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
73         
74         ctrl = SpeakTimeController()
75
76         print "loop"
77         mainloop = gobject.MainLoop()
78         mainloop.run()
79
80 main()