?

Log in

No account? Create an account

Previous Entry Share Next Entry
Подключаю синий зуб.
g0l
Понадобилось вытащить фотки с телефона. Кардридером пользоваться не интересно, так что бум через блютус коннектиться.

Делаю по советам статьи www.opennet.ru

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

Итак, грузим модуль
# kldload ng_ubt

Чтобы добавить данный драйвер в автозагрузку добавляем в /boot/loader.conf строку

ng_ubt_load="YES"

Кстати, есть неплохой справочник для определения USB-устройства по коду, вот тут находится http://www.linux-usb.org/usb.ids

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

ubt0: Broadcom BCM92035DGROM, rev 1.10/0.04, addr 2
ubt0: Broadcom BCM92035DGROM, rev 1.10/0.04, addr 2
ubt0: Interface 0 endpoints: interrupt=0x81, bulk-in=0x82, bulk-out=0x2
ubt0: Interface 1 (alt.config 4) endpoints: isoc-in=0x83, isoc-out=0x3; wMaxPacketSize=64; nframes=5, buffer size=320

Для того, чтобы стек Bluetooth начал работать необходимо скопировать /usr/share/examples/netgraph/bluetooth/rc.bluetooth, например в /usr/local/etc/rc.bluetooth.

Затем запускаем блютус стек
# sh /usr/local/etc/rc.bluetoots start ubt0

Появляется вот примерно такая шняга на экране:
BD_ADDR: 00:02:72:c2:24:cf
Features: 0xff 0xfe 0xd 0x38 0x8 0x8 00 00
< 3-Slot>< 5-Slot>< Encryption>< Slot offset>
< Timing accuracy> < Switch> < Hold mode> < Sniff mode> < RSSI> < Channel quality> < SCO link> < HV2 packets> < HV3 packets>< u-law log> < A-law log> < CVSD> < Power control>
< Transparent SCO data>
Max. ACL packet size: 377 bytes
Number of ACL packets: 10
Max. SCO packet size: 16 bytes
Number of SCO packets: 0

В конце работы останавливаем:

# sh /usr/local/etc/rc.bluetoots stop ubt0

Для автоматического монтирования/размонтирования в той статье по которой я делал советуют:

...добавил такие команды в /etc/usbd.conf
device "Bluetooth adapter"
vendor 0x1131
product 0x1001
attach "/usr/local/etc/rc.bluetooth start ${DEVNAME}"
detach "/usr/local/etc/rc.bluetooth stop ${DEVNAME}"

Теперь во время вставления адаптера (или при загрузке если он уже в разьёме) стек будет автоматически включен. В файле rc.bluetooth осуществляется загрузка модулей ng_hci(4), ng_l2cap(4), ng_btsocket(4) и ng_bluetooth(4), создание и соединение netgraph(4) нод. На мой взгляд в нём также целесообразно размещать загрузку/выгрузку демонов, необходимых для работы Bluetooth.
Дополнительные настройки стека bluetooth доступны через переменные sysctl(8) net.bluetooth.*.

Далее начинаем поиск устройств. Для этого нам надо определить MAC-адреса.

#hccontrol -n ubt0hci inquiry

Появится списочег откликов bluetooth-устройств типа вот такого:

Inquiry result, num_responses=1
Inquiry result #0
BD_ADDR: kate
Page Scan Rep. Mode: 0x1
Page Scan Period Mode: 0x2
Page Scan Mode: 00
Class: 50:02:0c
Clock offset: 0x3996

Отклик один, знач это как раз мой, точнее, Катюхин телефончик. Теперь вот по этой строке
BD_ADDR: 00:12:d1:fc:59:35
мы знаем мак-адрес телефона. Для удобства, чтоб не надо было постоянно обращаться к нему в цифирном виде, прописываем в файл /etc/bluetooth/hosts строку

00:12:d1:fc:59:35 kate

Кстати, запросить у устройства его имя можно вот такой командой:

# hccontrol -n ubt0hci remote_name_request 00:12:d1:fc:59:35
BD_ADDR: 00:12:d1:fc:59:35
Name: Kate

Оппа, это и правда Катюхин телефончик...
Для проверки отклика устройства делаем пинг. Точнее, не обычный пинг, а спец пинг:

# l2ping -a kate -c 3
0 bytes from kate seq_no=0 time=1692.376 ms result=0
0 bytes from kate seq_no=1 time=82.259 ms result=0
0 bytes from kate seq_no=2 time=54.309 ms result=0

Теперь прописываем устройства в постоянные дружественные:
Для защиты соединения в протоколе Bluetooth предусмотрена процедура обмена PIN кодом между устройствами (Bluetooth Pairing), после чего (в случае совпадения PIN кода) создается ключ, с помощью которого и шифруются данные. В OS FreeBSD за эту эти действия отвечает демон
hcsecd(8). Его настройки хранятся в файле /etc/bluetooth/hcsecd.conf. Добавим туда наш телефон:

device {
bdaddr 00:12:d1:fc:59:35;
name "Kate's N71";
key nokey;
pin "12345";
}

Запускаем hcsecd (с ключом -d для вывода отладочной инфы)
/usr/sbin/hcsecd -d

Он остаётся висеть, вроде как ждёт начала сеанса связи.
Берём телефон, там уже автоматом нашлось bluetooth-устройство free.g0l.ru(ubt0) и устанавливаем с ним соединение.

Получить список поддерживаемых телефоном фич можно командой # sdpcontrol -a kate browse

Для N71 выводится оч неслабый списочек, здесь приводить его не буду.

Короче, пока на этом и остановился, дальше возиться сегодня неохота, устамши мы..

Заметка закросспостена с моего блога g0l.ru