swizard (swizard) wrote,
swizard
swizard

Categories:
  • Location:
  • Music:

Robots friendly

Синхронизация Palm Tungsten T5 с FreeBSD 6.2 через bluetooth.

Задача достаточно хорошо решается с помощью гугла, пока не упрешься в
один пренеприятный баг в PalmOS 5.0, которая стоит на T5. Для тех, кто
кому еще вдруг предстоит, выкладываю для индексации HOWTO.


Сначала настраиваем bluetooth и спариваем девайсы
согласно хендбуку
(если он еще не настроен). Далее добавляем в /etc/rc.conf
строчку sdpd_enable="YES", потом поднимаем sdp daemon:

`--> sudo /etc/rc.d/sdpd start


Теперь нам следует зарегистрировать PPP сервис. Добавляем
в /etc/ppp/ppp.conf следующую секцию:

palm:
 set dial "\"\" READY GO"
 set ifaddr 192.168.254.144 192.168.254.2
 disable chap
 disable deflate
 disable mppe
 disable pred1
 disable shortseq
 disable vjcomp
 disable ipv6cp
 set timeout 0
 set lqrperiod 10
 enable lqr
 accept lqr
 disable pap
 deny pap
 disable chap
 deny chap


И поднимаем сервис следующей командой:

`--> sudo rfcomm_pppd -d -s -C 1 -l palm


Теперь можно удостовериться, что сервис поднят:

`--> sdpcontrol -l Browse


Вывод команды должен содержать информацию о PPP сервисе:

Record Handle: 0x00000003
Service Class ID List:
        LAN Access Using PPP (0x1102)
Protocol Descriptor List:
        L2CAP (0x0100)
        RFCOMM (0x0003)
                Protocol specific parameter #1: u/int8/bool 1
Bluetooth Profile Descriptor List:
        LAN Access Using PPP (0x1102) ver. 1.0


Далее настраиваем пальм -- в "Настройках" (Preferences) создаем
"Соединение" (Connection) с PC через bluetooth, далее создаем "Сеть"
(Network) через только что созданное соединение, остальные параметры
оставляем по дефолту.

Здесь сразу же можно проверить: нажимаем "Соединить" (Connect) и
пробуем пропинговать с компа 192.168.254.2 -- если все сделано
правильно, пинг должен пойти через только что создавшийся интерфейс:

tun0: flags=8151<UP,POINTOPOINT,RUNNING,PROMISC,MULTICAST> mtu 1500
        inet 192.168.254.144 --> 192.168.254.2 netmask 0xffffffff
        Opened by PID 37381


Теперь мы подошли к собственно синхронизации через наше настроенное
bluetooth-соединение. Тут можно провозиться ОЧЕНЬ долго, как я :) Дело
в том, что в PalmOS 5.0 есть баг в HotSync'е в преобразованиях
byte-orders: network byte order -> little endian и наоборот. Тут
придется прибегнуть к грязным трюкам.

Идем в настройки HotSync'a на пальме (в русской версии это называется
"Обмен"). Ставим синхронизацию через "Модем" (Modem). Далее в
первом пункте настроек ставим "Сеть" (Network), во втором "Сеть"
(LANsync), в настройках первого PC (Primary PC Setup) задаем
следующие странные параметры:
- zzzz (не важно что)
- 144.254.168.192
- 0.255.255.255

Вторая и третья строчка -- это айпишник и маска, перевернутые наоборот
:) Далее нам нужно собрать pilot-link, пропатчив его параллельно.

`--> cd /usr/ports/palm/pilot-link
`--> sudo make


Как только пакет скачается, распакуется и захочет скомпилироваться,
жмем CTRL+C. Накладываем следующий патч:

--- work/pilot-link-0.12.2/src/pilot-csd.c.orig Tue Nov  6 00:23:00 2007
+++ work/pilot-link-0.12.2/src/pilot-csd.c      Tue Nov  6 00:22:33 2007
@@ -377,7 +377,7 @@
                                inet_ntoa(raddress));
                }

-               if (get_short(mesg) != 0xFADE)
+               if (get_short(mesg) != 0xDEFA)
                        goto invalid;

                if ((get_byte(mesg + 2) == 0x01) && (n > 12)) {
@@ -393,12 +393,18 @@
                                fprintf(stdout, ", %s", inet_ntoa(mask));
                        }

-                       if (strcmp(hostname, name) == 0) {
+                       /* if (strcmp(hostname, name) == 0) { */
                                if (!quiet)
                                        fprintf(stdout, " = accept.\n");

                                set_byte(mesg + 2, 0x02);
-                               memcpy(mesg + 4, &address, 4);  /* address is already in Motorola byte order */
+                               /* memcpy(mesg + 4, &address, 4);*/     /* address is already in Motorola byte order */
+
+                               mesg[4] = ((char *)&address)[3];
+                               mesg[5] = ((char *)&address)[2];
+                               mesg[6] = ((char *)&address)[1];
+                               mesg[7] = ((char *)&address)[0];
+
                                n = sendto(sockfd, mesg, n, 0,
                                           (struct sockaddr *) &cli_addr,
                                           clilen);
@@ -407,7 +413,7 @@
                                                strerror(errno));
                                }
                                continue;
-                       }
+                       /* } */
                        if (!quiet) {
                                fprintf(stdout, " = reject.\n");
                        }


По коду видно, что патч, в основном, меняет порядок байтов в
адресах. Далее дособираем pilot-link:

`--> sudo make install clean


Теперь все готово. Запускаем pilot-csd:

`--> pilot-csd --hostname pst -a 192.168.254.144 -n 255.255.255.0


Запускаем pilot-xfer:

`--> pilot-xfer -p net:any -s ~/Backup/palm


Далее можно жать кнопочку "Sync" на пальме, и должна пойти синхронизация.


Опенсурс -- великая сила =)

Ключевые слова для релевантности: Palm Tungsten T5, FreeBSD 6.2, HotSync, Bluetooth, PalmOS 5.0 bug
Tags: bluetooth, bug, freebsd, google it, hotsync, notes, palm, sync, tungsten
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 8 comments