Оригинальная статья - http://openbsd.ru/docs/howto-bluetooth.html

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

Поскольку 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"