OpenOBEX USB patch

The latest version:

02 february 2006: there is now a new stable version (1.1) of OpenOBEX, with USB support included. Get from here.
19 december 2005: the patch has been finally included into OpenOBEX CVS , so it's no longer needed.
For historical reference, here's the latest version of it: openobex-usb.patch

How to use

A comprehensive HOWTO on using USB to transfer files from/to a phone is available at http://members.dodo.com.au/~joaniemrc/nokia/Nokia-6670-USB.html and some further tips are at http://wiki.splitbrain.org/nokia_6630#usb_obex.

The guide on using libsyncml to access calendar and contacts is available at http://libsyncml.opensync.org/wiki/obex-guide.

A few extra notes of mine follow.

Introduction

This patch adds support for USB transport to OpenOBEX library. Then the library can be used to communicate with gadgets that have a Universal Serial Bus Communication Device Class Wireless Mobile Communication Devices Object Exchange interface (or USB CDC WMC OBEX for short :).

Phones which support that interface are typically post-2003 USB-compatible Nokia phones. Please note that many older phones claim to be obex-compatible but don't actually have a proper USB OBEX interface: instead they have a USB Serial interface through which a phone modem is accessible and you switch that to OBEX mode with a special AT command. Those are known as cable obex interfaces, and aren't standardized. The rule of thumb is this: if the phone comes with a DKU-2 or CA-53 cable, it should support OBEX over USB. If it's any other cable (such as DKU-5 or CA-42), then it's not supported (compatibility chart 1, compatibility chart 2). I'm also aware of these non-Nokia phones which seem to support OBEX over USB: Sony Ericsson Z1010, K608i and K750 and also LG U8110/8120. If you have them, or other phones with a USB interface, I'm very interested to get feedback from you.

What is OBEX?

OBEX can be best described as a binary HTTP. It's a standard from "Infrared Data Assosiation" which includes Microsoft, Apple, Hewlett-Packard, Nokia and others. It's also used over Bluetooth and USB. It was meant for devices with very limited processing power, so textual http couldn't be used. OBEX can be used to do a lot of things, but by default compliant devices support just two of them: pushing objects to the device and querying the device about what else it can do. What happens to pushed objects depends on the device, typically they show up in some sort of 'incoming' folder.

Querying the device about its capabilities works like this: after connecting with default parameters you issue a GET command with "x-obex/capability" MIME type. The gadget then sends you an XML file which contains information about the device, and what kinds of services it supports over OBEX. Here's what I got from my Nokia 7610. Neat, isn't it? You don't even need the DTD to make sense of that. So we can talk in SyncML to exchange contacts/calendar/notes and perhaps other things, browse the phone filesystem (the phone even tells where the photos and videos you have taken are), and do backups based on the information in backup.xml file.

Symbian 9 based phones should support USB mass storage profile (Nokia N91 is the first one that does), so you'd be able to mount them, just like digital cameras and such. However, obex would still be needed for SyncML support.

Specifications

The specification for OBEX itself (including file browsing and transfer protocol) is available from IrDA here. They require you to pay them 20 dollars to download it, so here's a copy (not the latest 1.3 version though). A GPLd implementation of OBEX is available here: http://openobex.sf.net

The specification for the USB OBEX interfaces is available here. You need a document titled "CDC Subclass Specification for Wireless Mobile Communication Devices". The list of contributors to the specification includes Ericsson, Motorola, NEC, Nokia, NTT DoCoMo and others. This is what my patch actually implements.

Transfer and synchronization of contacts, calendar entries and other data items on new phones is done via SyncML protocol. The specifications (including SyncML-over-OBEX) are available here and an open source implementation is currently being developed at http://libsyncml.opensync.org/. You can help test that implementation by following http://libsyncml.opensync.org/wiki/obex-guide and also check the current status from http://www.opensync.org/wiki/DeviceCompatibilityList.

Usage and applications

Please refer to the HOWTOs at the top of the page. Note that many of the various obexftp frontends aren't yet updated to support USB transport and interface discovery; your best bet is the obexftp command-line application. Hopefully someday we'll have a userland filesystem, Gnome VFS module and KDE support.

Troubleshooting

Please note that I most likely won't be able to do anything about bugs in the device OBEX protocol implementation and protocols/data formats that work on top of it. This patch only deals with the USB transport mechanism.

When you send bug reports, in additional to the usual problem description that makes sense, and exact error messages, also run 'lsusb -v' and attach the output. Asking on the linux-usb-users and openobex-users maling lists is a good idea too, because if I don't know the answer, other people might.

Contact info

Alexander Kanavin ak@sensi.org

Back to the top page


Made by Alexander Kanavin. E-mail to ak@sensi.org