Использование Bluetooth в OpenBSD
Данная статья 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"