неділю, 20 березня 2011 р.

FreeBSD как bluetooth-сервер

Давно у меня не было необходимости работать с bluetooth на моем компьютере с FreeBSD, да и раньше, если мне надо было сбросить фото с моей Nokia N-95, я прибегал к помощи Windows. Учитывая, что Windows я пользуюсь все реже и реже, а также то что мой NoteBook с Windows был в ремонте, а фото хотелось поскорей отправить в Интернет, мне пришлось вспоминать, как все здесь устроено. Все что я сейчас опишу справедливо для FreeBSD 7.0 и выше.

И так, что нам надо.
1) Необходимо установить, если он еще не установлен, пакет obexapp.
# cd /usr/ports/comss/obexapp
# mare install clean

2) Вносим изменения в файл /boot/loader.conf.
Добавляем туда строчку.
ng_ubt_load="YES"

Теперь если вставить наш  BT-адаптер в USB разъем в /var/log/messages появится следующее сообщение, по крайней мере у меня она выглядит так, но у вас оно может быть немножко другим:
ugen0.2: <SiW> at usbus0
ubt0: <SiW SiW, class 224/1, rev 1.10/15.00, addr 2> on usbus0

В каталоге /etc/rc.d/ есть файл bluetooth, который при подключении BT устройства выполнит необходимые команды и подгрузит нужные драйвера.


3) Для того чтобы спаровать устройства я добавил в файл /etc/bluetooth такую запись:
device {
        bdaddr  00:1e:3a:24:b8:a9;
        name    "n-95-my";
        key     nokey;
        pin     "1234";
}

где bdaddr это физический адрес BT моего мобильного, аналог MAC-адрес для сетевой платы Ethernet. Назначение pin, я думаю всем понятно, поэтому о нем говорить не будем.

4) Добавляем в файл /etc/rc.conf:
hcsecd_enable="YES"
sdpd_enable="YES"

Это обеспечивает запуск демона авторизации и демона обнаружения сервисов, поддерживаемых вашим компьютером через bluetooth.
Хотя данные команды можем запустить позже в терминале
# hcsecd -d &
# sdpd -d&

решайте сами, как вам удобно, я все прописал в rc.conf и эти команды стартуют при запуске системы.

5) Теперь можем запустить OBEX-сервер для обмена данными:
# obexapp -s -d -C 10 -r /root/BT

Далее вставляем BT-адаптер выбираем нужные файлы на мобильном устройстве и отправляем их на наш компьютер. Файлы будут располагаться в каталоге /root/BT. Естественно, что перед запуском команды, такой каталог должен быть создан.
Кстати, необходимо внести в файл /etc/bluetooth/hosts BD_ADDR нашего устройства и его имя. В моем случае это выглядит так:
00:1c:43:ef:fb:ac       home
Теперь, на другом устройстве ваш компьютер будет выглядеть, как home(ubt0).


Приведу несколько команд, которые позволят вам диагностировать работу bluetooth.
# hccontrol -n ubt0hci inquiry
Inquiry result, num_responses=1
Inquiry result #0
 BD_ADDR: 3c:5a:37:16:30:42
 Page Scan Rep. Mode: 0x1
 Page Scan Period Mode: 0x2
 Page Scan Mode: 00
 Class: 5a:02:04
 Clock offset: 0x7a9e
Inquiry result, num_responses=1
Inquiry result #0
 BD_ADDR: ec:9b:5b:3e:0f:c6
 Page Scan Rep. Mode: 0x1
 Page Scan Period Mode: 0x2
 Page Scan Mode: 00
 Class: 5a:02:0c
 Clock offset: 0x4212
Inquiry result, num_responses=1
Inquiry result #0
 BD_ADDR: n-95-my
 Page Scan Rep. Mode: 0x1
 Page Scan Period Mode: 0x2
 Page Scan Mode: 00
 Class: 5a:02:0c
 Clock offset: 0x2f86
Inquiry complete. Status: No error [00]
 
Команда ищет другие устройства bluetooth, как видите, было обнаружено 3 устройства.
Причем в 2-х случаях в поле BD_ADDR указан физический адрес устройства, а одном случае его имя -n-95-my.
Просто для устройства n-95-my внесена соответствующая запись в файл /etc/bluetooth/hosts.
 
# l2ping -a 3c:5a:37:16:30:42 -c 3
44 bytes from 3c:5a:37:16:30:42 seq_no=0 time=9.181 ms result=0 
44 bytes from 3c:5a:37:16:30:42 seq_no=1 time=7.732 ms result=0 
44 bytes from 3c:5a:37:16:30:42 seq_no=2 time=8.728 ms result=0
 
Команда проверяет доступность устройства в сети bluetooth.
Результат, который выводит команда на экран очень похож на результат работы обычной команды ping.
 
# hccontrol -n ubt0hci remote_name_request 3c:5a:37:16:30:42
BD_ADDR: 3c:5a:37:16:30:42
Name: GT-S7070
Этой командой мы запросили имя устройства с адресом 3c:5a:37:16:30:42.
Если необходимо, то можем занести эти данные в файл /etc/bluetooth/hosts.

Немає коментарів:

Дописати коментар