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