Openmoko uses D-Bus, a message bus system which provides a simple way for applications to talk to one another and to be available as services in the system. If the application providing the service is not running when a message is sent, the application will be started.
There are two separate busses:
- a system bus for root which runs whenever the phone is on
- a session bus which is started for the user when X starts
Session bus services
These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/
System bus services
There is information about these in /etc/dbus-1/system.d/
Accessing the services
For simple uses, there's a command dbus-send.
For example, to dial a number:
dbus-send --print-reply --dest="org.openmoko.Dialer" /org/openmoko/Dialer org.openmoko.Dialer.Dial string:12345
To use D-Bus in Python, the package python-dbus needs to be compiled and installed.
To dial a number:
#!/usr/bin/env python import dbus bus = dbus.SessionBus() proxy = bus.get_object("org.openmoko.Dialer", "/org/openmoko/Dialer") interface = dbus.Interface(object, "org.openmoko.Dialer") interface.Dial("12345") # or this: proxy.Dial("12345", dbus_interface="org.openmoko.Dialer")
The first "org.openmoko.Dialer" is the bus name of the service on the bus and "/org/openmoko/Dialer" is an object path in the service. Before calling a method on the object via the proxy object we still need to specify which interface the method belongs to: the second (and third) "org.openmoko.Dialer". Finally "Dial" is the method in the interface.