D-Bus

From Openmoko

(Difference between revisions)
Jump to: navigation, search
m (remove link to outdated page)
 
(18 intermediate revisions by 11 users not shown)
Line 1: Line 1:
D-Bus is a message bus system, a simple way for applications to talk to one another.
+
Openmoko uses '''[http://www.freedesktop.org/wiki/DBus D-Bus]''', a [http://en.wikipedia.org/wiki/Middleware middleware] 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.
  
In OpenMoko we will use it for IPC.
+
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
  
See [http://www.freedesktop.org/wiki/Software/dbus dbus homepage]
+
== Session bus services ==
  
Also see [[Dbus device API]]
+
These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/
  
[[Category:Categories]]
+
* 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.freesmartphone.*
 +
* org.freedesktop.Avahi
 +
* org.bluez.*
 +
* ...
 +
 
 +
== Accessing the services ==
 +
 
 +
=== Command line ===
 +
 
 +
For simple uses, there's a command mdbus. Try
 +
<pre>
 +
mdbus -s
 +
</pre>
 +
to explore the DBus environment.
 +
 
 +
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 ===
 +
 
 +
To use D-Bus in [[Python]], the package python-dbus needs to be compiled and installed. Note that since the interfaces change over time you might want to read the source code of zhone from git.freesmartphone.org to get examples of current API.
 +
 
 +
To dial a number:
 +
<pre>
 +
#!/usr/bin/env python
 +
import dbus
 +
bus = dbus.SystemBus()
 +
gsm_device_obj = bus.get_object("org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Device")
 +
gsm_call_iface = dbus.Interface(gsm_device_obj,'org.freesmartphone.GSM.Call')
 +
proxy = bus.get_object("org.openmoko.Dialer", "/org/openmoko/Dialer")
 +
gsm_call_iface.Initiate("12345", "voice")
 +
</pre>
 +
 
 +
To run the program use the following:
 +
<pre>
 +
dbus-launch python my_program.py
 +
</pre>
 +
 
 +
== See also ==
 +
* [[OpenmokoFramework/mdbus]]
 +
 
 +
== External links ==
 +
* [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]
 +
 
 +
[[Category:D-Bus| ]]

Latest revision as of 12:48, 12 September 2009

Openmoko uses D-Bus, a middleware 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

[edit] Session bus services

These can at least be defined in /usr/share/dbus-1.0/services/ and /usr/share/dbus-1/services/

  • org.gnome.evolution.dataserver.AddressBook
  • org.gnome.evolution.dataserver.Calendar
  • org.gnome.GConf
  • ...

[edit] System bus services

There is information about these in /etc/dbus-1/system.d/

  • org.freesmartphone.*
  • org.freedesktop.Avahi
  • org.bluez.*
  • ...

[edit] Accessing the services

[edit] 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'

[edit] Python

To use D-Bus in Python, the package python-dbus needs to be compiled and installed. Note that since the interfaces change over time you might want to read the source code of zhone from git.freesmartphone.org to get examples of current API.

To dial a number:

#!/usr/bin/env python
import dbus
bus = dbus.SystemBus()
gsm_device_obj = bus.get_object("org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Device")
gsm_call_iface = dbus.Interface(gsm_device_obj,'org.freesmartphone.GSM.Call')
proxy = bus.get_object("org.openmoko.Dialer", "/org/openmoko/Dialer")
gsm_call_iface.Initiate("12345", "voice")

To run the program use the following:

dbus-launch python my_program.py

[edit] See also

[edit] External links

Personal tools

D-Bus is a message bus system, a simple way for applications to talk to one another.

In OpenMoko we will use it for IPC.

See dbus homepage

Also see Dbus device API