воскресенье, 25 апреля 2010 г.

Работа с bluetooth

Приведена подборка советов из моих заметок примерно 5-ти летней давности. Может, кто всплакнет над ними на досуге, вспомниная времена былые. Впрочем, для встраиваемых устройст кое-что из описанного ниже по-прежнему может быть актуально.

OBEX
Устанавливаем пакет для работы с OPEN OBEX
apt-get install obexftp
После этого перезапускаем bluez-utils
/etc/init.d/bluez-utils restart
Теперь мы можем, например, получить список всех директорий первого bluetooth-устройства
obexftp -b -l
Или получить список директорий устройства 00:12:62:C0:6E:9E
obexftp -b 00:12:62:C0:6E:9E -l
Следующая команда отправляет mp3-файл /tmp/1/Mihail_Boyarskii_-_Vstrecha_v_puti.mp3 на сотовый телефон
obexftp -b -p /tmp/1/Mihail_Boyarskii_-_Vstrecha_v_puti.mp3
Здесь также можно указать устройство 00:12:62:C0:6E:9E и папку назначения "Memory card" (карта памяти)
obexftp -b 00:12:62:C0:6E:9E --chdir "Memory card" -p /tmp/1/Mihail_Boyarskii_-_Vstrecha_v_puti.mp3
Отметим, что указанный в справке ключ -c не работает. Также предоставляется полезная возможность одной командой загрузить список файлов, например, так:
obexftp -b 00:12:62:C0:6E:9E --chdir "Memory card" -p *.mp3
При отправке на телефон списка файлов разрешение на сохранение файла запрашивается только один раз.
Другие возможные команды и ключи можно посмотреть в справке
man obexftp

Для пересылки приложения J2ME на телефон можно воспользоваться утилитами gammu и wammu
Добавьте следующую строку в sources.list
deb http://debian.cihar.com/ unstable gammu
Установите утилиты
apt-get install gammu wammu
Конфигурационный файл из пакета gammu необходимо поправить следующим образом:
#/home/имя_пользователя/.gammurc
Device=00:12:62:C0:6E:9E
Connection=bluephonet
SyncTime=no
LockDevice=yes
StartInfo=no
Информацию по работе с телефонами Nokia можно получить также
#gammu --help nokia
В ответ получаем следующее
--nokiaaddfile Application|Game file [-readonly]
А теперь можно отправить приложение на телефон командой
gammu --nokiaaddfile Application /mnt/c/work/WTK2.1/apps/FPDemo1/bin/FPDemo1
Аналогично пересылаются игры. Отметим, что название приложения указывается без расширения jar или jad.
Кроме того, указанные утилиты позволяют работать с записной книгой, а также получать доступ к другим функциям телефона.
Если вы хотите удаленно управлять через bluetooth программой xmms, вам понадобится приложение
http://bemused.sourceforge.net/
На телефон для этой цели нужно установить мидлет
http://fred.hexbox.de/bemused/


GPRS
1.Установить поддержку bluetooth и пакет утилит bluez-utils
2.Поправить конфиги в /etc/bluetooth/

В hcid.conf указать скрипт, который перешлет телефону при подключении его pin-код
После строки
# PIN helper
нужно написать
pin_helper /etc/bluetooth/pin;

Файл hcid.conf
#
# HCI daemon configuration file.
#
# $Id: hcid.conf,v 1.3 2002/07/18 18:12:46 maxk Exp $
#

# HCId options
options {
# Automatically initialize new devices
autoinit yes;

# Security Manager mode
# none - Security manager disabled
# auto - Use local PIN for incoming connections
# user - Always ask user for a PIN
#
security auto;

# Pairing mode
# none - Pairing disabled
# multi - Allow pairing with already paired devices
# once - Pair once and deny successive attempts
pairing multi;

# PIN helper
pin_helper /etc/bluetooth/pin;
}

# Default settings for HCI devices
device {
# Local device name
# %d - device id
# %h - host name
name "%h-%d";

# Local device class
class 0x100;

# Default packet type
#pkt_type DH1,DM1,HV1;

# Inquiry and Page scan
iscan enable; pscan enable;

# Default link mode
# none - no specific policy
# accept - always accept incoming connections
# master - become master on incoming connections,
# deny role switch on outgoing connections
#
#lm accept,master;
#
lm accept;

# Default link policy
# none - no specific policy
# rswitch - allow role switch
# hold - allow hold mode
# sniff - allow sniff mode
# park - allow park mode
#
#lp hold,sniff;
#
lp hold,sniff,park;

# Authentication and Encryption
#auth enable;
#encrypt enable;
}

Теперь создаем исполняемый скрипт /etc/bluetooth/pin, где xxxx – PIN-код телефона

Файл pin
#!/bin/sh
echo "PIN:xxxx"

3.Ищем все доступные bluetooth-устройства
hcitool scan
Выбираем MAC-адрес нужного. Дополнительную информацию об устройстве можно (но не необходимо) получить командой
hcitool info [MAC]
4.Определяем список доступных сервисов для выбранного bluetooth-устройства
sdptool browse [MAC]
ищем “Dial-up networking channel”, далее [channel]
5.Присоединяем нужный сервис к любому свободному виртуальному устройству
rfcomm bind [device] [MAC ] [channel]
Список уже подключенных виртуальных устройств и соответствующих каналов можно просмотреть командой
rfcomm show
6.Запускаем pppd для подключения к сети
pppd call bluetooth-gprs

Файл /etc/chatscripts/bluetooth-gprs(стандартный, можно использовать с irda-соединением)
# This chatfile was generated by pppconfig 2.3.2.
# Please do not delete any of the comments. Pppconfig needs them.
#
# ispauth PAP
# abortstring
ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED
# modeminit
'' ATZ
# ispnumber
OK "ate1"
OK 'at+cgdcont=1,"IP","internet.mc","",0,0'
OK "atdt*99#"
# ispconnect
CONNECT \d\c
# prelogin

# ispname
# isppassword
# postlogin

# end of pppconfig stuff

Файл /etc/ppp/peers/bluetooth-gprs
lcp-echo-failure 0
lcp-echo-interval 0
debug 10
connect "/usr/sbin/chat -v -f /etc/chatscripts/bluetooth-gprs"
/dev/rfcomm0
115200
crtscts
local
noipdefault
ipcp-accept-local
defaultroute
usepeerdns
novj
nobsdcomp
novjccomp
nopcomp
noaccomp
noauth

Комментарий:
*99# - для сотовых телефонов, отличных от Nokia, может быть другим
internet.mc – точка доступа для оператора Мегафон в центральном регионе

Возможные неисправности и методы их устранения:
1.Нестабильная работа Bluetooth – заменить модуль ядра uhci на usb-uhci
2.hcitool scan после запуска сразу же отвечает, что все хорошо, но ни одно устройство не найдено. В этом случае следует запустить демон /etc/init.d/bluez-utils start


Access point

Recommended:
Install packets with usefull utils
apt-get install ip-route
Use as so:
ip a a 192.168.21.1/24 dev bnep0 brd +
ip a d 192.168.21.2/24 dev bnep0 brd +

1.If bluetooth package not installed jet, install this
apt-get install bluez-utils
2. Adding this section into network interfaces
#/etc/network/interfaces
iface bnep0 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip a a 192.168.21.1/24 dev $IFACE brd +
down ifconfig $IFACE down
brctl addif br0 $1

3. Replace this string
#/etc/bluetooth/hcid.conf
# lm accept;
lm accept,master;

4. Create directory /etc/bluetooth/pan/ and add this excutable script
#/etc/bluetooth/pan/dev-up
#!/bin/sh
/sbin/ifup $1

Комментариев нет:


(C) Alexey Pechnikov aka MBG, mobigroup.ru