Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> Мелочи —> BlueTooth

Как закинуть файлы на Нокию из-под FreeBSD.

Автор: lissyara.


    Итак. В наличии - Жена, её Нокия, FreeBSD 6.3 на десктопе, музыка на нём же, и желание жены же эту музыку получить в телефоне. Телефон имеет голубозубый интерфейс - BlueTooth.
   Краткий поиск по инету навёл на немало статей про подключение жопореза через такое соединение, и пару описаний про консольную утилиту из портов, с интерфейсом типа ftp для работы с файлами в телефоне. Не совсем то что хотелось, хотя, с учётом что когда-то она монтировала-отмонтировала диск по бумажке - наверно бы осилила, или пришлось бы мне - под её руководством заливать поштучно гиг музыки... Короче надо думать, а пока прикручиваем телефон.
   Девайс одолжил у народа на работе, ноунеймовская USB хреновина, отрапортовавшая о себе так:
ubt0: vendor 0x0a12 product 0x0001, rev 1.10/3.73, addr 2
ubt0: vendor 0x0a12 product 0x0001, rev 1.10/3.73, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 5) endpoints: isoc-in=0x83, isoc-out=0x3;
      wMaxPacketSize=49; nframes=6, buffer size=294

   Чтобы она не была угеном (ugen0 =)), предварительно были подгружены и прописаны в /boot/loader.conf модули:
ussr$ more /boot/loader.conf
# Blue Tooth
ng_bt3c_load="YES"
ng_btsocket_load="YES"
ng_ubt_load="YES"
ubtbcmfw_load="YES"
ng_l2cap_load="YES"
netgraph_load="YES"

   Шесть штук, потому как грузил не разбираясь кто есть кто - всех похожих по названию, и по тому что знал про эти девайсы. От лишних модулей в ядре - глюков не прибавиться. А если и прибавиться - не страшно - багрепорт напишу =)
   В хандбуке и на просторах инета, опять же, пачка всего про ручное прикручивание, написание мрачных скриптов по подъёму всего этого и т.п. В реальности, всё куда проще - прогресс не стоит на месте, и руководства уже устарели. Так что - пойдём новым путём. Прописываем в /etc/rc.conf:
# blue devices
hcsecd_enable="YES"

   И ребутаемся, или выполянем пачку действий из всё тех же древних инструкций, с учётом что нужные скрипты уже есть в /etc/rc.d/. Я ребутнулся, не продакшен, десктоп всё же.
   После чего смотрим - чё у нас в округе:
ussr$ hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
        BD_ADDR: 00:1e:a3:be:b5:eb
        Page Scan Rep. Mode: 0x1
        Page Scan Period Mode: 0x2
        Page Scan Mode: 00
        Class: 5a:02:04
        Clock offset: 0x2de1
Inquiry result, num_responses=1
Inquiry result #0
        BD_ADDR: 00:01:e3:87:12:24
        Page Scan Rep. Mode: 0x1
        Page Scan Period Mode: 0x2
        Page Scan Mode: 00
        Class: 50:02:08
        Clock offset: 0x5638
Inquiry result, num_responses=1
Inquiry result #0
        BD_ADDR: 00:11:9f:79:47:91
        Page Scan Rep. Mode: 0x1
        Page Scan Period Mode: 00
        Page Scan Mode: 00
        Class: 50:02:0c
        Clock offset: 0x247d
Inquiry complete. Status: No error [00]
ussr#    

   Фигасе... Этого я не ожидал - какое-то нездоровое оживление, с учётом что синий зуб включен тока на телефоне жены. Смотрим - кто есть кто:
ussr$ hccontrol -n ubt0hci remote_name_request 00:01:e3:87:12:24
BD_ADDR: 00:01:e3:87:12:24
Name: SL56
ussr$ hccontrol -n ubt0hci remote_name_request 00:1e:a3:be:b5:eb
Status: Page timeout [0x4]
ussr$ hccontrol -n ubt0hci remote_name_request 00:1e:a3:be:b5:eb
BD_ADDR: 00:1e:a3:be:b5:eb
Name: xxxx
ussr$ hccontrol -n ubt0hci remote_name_request 00:1e:a3:be:b5:eb |\
? iconv -f utf-8 -t koi8-r
BD_ADDR: 00:1e:a3:be:b5:eb
Name: Вика
ussr$

   Пока колупался - один девайс пропал - видать кто-то мимо проходил =). Оставшиеся два - собсно телефон жены, и Siemens-SL56 - стационарный телефон - в нём тоже оказался синий зуб, к тому же работающий и включенный.
   Прописываем их в /etc/bluetooth/hosts - c именами куда удобней работать чем с MAC адресами:
ussr$ more /etc/bluetooth/hosts
# ... skipped ....
00:1e:a3:be:b5:eb       nokia-6085
00:01:e3:87:12:24       siemens-sl56

ussr$

   И в /etc/bluetooth/hcsecd.conf - файл конфигурации
ussr$ more /etc/bluetooth/hcsecd.conf
# Vika
device {
        bdaddr  00:1e:a3:be:b5:eb;
        name    "nokia-6085";
        key     nokey;
        pin     "1234";
}
# Siemens stational Phone
device {
        bdaddr  00:01:e3:87:12:24;
        name    "siemens-sl56";
        key     nokey;
        pin     "1234";
}

   И рестартуем даемона hcsecd:
ussr# /etc/rc.d/hcsecd restart
Stopping hcsecd.
Waiting for PIDS: 1527.
Starting hcsecd.
ussr#

   Пробуем пингануть Сименс:
ussr# l2ping -a siemens-sl56 -c 10
44 bytes from siemens-sl56 seq_no=-189836477 time=770.142 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=39.804 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=41.823 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=41.809 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=21.817 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=39.803 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=12.820 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=31.799 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=39.780 ms result=0
44 bytes from siemens-sl56 seq_no=-189836477 time=52.796 ms result=0
ussr#   

   На самом деле тут не так гладко оказалось - на первой попытке не получилось - он запросил пин - а я не видел... После ввода и добавления в телефоне компа в доверенные - всё пошло пучком.
   Пингуем нокию:
ussr$ l2ping -a nokia-6085 -c 10
0 bytes from nokia-6085 seq_no=0 time=1735.944 ms result=0
0 bytes from nokia-6085 seq_no=1 time=40.785 ms result=0
0 bytes from nokia-6085 seq_no=2 time=41.793 ms result=0
0 bytes from nokia-6085 seq_no=3 time=28.797 ms result=0
0 bytes from nokia-6085 seq_no=4 time=33.751 ms result=0
0 bytes from nokia-6085 seq_no=5 time=15.815 ms result=0
0 bytes from nokia-6085 seq_no=6 time=35.798 ms result=0
0 bytes from nokia-6085 seq_no=7 time=37.789 ms result=0
0 bytes from nokia-6085 seq_no=8 time=45.792 ms result=0
0 bytes from nokia-6085 seq_no=9 time=37.792 ms result=0
ussr$

   Тут с секурностью походу похуже - пошло с полпинка.

   Дальше интересней. Из всего что удалось найти для работы с содержимым телефона, как я уже и писал выше, была консольная утилита. Ставим:
ussr$ cd /usr/ports/
ussr$ make search key='OBEX'
Port:   obexapp-1.4.8
Path:   /usr/ports/comms/obexapp
Info:   Obex application to transfer objects to mobile equipment
Maint:  mad@madpilot.net
B-deps: libiconv-1.11_1 openobex-1.3_1
R-deps: libiconv-1.11_1 openobex-1.3_1
WWW:

Port:   openobex-1.3_1
Path:   /usr/ports/comms/openobex
Info:   Open source implementation of the OBEX protocol
Maint:  mad@madpilot.net
B-deps: autoconf-2.61_2 autoconf-wrapper-20071109 automake-1.4.6_4
automake-wrapper-20071109 gettext-0.16.1_3 gmake-3.81_2
libiconv-1.11_1 libtool-1.5.24 m4-1.4.9,1 perl-5.8.8_1
R-deps:
WWW:    http://openobex.sourceforge.net/

ussr$ cd /usr/ports/comms/obexapp
ussr$ su
ussr# make install clean
.... skipped ...
ussr# exit
ussr$ rehash
ussr$ 

   Пробуем залезть в аццкую машинку:
ussr$ obexapp -c -a nokia-6085 -C ftrn
obex>
obex> ?
CApability, CD, DElete, DIsconnect, Empty, GET, GETDefault, Ls, Mkdir, Put?
obex> ls
Access    Owner    Group    Size       Modified         Name
 RW       n/a      n/a      n/a        n/a              Victoriya/
  R       n/a      n/a      n/a        n/a              Графика/
  R       n/a      n/a      n/a        n/a              Музыка/
 RW       n/a      n/a      n/a        n/a              Темы/
  R       n/a      n/a      n/a        n/a              Сигналы/
  R       n/a      n/a      n/a        n/a              Видео/
  R       n/a      n/a      n/a        n/a              Фото/
  R       n/a      n/a      n/a        n/a              Записи/
  R       n/a      n/a      n/a        n/a              Прн файлы/
Success, response: OK, Success (0x20)
obex>      
obex> cd Прн\ файлы/
obex> put /mnt/shares/others/muzik/viktoriya/Алла\ пугачёва-прости поверь.mp3
Success, response: OK, Success (0x20)
obex> ls
Access Owner Group Size     Modified        Name
                                                        ..
RWD    n/a   n/a   3637619  17-Feb-08 00:49 Алла пугачёва-прости поверь.mp3
Success, response: OK, Success (0x20)
obex>

   Пашет! Скорость - около мегабита... И тут я ярко представил себе как объясняю эту последовательность команд жене... Радость ушла, пришёл гугл с запросом типа "obexapp GUI". Полезного запрос ничё не принёс - тока пару утилит для работы с телефонами через шланги - СОМ или USB - когда девайс виден как модем... Тот же COM. Про голубые зубы ничё не было.
   Дальнейшее раскуривание мана по obexapp привело к знанию о том, что прога может принимать имя файла как параметр, и его класть на удалённый телефон в неинтерактивном режиме. Это было интересней. Через полчаса скриптописательства родилось такое:
ussr#
ussr# more /root/scripts/nokia.upload.sh
#!/bin/sh

icon="/usr/local/share/doc/xdialog/samples/warning.xpm"

# Заливаем
/usr/local/bin/obexapp -c -a nokia-6085 -C opush -n put "$@"
rezult=$?
# Проверяем результат
if [ $rezult -eq 0 ]
then
        # удачно
        /usr/local/bin/Xdialog --title "Заливка файла удачна" \
                --icon ${icon} --msgbox \
                "Удачная закачка файла: \n $@" 0 0 &
else
        # неудачно...
        /usr/local/bin/Xdialog --title "Ошибка закачки" \
                --icon ${icon} --msgbox \
                "Ошибка при закачке файла: \n $@" 0 0 &
fi



ussr#

   КДЕ, как оказалось, если перетащить файл на исполняемый файл, вызывает исполняемый с параметром в виде имени затащенного (а потом меня спрашивают - за что я не люблю ГУЯ - вот за невозможность по человечески объяснить что делать и не люблю =)). Тоже самое происходит если затащить файл на КДЕшный ярлык, который был сделан после показа заказчику первого релиза =). Ибо вид значка для шелл скриптов не впечатлил - хотелось чего-то красивого. В итоге на рабочий стол легло такое:
ussr# more /usr/home/viktoriya/Desktop/nokia.desktop
[Desktop Entry]
Comment=
Comment[ru]=
Exec=/root/scripts/nokia.upload.sh
GenericName=
GenericName[ru]=
Icon=staroffice
MimeType=
Path=
StartupNotify=false
Terminal=false
TerminalOptions=
Type=Application
X-DCOP-ServiceType=
X-KDE-SubstituteUID=false
X-KDE-Username=

ussr#

   Собственно - это ярлык для запуска того скрипта. Надо затащить файлы на него, и после закачки каждого файла лезет окно с отчётом - насколько оно удачно.
   Всё. На всё про всё - часа два. Вечером к компу было не прорваться - музыка текла рекой, долез тока ночью. Ночью же и писал =). Будет время - поменяю иконку на удачную загрузку - надо чё-то зелёное...

P.S. Скрипт требует порт /usr/ports/x11/xdialog, но работать будет и без него - тока окошек не будет.
P.S.2 Прога умная - перекодировку имён осуществляет сама. Так что на эту тему мона не беспокоиться.
P.S.3 Система такая:
ussr# uname -a
FreeBSD ussr.lissyara.int.otradno.ru 6.3-RELEASE FreeBSD 6.3-RELEASE #0:
Sun Jan 20 09:47:57 MSK 2008 lissyara@ussr:/usr/obj/usr/src/sys/color-console
i386
ussr#   

Под восьмёркой amd64 тока настраивал сам зуб и пинговал телефон, файлы не кидал - лениво.



размещено: 2008-02-18,
последнее обновление: 2008-12-23,
автор: lissyara


muzzy, 2008-02-18 в 8:53:34

Достойный скрипт, в остальном все как в мане :)

lazyklimm, 2008-02-18 в 15:11:36

я не стал заморачиваться и купил кардридер, благо у сестры в нокию карточка втыкивается

Alive, 2008-02-19 в 12:20:20

Спасибо. Яркий пример того, что жена бывает не только вредной, но и полезной.

Василий, 2008-02-19 в 13:00:33

Так для картридера ж приётся руки тянуть к телефону, к карте, к ридеру.

Вопрос не в тему: на что намекает color-console? Всегда объходился без компиляции ядра для цветов в консоли. ;-)

gloom, 2008-02-19 в 13:18:59

Интересно http://sourceforge.net/projects/kde-bluetooth
работает в freebsd?
В портах нету :(

lissyara, 2008-02-19 в 14:08:10

от на это намекает
Люблю ядрышко цветное, а не просто белое =)

azu, 2008-02-19 в 21:14:00

kde-bluetooth: A collection of Bluetooth utilities and modules for KDE based on BlueZ.

Вот это голубоеZ кажется тянет корнями к реализации синезубого стека в линухсе.

Manefesto, 2008-02-20 в 8:13:31

Можно попытатся слабать гуёвину на PyQt или PerlQt

Kash, 2008-02-24 в 12:12:29

Хм, я у себя обошелся загрузкой только ng_ubt модуля, и добавлением в netstart
/etc/rc.d/bluetooth start ubt0
скриптик сам подгружает все неоходимые модули, работает замечательно.
Статья отличная, спасибо.

P.S.: /etc/rc.d/bluetooth 100% есть в 6.3, на более ранних версиях не смотрел. :)

lissyara, 2008-02-24 в 12:14:42

Первое же обновление системы и все ваши правки улетят в газенваген.
Юзайте штатные средства, а не создавайте помойку там где живёте. Потом сами же проблем огребёте...

Kash, 2008-02-24 в 12:38:07

Да, с netstart'ом я действительно лохонулся. :(
Смотрим devd.conf и видим.
...
# When a USB Bluetooth dongle appears activate it
attach 100 {
   device-name "ubt[0-9]+";
   action "/etc/rc.d/bluetooth start $device-name";
};
detach 100 {
   device-name "ubt[0-9]+";
   action "/etc/rc.d/bluetooth stop $device-name";
};
...
Т.е. скрипт запускается на автопилоте.

AD, 2008-03-06 в 12:34:17

Круто! Фурычит, по после закидывания файла на устойство. (E-ten X500 в моём случае) KDE ещё секунд 30 пытается запустить этот скрипт. Хотя диалоговое окно уже всплыло (Переписал на инглиш сообщения - у мну абракадабра вылазила) и было успешно закрыто.

TheFeaR, 2008-05-26 в 16:05:04

  R       n/a      n/a      n/a        n/a              Прн файлы/

=)))))))

turka, 2008-08-14 в 17:46:28

где-то в переписки freedsd.org нашёл, что в 6.3 и 7.0 блютуз пускается новым способом спомощью bluetooth.device.conf. А щас найти не могу может кто знает

delpass, 2009-10-20 в 17:11:33

Думаю логичней было бы добавить в меню отправить.
Или в кедах такого меню нет?



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0924 секунд
Из них PHP: 31%; SQL: 69%; Число SQL-запросов: 86 шт.
Исходный размер: 50023; Сжатая: 11369