
                   KMOBILE

(C) Copyright 2003, Helge Deller <deller@kde.org>



"kmobile" is suite to easily access "Mobile Devices",
which means, that you have one single interface to access
any type of mobile device (e.g. cellular phone, PDAs, 
MP3-Players, Digital Cameras and a lot more).

Each of this devices have different types of information,
(capatibilities) which can be:
  - An addressbook
  - A collection of notes
  - calendar entries,
  - a file storage section (e.g. pictures in digital cameras)
  - and more
 
The whole interface is pretty extendable. Each device has
a device driver, which reports the capatibilities of the 
connected device to the higher level.
So, if you once write a device driver, you can access it's 
contents from any KDE application later.

Currently the whole interface is divided into 3 sections:

a) The low-level device driver
b) A mid-layer, which is realized in the "kmobile" application
c) A userland library, to which KDE applications should link.


Here is some background info:

a) The low-level device driver (libkmobile_xxxx.so)

The low-level driver has to be derived from the KMobileDevice class
(#include <kmobiledevice.h>). The drivers should be located below the
directory /device, and you can find a sample implementation in
/device/skeleton-directory. See below for some hints on how to
write such a device driver.


b) The mid-layer (kmobile)

The mid-layer handles the main functionality, which is entirely
implemented in the kmobile application. All low-level drivers
are loaded by kmobile only, and then all low-level functions
to any device is made available to other applications
with a DCOP interface. Normal KDE applications should prefer the 
userland library (see below) instead of using direct DCOP calls.
Nevertheless, the DCOP interface might be very interesting to write
standalone command line tools.


c) The userland library (libkmobileclient.so)

Any KDE application which wants to access mobile devices
should #include <kmobileclient.h> and link to the libkmobileclient.la
library. libkmobileclient translates all calls to DCOP calls and
makes accessing mobile devices completely transparent to the
application.

One sample program which uses the client library is the kmobile
kioslave. In Konqueror you might access any mobile device directly
by giving "mobile:/" as the URL.





HINTS FOR DRIVER DEVELOPERS:
----------------------------
- KMobile device drivers are very similiar to kioslaves. Refer
  at the kioslave documentation if needed.

- derive your driver only from the KMobileDevice class (#include <kmobiledevice.h>)
  and reimplement the functions which you really need

- remember to set the classtype and capatibilities as soon as possible

- your driver will be loaded only once in the whole KDE system

- you don't need to worry about syncronisation - KMobile syncronizes
  all calls to your driver, so you always will have a clean state

- use lockDevice("/dev/ttyS1") and unlockDevice("/dev/ttyS1") to
  lock those devices system-wide (creates /var/lock/LCK..<devname> files),
  and to prevent other applications to access the same physical ports/devices

- use the helper functions createDirEntry() and createFileEntry() to
  create the right UDSEntries for listEntries(), stat(), ...

- never fork() your driver !!

