Когда я разрабатывал для WM5 под linux'ом мне показалось, что копировать файлы для тестирования на КПК весьма напряжно. Файлы копировались на КПК либо через MMC карточку, либо с помощью монтирования КПК как USB флешки. Оба способа совершенно не удобны, когда эти действия приходится делать каждые 5 минут. В добавок, исполняемый файл надо было запускать, чтобы увидеть как он работает. Я запускал файлы руками.
Вобщем-то нет особого смысла говорить, как меня это раздражало после того как я в свое время поразрабатывал под виндой, где все эти действия выполнялись одним батничком. Тогда когда я попробовал найти что-то типа того я наткнулся на проект
synce. Сначало мне показалось, что надо поставить драйвер
usb-rndis. Я попытался, но оно обломалось на этапе компиляции. После небольшого изучения сайта synce я все-таки обнаружил существование новой версии драйвера
"usb-rndis-lite". На этот раз получилось без проблем. После установки драйвера появилось новое сетевое устройство: rndis0. Затем надо было поставить synce утилиты и библиотеки. Это была самая жостка часть. Первым делом я попробовал следовать инструкциям с
вики. Но odccm вывавал мне ошибки о d-ubs, hal и т.д.. Ошибки были откровенно тупыми, т.е. по ним нельзя никак было сказать о причине... ну это было что-то типа "d-bus error" или типа того. Тогда я попробовал vdccm.. и мне показалось, что уже лучше. Появилось что-то первое и хорошее - программа запустилась без ошибок :). В остальном все было тихо и грустно. Я начал искать в гугле слово 'vdccm' и через какое-то время нашел, что некто пользовался утилитой triggerconnection, чтобы уведомить ActiveSync. Но в моих руках triggerconnection не производила никакого эффекта ни на vdccm, ни на ActiveSync. Я прошелся по исходникам triggerconnection, было походе, что оно (утилито) отсылает пакет на порт 5679 нашего PPC. Тогда я посканил КПК с помощью nmap. Но nmap сказал мне, что портов открытых немає. У меня не было никаких идей почему порт 5679 закрыт в том время, как сам ActiveSync запущен. Я устал и заколебался. Увы, я потратил кучу времени пытаясь понять почему порт 5679 закрыт, пока в конце-концов, не предположил, что порт может оставаться открытым только несколько секунд после того как мы воткнули КПК в кроватку. И действительно, vdcomm обнаружил КПК, когда я запустил tirggerconnection сразу после того, как воткнул КПК в крэдл. В этот раз стало ясно, что одна проблема закрывала собой другую. Теперь, vdccm мог обнаруживать КПК, но он не мог держать соединение с КПК больше нескольких секунд. И снова я стал гуглить. Где-то кто-то написал, что vdccm не работает с устройствами защищенными паролями. "@!#%@#%*#$!!!" воскликнул я. Я не хотел держать КПК не защищенным или снимать пароль каждый раз как я вставляю КПК в крэдл. Короче я сделал
патч для vdccm, сразу как только отреверсинженирил протокол авторизации и разобрался в коде synce. И тогда наше время пришло, пропатченный vdccm разарботал как надо! Вии! Итак вкратце, что я сделал:
1. Поставил usb-rndis-lite.
2. Поставил библиотеки: librapi2, libsynce.
3. Пропатчил vdccm.
4. Установил ifplugd. Он запускает ifup/ifdown для rndis0 когда это нужно.
5. Добавил следующее в /etc/network/interfaces:
iface rndis0 inet static
address 169.254.2.2
netmask 255.255.255.0
post-up /usr/local/bin/triggerconnection-delayed local-pda
6. Добавил строку '169.254.2.1 local-pda' в /etc/hosts.
7. Написал /usr/local/bin/triggerconnection-delayed:
#!/bin/sh
sleep 2
exec /usr/local/bin/triggerconnection $@
8. Следующее я добавил в ~/.xsession:
vdccm -d 3 -f -t -p `cat ~/.pda-pwd` 1>>~/logs/vdccm 2>>~/logs/vdccm &
9. Записал секретный пароль в ~/.pda-pwd file (chmod 0600).
Теперь могу наслаждаться использованием утилит: pls, pstatus... ставить кабы и тд.
Любые комменты приветствуются.
P.S. Патч собственно не совсем полный. Я написал его очень прямолинейно. Он не поддерживает ожидание ввода пароля откуда-то, вместо этого вы должны указать пароль через ключ -p. К сожалению, у меня нет времени это реализовывать.
Комментариев нет:
Отправить комментарий