D-Bus
From Openmoko
(→Python: fixed typpo) |
(updated to make the command line example work on FSO milestone 3) |
||
Line 1: | Line 1: | ||
− | 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. | + | Openmoko uses '''[http://www.freedesktop.org/wiki/DBus 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: | There are two separate busses: | ||
Line 9: | Line 9: | ||
These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/ | These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/ | ||
− | * org. | + | * org.freesmartphone.Phone |
* org.gnome.evolution.dataserver.AddressBook | * org.gnome.evolution.dataserver.AddressBook | ||
* org.gnome.evolution.dataserver.Calendar | * org.gnome.evolution.dataserver.Calendar | ||
Line 27: | Line 27: | ||
=== Command line === | === Command line === | ||
− | For simple uses, there's a command | + | For simple uses, there's a command mdbus. Try |
+ | <pre> | ||
+ | mdbus -s | ||
+ | </pre> | ||
+ | to explore the DBus environment. | ||
− | For example, to dial a number: | + | For example, to dial a number (using FSO milestone 3): |
− | + | <pre> | |
+ | mdbus -s org.freesmartphone.ogsmd /org/freesmartphone/GSM/Device org.freesmartphone.GSM.Call.Initiate '12345' 'voice' | ||
+ | </pre> | ||
=== Python === | === Python === | ||
To use D-Bus in [[Python]], the package python-dbus needs to be compiled and installed. | To use D-Bus in [[Python]], the package python-dbus needs to be compiled and installed. | ||
+ | |||
+ | '''Note: This example does not work! Please update if you know how to get it working. See also 'discussion' tab.''' | ||
To dial a number: | To dial a number: | ||
Line 48: | Line 56: | ||
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. | 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. | ||
+ | |||
+ | To run the program use the following: | ||
+ | <pre> | ||
+ | dbus-launch python my_program.py | ||
+ | </pre> | ||
== See also == | == See also == | ||
Line 53: | Line 66: | ||
== External links == | == External links == | ||
− | * [http:// | + | * [http://docs.freesmartphone.org/ DBus API documentation] |
+ | * [http://dbus.freedesktop.org/doc/dbus-python/api/ DBus Python API] | ||
* [http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html dbus-python tutorial] | * [http://dbus.freedesktop.org/doc/dbus-python/doc/tutorial.html dbus-python tutorial] | ||
− | [[Category:D-Bus| ]] | + | [[Category:D-Bus|D-Bus]] |
[[Category:Application Developer]] | [[Category:Application Developer]] |
Revision as of 12:35, 16 October 2008
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
Contents |
Session bus services
These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/
- org.freesmartphone.Phone
- org.gnome.evolution.dataserver.AddressBook
- org.gnome.evolution.dataserver.Calendar
- org.gnome.GConf
- ...
System bus services
There is information about these in /etc/dbus-1/system.d/
- org.freedesktop.Avahi
- org.bluez.*
- ...
Accessing the services
Command line
For simple uses, there's a command mdbus. Try
mdbus -s
to explore the DBus environment.
For example, to dial a number (using FSO milestone 3):
mdbus -s org.freesmartphone.ogsmd /org/freesmartphone/GSM/Device org.freesmartphone.GSM.Call.Initiate '12345' 'voice'
Python
To use D-Bus in Python, the package python-dbus needs to be compiled and installed.
Note: This example does not work! Please update if you know how to get it working. See also 'discussion' tab.
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(proxy, "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.
To run the program use the following:
dbus-launch python my_program.py