| 1 |
INTRODUCTION |
|---|
| 2 |
|
|---|
| 3 |
This is a VERY EXPERIMENTAL plugin for syncing with Motorola phones |
|---|
| 4 |
using the AT command set. It supports syncing phonebook and calendar |
|---|
| 5 |
entries (ie. the contact and event object types). It will most likely |
|---|
| 6 |
mess up the data on your phone and any other members of the sync group, |
|---|
| 7 |
due to the limited data that can be stored on the phone, so use with caution |
|---|
| 8 |
and make backups! See BACKUP/TESTING below. |
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
SUPPORTED HARDWARE |
|---|
| 12 |
|
|---|
| 13 |
Known working models: |
|---|
| 14 |
* L7 SLVR |
|---|
| 15 |
* V3i RAZR |
|---|
| 16 |
* V557 |
|---|
| 17 |
|
|---|
| 18 |
Possibly working, but only lightly tested: |
|---|
| 19 |
* V3x RAZR (tested reading only) |
|---|
| 20 |
* V635 (tested reading only) |
|---|
| 21 |
|
|---|
| 22 |
Untested, but might be working with recent changes: |
|---|
| 23 |
* K1 KRZR (extended calendar suppport, ticket #425) |
|---|
| 24 |
* V3xx RAZR (extended calendar suppport, ticket #425) |
|---|
| 25 |
* V3c (doesn't like AT+MODE=0, ticket #505) |
|---|
| 26 |
* V3 RAZR (tickets #599, #555, #504) |
|---|
| 27 |
|
|---|
| 28 |
Models known not to work: |
|---|
| 29 |
* V600 (shorter contact entries, ticket #504) |
|---|
| 30 |
* A780 (doesn't seem to respond to AT commands, except with ERROR) |
|---|
| 31 |
|
|---|
| 32 |
If your phone isn't listed above, or if your results differ, please let |
|---|
| 33 |
me know how it works for you, by emailing andrewb AT cse DOT unsw DOT |
|---|
| 34 |
edu DOT au. |
|---|
| 35 |
|
|---|
| 36 |
|
|---|
| 37 |
REQUIREMENTS |
|---|
| 38 |
|
|---|
| 39 |
* OpenSync 0.31 or later with the python bindings and python-module plugin |
|---|
| 40 |
* Python 2.4 or newer |
|---|
| 41 |
* The python-dateutil library (at least version 1.1), |
|---|
| 42 |
from http://labix.org/python-dateutil |
|---|
| 43 |
* Optionally, the pybluez library (at least version 0.9) |
|---|
| 44 |
from http://org.csail.mit.edu/pybluez/ |
|---|
| 45 |
|
|---|
| 46 |
|
|---|
| 47 |
INSTALLATION |
|---|
| 48 |
|
|---|
| 49 |
cp motosync.py $PREFIX/lib/opensync/python-plugins |
|---|
| 50 |
cp moto-sync $PREFIX/share/opensync/defaults |
|---|
| 51 |
|
|---|
| 52 |
|
|---|
| 53 |
CONFIGURATION |
|---|
| 54 |
|
|---|
| 55 |
For now, there is only one configuration option to moto-sync: the device |
|---|
| 56 |
string to communicate with the phone. This is specified in a small XML |
|---|
| 57 |
file, the contents of which should look like: |
|---|
| 58 |
<config><device>your device string here</device></config> |
|---|
| 59 |
|
|---|
| 60 |
There are two options for specifying the device string: |
|---|
| 61 |
1. If your phone is connected by bluetooth, and you have the pybluez |
|---|
| 62 |
package installed (see REQUIREMENTS above), you can use its MAC |
|---|
| 63 |
address (eg. 00:11:22:33:44:55) as the device string. |
|---|
| 64 |
|
|---|
| 65 |
2. Otherwise, you have to specify the full path to a device node on the |
|---|
| 66 |
local file system that can be used to communicate with the phone. |
|---|
| 67 |
Devices you're likely to use in this case are: |
|---|
| 68 |
* /dev/ttyACM0 for a USB modem connection (or whatever other device the |
|---|
| 69 |
phone shows up on, see dmesg). Note that the phone has to be in the |
|---|
| 70 |
"Data/Fax connection" mode, not mounted as a USB storage device. |
|---|
| 71 |
* /dev/rfcomm0 which is the first bluetooth channel. You need to setup |
|---|
| 72 |
that channel to bind with your phone, by doing something like: |
|---|
| 73 |
rfcomm bind rfcomm0 00:11:22:33:44:55 1 |
|---|
| 74 |
|
|---|
| 75 |
|
|---|
| 76 |
BACKUP/TESTING |
|---|
| 77 |
|
|---|
| 78 |
Before doing anything, it is probably a good idea to backup the data |
|---|
| 79 |
from your phone. You can use the mototool script to do this, and to |
|---|
| 80 |
delete entries on the phone. Run 'mototool --help' for details, or, for |
|---|
| 81 |
the impatient, try: |
|---|
| 82 |
mototool -d (device string) -f myphone.backup --backup |
|---|
| 83 |
|
|---|
| 84 |
The best way to get started testing this plugin is in a sync group |
|---|
| 85 |
with file-sync. To configure and use this, do: |
|---|
| 86 |
msynctool --addgroup moto-file |
|---|
| 87 |
msynctool --addmember moto-file moto-sync |
|---|
| 88 |
msynctool --addmember moto-file file-sync |
|---|
| 89 |
msynctool --configure moto-file 1 # configure moto-sync, as above |
|---|
| 90 |
msynctool --configure moto-file 2 # configure file-sync, set the path(s) |
|---|
| 91 |
msynctool --discover moto-file 1 |
|---|
| 92 |
msynctool --discover moto-file 2 |
|---|
| 93 |
msynctool --sync moto-file # cross your fingers! |
|---|
| 94 |
|
|---|
| 95 |
|
|---|
| 96 |
LIMITATIONS AND KNOWN PROBLEMS |
|---|
| 97 |
|
|---|
| 98 |
Unfortunately the functionality offered by the phone is extremely |
|---|
| 99 |
limited. I'd love to know how well it works with SyncML, especially for |
|---|
| 100 |
complex calendar events, but I'm guessing the answer is "not very". The |
|---|
| 101 |
phone books and calendar work in basically the same way: |
|---|
| 102 |
* entries are stored in memory "positions" |
|---|
| 103 |
* there are AT commands to read and write the data at a certain position |
|---|
| 104 |
|
|---|
| 105 |
This means that if an event changes position (which you can do for the |
|---|
| 106 |
phone book, for example if you want to change speed dial numbers) we |
|---|
| 107 |
don't have any way of detecting that it's the same event. Similarly, if |
|---|
| 108 |
an entry is deleted and a new one created in its place, we can't |
|---|
| 109 |
distinguish that from a (large) change to the original entry. |
|---|
| 110 |
|
|---|
| 111 |
For the phone book, each entry has a name, number, contact type |
|---|
| 112 |
(home/work/mobile/email address etc.), nickname, address, category |
|---|
| 113 |
number, birthday, and some other fields for things like ringer ID that |
|---|
| 114 |
we don't handle very well yet. A contact with multiple phone numbers is |
|---|
| 115 |
actually just multiple entries in the phone book, so when we read |
|---|
| 116 |
entries we have to merge any with the same name into a single contact, |
|---|
| 117 |
and split them up again on write. This leads to all sorts of problems in |
|---|
| 118 |
maintaining consistent UIDs for a contact, when our only real handle on |
|---|
| 119 |
which entry is which is the positions it occupies. |
|---|
| 120 |
|
|---|
| 121 |
For the calendar, each event has a name, date/time, duration, alarm |
|---|
| 122 |
date/time, repeat type, and list of exceptions. The repeat type in |
|---|
| 123 |
particular is very limited, and unless you have a recent-model phone |
|---|
| 124 |
with extended calendar support, many recurring events can't be |
|---|
| 125 |
represented on the phone. At the moment the plugin detects this and |
|---|
| 126 |
just refuses to write them. A better solution would be to split them up |
|---|
| 127 |
into multiple events, but this will confuse OpenSync when we sync up |
|---|
| 128 |
again. |
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| 131 |
TODO |
|---|
| 132 |
|
|---|
| 133 |
* Better error/exception handling |
|---|
| 134 |
* See all the FIXMEs in the code |
|---|
| 135 |
* Do something with "mailing list" entries in the phonebook |
|---|
| 136 |
* Add support for reading/writing the SIM phonebook |
|---|
| 137 |
* Improve support for other hardware |
|---|