Использование Bluetooth в OpenBSD

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску

Данная статья 100% копипаст с www.openbsd.ru

Поскольку GENERIC ядро не включает в себя ни стек, ни драйверы устройств Bluetooth, необходимо собрать ядро, поддерживающее следующие устройства:

# Контроллер Bluetooth
ubt*  at uhub?
# Поддержка шины Bluetooth
bthub*   at ubt?
# Поддержка HID устройств, работающих через Bluetooth
bthidev* at bthub?
btkbd*   at bthidev?
btms*    at bthidev?
wskbd*   at btkbd? mux 1
wsmouse* at btms? mux 0

Для управления устройствами Bluetooth следует установить утилиты bluetooth-tools /usr/ports/net/bluetooth-tools. Базовая конфигурация

Произведем предварительную настройку. Определим наличие контроллеров Bluetooth в системе и распечатаем их начальную конфигурацию:

% btconfig -l
ubt0
% btconfig ubt0
ubt0: bdaddr 00:00:00:00:00:00 flags=0<>
 num_cmd = 0
 num_acl = 0, acl_mtu = 0
 num_sco = 0, sco_mtu = 0

Зададим такие параметры как: имя узла, класс устройства узла (ноутбук), режим работы. После чего включим интерфейс:

# btconfig ubt0 up name "Q45" pscan switch class 0x02010c
% btconfig -v ubt0
ubt0: bdaddr 00:1f:3a:ec:05:0f flags=3
num_cmd = 1
num_acl = 8, acl_mtu = 1017
num_sco = 1, sco_mtu = 64
HCI version: 2.0
class: [0x02010c] Laptop Computer 
name: "Q45"
voice: [0x0060]
pin: variable
options: pscan switch

Использование HID устройств Bluetooth

Произведем поиск устройств:

 % btconfig ubt0 inquiry
 Device Discovery from device: ubt0 .... 1 response
   1: bdaddr 00:1e:dc:d8:94:0b
   : name "K530i"
   : class: [0x5a0204] Cellular Phone   

   : page scan rep mode 0x01
   : clock offset 23944

Сохраняем имя и адрес устройства в локальном файле Bluetooth-хостов, генерируем PIN код и попытаемся использовать телефон как HID устройство:

# echo "00:1e:dc:d8:94:0b k530i" >>/etc/bluetooth/hosts
# bthcid
# btpin -d ubt0 -a k530i -r -l 5
PIN: 84921
# btdevctl -d ubt0 -a k530i -s HID
local bdaddr: 00:1f:3a:ec:05:0f
remote bdaddr: 00:1e:dc:d8:94:0b
link mode: encrypt
device type: HID
control psm: 0x0011
interrupt psm: 0x0013
Collection page=Generic_Desktop usage=Keyboard
...
End collection
Collection page=Generic_Desktop usage=Mouse
Collection page=Generic_Desktop usage=Pointer
...
End collection
End collection
# btdevctl -d ubt0 -a k530i -s HID -A

Появятся сообщения ядра:

bthub0 at ubt0 00:1f:3a:ec:05:0f
bthidev0 at bthub0 00:1e:dc:d8:94:0b encrypt
btkbd0 at bthidev0 reportid 1
wskbd1 at btkbd0 mux 1
wskbd1: connecting to wsdisplay0
btms0 at bthidev0 reportid 2: 3 buttons.
wsmouse2 at btms0 mux 0
bthidev0: connected

Телефон попросит ввести PIN, после чего предложит использовать себя как HID устройство, давая возможность выбрать из ряда приложений, созданных для проведения презентаций и т.п.

Выход из приложения означает конец сессии. Этот факт регистрируется и ядром: bthidev0: disconnected

Отцепим ненужные HID устройства:

# btdevctl -d ubt0 -a k530i -s HID -D
# dmesg | tail -6
wsmouse2 detached
btms0 detached
wskbd1: disconnecting from wsdisplay0
wskbd1 detached
btkbd0 detached
bthidev0 detached

Для быстрой настройки устройства можно использовать следующий скрипт (величины задержек установлены экспериментально):

#!/bin/sh

DEVICE="k530i"
NAME="Q45"
UBT=$(btconfig -l | head -1)

if [ "${UBT}" = "" ]; then
echo "No bluetooth controllers have been found!"
exit 1
fi

if [ "${1}" = "-d" ]; then
btdevctl -d ${UBT} -a ${DEVICE} -s HID -D
pkill bthcid
exit $?
fi

echo "configuring bluetooth: ${UBT}"
btconfig ${UBT} up name "${NAME}" pscan switch class 0x02010c
btconfig -v ${UBT}

sleep 2

echo -n "starting bthcid..."
bthcid && echo " ok"

sleep 5

echo -n "generating pin code: "
btpin -d ${UBT} -a ${DEVICE} -r -l 5

sleep 3

echo -n "attaching HID devices..."
btdevctl -d ${UBT} -a ${DEVICE} -s HID >/tmp/hid.log 2>&1
btdevctl -d ${UBT} -a ${DEVICE} -s HID -A && echo " done"