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

Материал из OpenBSD-Wiki
Перейти к навигации Перейти к поиску
Строка 1: Строка 1:
 
Данная статья 100% копипаст с [http://www.openbsd.ru www.openbsd.ru]
 
Данная статья 100% копипаст с [http://www.openbsd.ru www.openbsd.ru]
 
  
 
Поскольку GENERIC ядро не включает в себя ни стек, ни драйверы устройств Bluetooth, необходимо собрать ядро, поддерживающее следующие устройства:
 
Поскольку GENERIC ядро не включает в себя ни стек, ни драйверы устройств Bluetooth, необходимо собрать ядро, поддерживающее следующие устройства:
    # Контроллер Bluetooth
+
# Контроллер Bluetooth
    ubt*       at uhub?
+
ubt* at uhub?
  
    # Поддержка шины Bluetooth
+
# Поддержка шины Bluetooth
    bthub*     at ubt?
+
bthub*   at ubt?
 
 
    # Поддержка HID устройств, работающих через Bluetooth
 
    bthidev*    at bthub?
 
    btkbd*      at bthidev?
 
    btms*      at bthidev?
 
    wskbd*      at btkbd? mux 1
 
    wsmouse*    at btms? mux 0
 
  
 +
# Поддержка 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 следует установить утилиты bluetooth-tools /usr/ports/net/bluetooth-tools.
Строка 21: Строка 19:
  
 
Произведем предварительную настройку. Определим наличие контроллеров Bluetooth в системе и распечатаем их начальную конфигурацию:
 
Произведем предварительную настройку. Определим наличие контроллеров Bluetooth в системе и распечатаем их начальную конфигурацию:
    % btconfig -l
+
% btconfig -l
    ubt0
+
ubt0
    % btconfig ubt0
+
% btconfig ubt0
    ubt0: bdaddr 00:00:00:00:00:00 flags=0<>
+
ubt0: bdaddr 00:00:00:00:00:00 flags=0<>
        num_cmd = 0
+
  num_cmd = 0
        num_acl = 0, acl_mtu = 0
+
  num_acl = 0, acl_mtu = 0
        num_sco = 0, sco_mtu = 0
+
  num_sco = 0, sco_mtu = 0
  
 
Зададим такие параметры как: имя узла, класс устройства узла (ноутбук), режим работы. После чего включим интерфейс:
 
Зададим такие параметры как: имя узла, класс устройства узла (ноутбук), режим работы. После чего включим интерфейс:
    # btconfig ubt0 up name "Q45" pscan switch class 0x02010c
+
# btconfig ubt0 up name "Q45" pscan switch class 0x02010c
    % btconfig -v ubt0
+
% btconfig -v ubt0
    ubt0: bdaddr 00:1f:3a:ec:05:0f flags=3
+
ubt0: bdaddr 00:1f:3a:ec:05:0f flags=3
        num_cmd = 1
+
num_cmd = 1
        num_acl = 8, acl_mtu = 1017
+
num_acl = 8, acl_mtu = 1017
        num_sco = 1, sco_mtu = 64
+
num_sco = 1, sco_mtu = 64
        HCI version: 2.0
+
HCI version: 2.0
        class: [0x02010c] Laptop Computer  
+
class: [0x02010c] Laptop Computer  
        name: "Q45"
+
name: "Q45"
        voice: [0x0060]
+
voice: [0x0060]
        pin: variable
+
pin: variable
        options: pscan switch
+
options: pscan switch
 
Использование HID устройств Bluetooth
 
Использование HID устройств Bluetooth
  
 
Произведем поиск устройств:
 
Произведем поиск устройств:
    % btconfig ubt0 inquiry
+
% btconfig ubt0 inquiry
    Device Discovery from device: ubt0 .... 1 response
+
Device Discovery from device: ubt0 .... 1 response
      1: bdaddr 00:1e:dc:d8:94:0b
+
  1: bdaddr 00:1e:dc:d8:94:0b
      : name "K530i"
+
  : name "K530i"
      : class: [0x5a0204] Cellular Phone   
+
  : class: [0x5a0204] Cellular Phone   
       
+
 
      : page scan rep mode 0x01
+
  : page scan rep mode 0x01
      : clock offset 23944
+
  : clock offset 23944
  
 
Сохраняем имя и адрес устройства в локальном файле Bluetooth-хостов, генерируем PIN код и попытаемся использовать телефон как HID устройство:
 
Сохраняем имя и адрес устройства в локальном файле Bluetooth-хостов, генерируем PIN код и попытаемся использовать телефон как HID устройство:
    # echo "00:1e:dc:d8:94:0b k530i" >>/etc/bluetooth/hosts
+
# echo "00:1e:dc:d8:94:0b k530i" >>/etc/bluetooth/hosts
    # bthcid
+
# bthcid
    # btpin -d ubt0 -a k530i -r -l 5
+
# btpin -d ubt0 -a k530i -r -l 5
    PIN: 84921
+
PIN: 84921
    # btdevctl -d ubt0 -a k530i -s HID
+
# btdevctl -d ubt0 -a k530i -s HID
    local bdaddr: 00:1f:3a:ec:05:0f
+
local bdaddr: 00:1f:3a:ec:05:0f
    remote bdaddr: 00:1e:dc:d8:94:0b
+
remote bdaddr: 00:1e:dc:d8:94:0b
    link mode: encrypt
+
link mode: encrypt
    device type: HID
+
device type: HID
    control psm: 0x0011
+
control psm: 0x0011
    interrupt psm: 0x0013
+
interrupt psm: 0x0013
    Collection page=Generic_Desktop usage=Keyboard
+
Collection page=Generic_Desktop usage=Keyboard
    ...
+
...
    End collection
+
End collection
    Collection page=Generic_Desktop usage=Mouse
+
Collection page=Generic_Desktop usage=Mouse
    Collection page=Generic_Desktop usage=Pointer
+
Collection page=Generic_Desktop usage=Pointer
    ...
+
...
    End collection
+
End collection
    End collection
+
End collection
    # btdevctl -d ubt0 -a k530i -s HID -A
+
# btdevctl -d ubt0 -a k530i -s HID -A
  
 
Появятся сообщения ядра:
 
Появятся сообщения ядра:
    bthub0 at ubt0 00:1f:3a:ec:05:0f
+
bthub0 at ubt0 00:1f:3a:ec:05:0f
    bthidev0 at bthub0 00:1e:dc:d8:94:0b encrypt
+
bthidev0 at bthub0 00:1e:dc:d8:94:0b encrypt
    btkbd0 at bthidev0 reportid 1
+
btkbd0 at bthidev0 reportid 1
    wskbd1 at btkbd0 mux 1
+
wskbd1 at btkbd0 mux 1
    wskbd1: connecting to wsdisplay0
+
wskbd1: connecting to wsdisplay0
    btms0 at bthidev0 reportid 2: 3 buttons.
+
btms0 at bthidev0 reportid 2: 3 buttons.
    wsmouse2 at btms0 mux 0
+
wsmouse2 at btms0 mux 0
    bthidev0: connected
+
bthidev0: connected
  
 
Телефон попросит ввести PIN, после чего предложит использовать себя как HID устройство, давая возможность выбрать из ряда приложений, созданных для проведения презентаций и т.п.
 
Телефон попросит ввести PIN, после чего предложит использовать себя как HID устройство, давая возможность выбрать из ряда приложений, созданных для проведения презентаций и т.п.
Строка 92: Строка 90:
  
 
Отцепим ненужные HID устройства:
 
Отцепим ненужные HID устройства:
    # btdevctl -d ubt0 -a k530i -s HID -D
+
# btdevctl -d ubt0 -a k530i -s HID -D
    # dmesg | tail -6
+
# dmesg | tail -6
    wsmouse2 detached
+
wsmouse2 detached
    btms0 detached
+
btms0 detached
    wskbd1: disconnecting from wsdisplay0
+
wskbd1: disconnecting from wsdisplay0
    wskbd1 detached
+
wskbd1 detached
    btkbd0 detached
+
btkbd0 detached
    bthidev0 detached
+
bthidev0 detached
  
 
Для быстрой настройки устройства можно использовать следующий скрипт (величины задержек установлены экспериментально):
 
Для быстрой настройки устройства можно использовать следующий скрипт (величины задержек установлены экспериментально):

Версия 13:09, 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"