Использование Bluetooth в OpenBSD: различия между версиями

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
Строка 103: Строка 103:
 
Для быстрой настройки устройства можно использовать следующий скрипт (величины задержек установлены экспериментально):
 
Для быстрой настройки устройства можно использовать следующий скрипт (величины задержек установлены экспериментально):
  
<pre>#!/bin/sh
+
<pre>#!/bin/sh
  
 
DEVICE="k530i"
 
DEVICE="k530i"

Версия 13:07, 25 мая 2013

Данная статья 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"