AC100 Bluetooth Phone
Предисловие
Эти раскопки больше о том, как работает это все изнутри или как все сделать без иксов. В большинстве дистрибутивов нужно лишь потыкаться в меню :)
Раскопки в интернете
Настоятельно рекомендую прочитать статью "Подключаем Bluetooth телефон к Linux, или Синий зуб на службе cистемного администратора", перед тем, как что-то настраивать. Статья дает хорошее представление о том, что такое bluetooth, какие команды и как можно использовать для настройки и просмотра статусов. Чуть более актуальная (т.к. bluez поменялся, со вермени написания первой статьи) информация по Bluez описана в статье Manually using Bluetooth. Документация bluez находится в дереве исходников в папке doc.
Опционально можно почитать: archlinux: Bluetooth How to setup Bluetooth Bluetooth в Linux Linux и bluetooth телефон Bluetooth, gprs Настройка GPRS соединения может производиться аналогично настройке внутреннего модема, либо, полагаю, с использованием Network Manager'а.
Настройка bluetooth
Основную информацию я почерпнул из двух статей, описанных выше, - "Подключаем Bluetooth телефон к Linux, или Синий зуб на службе cистемного администратора", "using Bluetooth]".
Что нам потребуется bluez (у меня версия 4.91) - предоставляет утилиты hciconfig, sdptool, hcitool, l2ping dbus pthon dbus-python pygobject Пакеты ставить в соответствии со своим дистрибутивом я надеюсь все умеют.
Рассматриваем bluetooth подробнее Раньше bluez состоял из множества демонов, теперь же остался только один - bluetoothd. Если сервис bluetooth не застартован (как стартануть покажу позже), то hciconfig покаже следующую информацию.
% hciconfig -a hci0: Type: BR/EDR Bus: USB BD Address: 00:00:00:00:00:00 ACL MTU: 0:0 SCO MTU: 0:0 DOWN RX bytes:0 acl:0 sco:0 events:0 errors:0 TX bytes:0 acl:0 sco:0 commands:0 errors:0
Сейчас статус DOWN и BD Address (Bluetooth Device Address) нулевой.
Стартуем сервис (конфиги пока не трогаем) и смотрим, что поменялось.
% sudo chmod a+x /etc/rc.d/rc.bluetooth % sudo /etc/rc.d/rc.bluetooth start % hciconfig -a hci0: Type: BR/EDR Bus: USB BD Address: 6C:62:6D:16:47:52 ACL MTU: 310:10 SCO MTU: 64:8 UP RUNNING PSCAN RX bytes:970 acl:0 sco:0 events:29 errors:0 TX bytes:606 acl:0 sco:0 commands:29 errors:0 Features: 0xff 0xff 0x8f 0xfe 0x9b 0xff 0x59 0x83 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'slackware-0' Class: 0x480100 Service Classes: Capturing, Telephony Device Class: Computer, Uncategorized HCI Version: 2.1 (0x4) Revision: 0x149c LMP Version: 2.1 (0x4) Subversion: 0x149c Manufacturer: Cambridge Silicon Radio (10)
Для поиска устройств можно воспользоваться утилитой hcitool
% hcitool scan Scanning ... 00:24:04:2C:C0:5C Stuw-phone
или же сразу смотреть детальный список доступных сервисов утилитой sdptool (вывод достаточно большой даже для одного устройства).
% sdptool browse Inquiring ... Browsing 00:24:04:2C:C0:5C ... Service Name: Network Access Point Service Service Description: Personal Ad-hoc Network Service which provides access to a network Service RecHandle: 0x10000 Service Class ID List: "Network Access Point" (0x1116) Protocol Descriptor List: "L2CAP" (0x0100) PSM: 15 "BNEP" (0x000f) Version: 0x0100 SEQ8: dd 6 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Network Access Point" (0x1116) Version: 0x0100 ...
Если ей не указать BD Address, то она будет искать все сервисы на всех девайсах. Для поиска сервисов на одном устройстве, нужно указать его.
% sdptool browse 00:24:04:2C:C0:5C .. Service Name: Dial-up networking Service RecHandle: 0x10003 Service Class ID List: "Dialup Networking" (0x1103) "Generic Networking" (0x1201) Protocol Descriptor List: "L2CAP" (0x0100) "RFCOMM" (0x0003) Channel: 1 Language Base Attr List: code_ISO639: 0x656e encoding: 0x6a base_offset: 0x100 Profile Descriptor List: "Dialup Networking" (0x1103) Version: 0x0100 ...
Сервисов устройство может поддерживать много, но нас пока интересует один - Dial-up networking. Тут важно запомнить/записать значение параметра channel.
Проверить связь с устройством можно командой l2ping
% sudo l2ping 00:24:04:2C:C0:5C Ping: 00:24:04:2C:C0:5C from 6C:62:6D:16:47:52 (data size 44) ... 0 bytes from 00:24:04:2C:C0:5C id 0 time 7.74ms 0 bytes from 00:24:04:2C:C0:5C id 1 time 24.23ms 0 bytes from 00:24:04:2C:C0:5C id 2 time 23.62ms 0 bytes from 00:24:04:2C:C0:5C id 3 time 30.45ms 0 bytes from 00:24:04:2C:C0:5C id 4 time 22.37ms 5 sent, 5 received, 0% loss
Посмотреть информацию об устройстве поможет hcitool
% sudo hcitool info 00:24:04:2C:C0:5C Requesting information ... BD Address: 00:24:04:2C:C0:5C Device Name: Stuw-phone LMP Version: 2.0 (0x3) LMP Subversion: 0x2222 Manufacturer: Broadcom Corporation (15) Features: 0xbf 0xee 0x0f 0xce 0x98 0x39 0x00 0x00 <3-slot packets> <5-slot packets> <encryption> <slot offset> <timing accuracy> <role switch> <sniff mode> <RSSI> <channel quality> <SCO link> <HV3 packets> <u-law log> <A-law log> <CVSD> <paging scheme> <power control> <transparent SCO> <EDR ACL 2 Mbps> <EDR ACL 3 Mbps> <enhanced iscan> <inquiry with RSSI> <extended SCO> <AFH cap. slave> <AFH class. slave> <3-slot EDR ACL> <5-slot EDR ACL> <AFH cap. master> <AFH class. master> <EDR eSCO 2 Mbps>
Теперь нам нужно (на самом деле я пока не проверял обязательность, но полагаю это позволяет выполнять некоторые команды без доп аргументов. могу и ошибаться :) ) поменять конфиг /etc/bluetooth/rfcomm.conf. У меня получился вот такой конфиг (значение channel мы узнали чуть раньше командой sdptool browse 00:24:04:2C:C0:5C).
# # RFCOMM configuration file. # rfcomm0 { # Automatically bind the device at startup bind no; # Bluetooth address of the device device 00:24:04:2C:C0:5C; # RFCOMM channel for the connection channel 1; # Description of the connection comment "Nokia 5130 stuw"; }
Также советую поменять значение Name в /etc/bluetooth/main.conf, на что-то более вам понятное (это имя будет отображаться на телефоне, когда тошка будет конектиться к нему).
... # Default adaper name # %h - substituted for hostname # %d - substituted for adapter id Name = ac100-stuw ...
Пробуем соединиться
% rfcomm connect rfcomm0
Но тут меня ждал облом - код на телефоне я вводил, но соединение обламывалось, т.к. на тошке про код ничего не было известно. Порыскав в инете я нашел информацию о том, что теперь нужно использовать simple-agent (находится в дереве исходников bluez, написан на питоне). Для wget нужно адрес брать в кавычки, иначе будете как я по недосмотру скачивать html с данными о ревизиях или что-то подобное.
% wget "http://git.kernel.org/.....43b7789847d40" % chmod a+x simple-agent % sudo ./simple-agent hci0 00:24:04:2c:c0:5c ... тут запросится PIN ...
Я ввел на телефоне тот же самый pin код и разрешил автоподключение. После перезагрузки компа нужно делать bind (если bluetooth на телефоне не был включен и не стояла включенной опция bind в rfcomm.conf). Операция прошла успешно и у меня появился девайс /dev/rfcomm0
% sudo rfcomm bind 0 % rfcomm rfcomm0: 00:24:04:2C:C0:5C channel 1 clean % ls -l /dev/rfcomm0 crw-rw---- 1 root dialout 216, 0 Nov 13 16:11 /dev/rfcomm0
При попытке сделать cat из девайса у меня ничего не вывелось, но автоматически установилось соединение с телефоном. При отмене cat по ctrl+c соединение прекратилось. Что и как можно оптимизировать и как настроить GPRS соединение мне еще предстоит выяснить.
Подключаемся к internet Я использовал статью о настройке внутреннего модема с нашей вики для настройки своего соединения. Единственное заменил /dev/ttyACM0 на /dev/rfcomm0 и mts на beeline :) Для подключения я использовал команду pppd call beeline, т.к. pon команды в моем дистре нет, и я не стал искать, в каком пакете она идет.
Возможные проблемы Возможно у Вас этой проблемы не возникнет, но у меня не резолвились адреса - не работал DNS. Т.е. ping ya.ru возвращает ошибку - unknown host, а ping 8.8.8.8 проходит на ура. Решил я это следующим образом (возможно это не правильный способ, но самый быстрый :) ):
sudo mv /etc/resolve.conf /etc/resolve.conf.bak sudo ln -s /etc/ppp/resolve.conf /etc/resolve.conf