PLD Linux + bluetooth + nokia + gprs
Poniższy opis powstał na bazie różnych HOWTO na temat bluetooth.
Sprzęt
Adapter USB Bluetooth Trust BT180, laptop ASUS A3FC-5056 z systemem
PLD Linux 2.0 (Ac) i kernelem 2.6.17 oraz telefon Nokia 6230i.
Soft
Dla adaptera bluetooth na USB wymagane są moduły do kernela:uhci_hcd hci_usb l2cap bnepBluetooth jest obsługiwany w Linuxie przez Bluez.
W systemie PLD Linux należy zainstalować następujące pakiety:
bluez-hcidump-1.30-1 bluez-utils-init-2.25-3 bluez-utils-2.25-3 bluez-hciemu-1.2-1 bluez-qube-0.1-2 bluez-libs-2.25-1 bluez-pin-0.26-2 ppp-2.4.2-7oraz sprawdzić obecność urządzeń /dev/rfcomm*
ls -la /dev/rfcomm* crw-rw-r-- 1 root ttyS 216, 0 2005-12-16 15:49 /dev/rfcomm0 crw-rw-r-- 1 root ttyS 216, 1 2005-12-16 15:49 /dev/rfcomm1 crw-rw-r-- 1 root ttyS 216, 10 2005-12-16 15:49 /dev/rfcomm10 crw-rw-r-- 1 root ttyS 216, 11 2005-12-16 15:49 /dev/rfcomm11 crw-rw-r-- 1 root ttyS 216, 12 2005-12-16 15:49 /dev/rfcomm12 crw-rw-r-- 1 root ttyS 216, 13 2005-12-16 15:49 /dev/rfcomm13 crw-rw-r-- 1 root ttyS 216, 14 2005-12-16 15:49 /dev/rfcomm14 crw-rw-r-- 1 root ttyS 216, 15 2005-12-16 15:49 /dev/rfcomm15 crw-rw-r-- 1 root ttyS 216, 2 2005-12-16 15:49 /dev/rfcomm2 crw-rw-r-- 1 root ttyS 216, 3 2005-12-16 15:49 /dev/rfcomm3 crw-rw-r-- 1 root ttyS 216, 4 2005-12-16 15:49 /dev/rfcomm4 crw-rw-r-- 1 root ttyS 216, 5 2005-12-16 15:49 /dev/rfcomm5 crw-rw-r-- 1 root ttyS 216, 6 2005-12-16 15:49 /dev/rfcomm6 crw-rw-r-- 1 root ttyS 216, 7 2005-12-16 15:49 /dev/rfcomm7 crw-rw-r-- 1 root ttyS 216, 8 2005-12-16 15:49 /dev/rfcomm8 crw-rw-r-- 1 root ttyS 216, 9 2005-12-16 15:49 /dev/rfcomm9a w przypadku ich braku wygenerować odpowiednie wpisy skryptem:
#!/bin/sh C=0; while [ $C -lt 16 ]; do if [ ! -c /dev/rfcomm$C ]; then mknod -m 666 /dev/rfcomm$C c 216 $C fi C=`expr $C + 1` doneNastępnie dostosowujemy odpowiednio /etc/bluetooth/hcid.conf.
#
# HCI daemon configuration file.
#
# 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 /bin/bluepin;
pin_helper /usr/local/bin/sendpin;
}
# Default settings for HCI devices
device {
# Local device name
# %d - device id
# %h - host name
name "BlueZ (%d)";
# Local device class
class 0x3e0100;
# 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;
#
# lm accept,master;
# 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;
}
W pliku wykonywalnym /usr/local/bin/sendpin umieszczamy PINktórym autentykować się będą komputer oraz telefon, zawiera on:
#!/bin/sh echo "PIN:123456"Podłączamy adapter bluetooth do portu usb i startujemy obsługę bluetooth poleceniem
/etc/rc.d/init.d/bluetooth startSprawdzamy czy poprawnie wykryte zostało nasze urządzenie poleceniem
hciconfig -aktóre powinno zwrócić informacje
hci0: Type: USB
BD Address: 00:0B:0D:62:27:1A ACL MTU: 377:10 SCO MTU: 64:8
UP RUNNING PSCAN ISCAN AUTH
RX bytes:656 acl:0 sco:0 events:20 errors:0
TX bytes:327 acl:0 sco:0 commands:20 errors:0
Features: 0xff 0xfe 0x0d 0x38 0x08 0x08 0x00 0x00
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'BlueZ (0)'
Class: 0x3e0100
Service Classes: Networking, Rendering, Capturing
Device Class: Computer, Uncategorized
HCI Ver: 1.2 (0x2) HCI Rev: 0x4 LMP Ver: 1.2 (0x2) LMP Subver: 0x309
Manufacturer: Broadcom Corporation (15)
Jeśli nie pojawi się status podobny o powyższego można spróbować sekwencji:
hciconfig hci0 down hciconfig hci0 up hciconfig -aBrak informacji o urządzeniu oznacza iż nie działa ono prawidłowo.
Łączenie urządzeń
Wydajemy polecenie aby komputer wyszukał urządzenia bluetooth dostępne w jego pobliżu.Należy pamiętać aby uaktywnić bluetooth w telefonie. Następnie wykonać polecenie
hcitool scanPowinno ono zwrócić informację:
Scanning ...
00:15:DE:8F:DF:AA Nokia 6230i
Sprawdzamy połączenie w warstwie drugiej parując przy okazji telefon z komputerem przy użyciu PINu z pliku /usr/local/bin/sendpin
l2ping 00:15:DE:8F:DF:AAPowinniśmy dostać w odpowiedzi
Ping: 00:15:DE:8F:DF:AA from 00:0B:0D:62:27:1A (data size 44) ... 0 bytes from 00:15:DE:8F:DF:AA id 0 time 75.72ms 0 bytes from 00:15:DE:8F:DF:AA id 1 time 7.78ms 0 bytes from 00:15:DE:8F:DF:AA id 2 time 8.73msNastepnie sprawdzamy obecność usługi Dialup na naszym telefonie
sdptool browsePowinniśmy dostać odpowiedz podobną do fragmentu poniżej:
Inquiring ...
Browsing 00:15:DE:8F:DF:AA ...
Service Name: Dial-up networking
Service RecHandle: 0x10000
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
Sprawdzamy na jakim kanale pracuje usługa Dialup (w tym przypadku kanał 1)
a następnie wykonujemy.
rfcomm bind 0 00:15:DE:8F:DF:AA 1
pierwsza cyfra to numer urządzenia rfcomm, druga to adres bluetooth telefonu the bluetooth a trzecia to numer kanału Dialup.
Ta komenda łączy urządzenie /dev/rfcomm0 z telefonem.
Połączenie przez GPRS
Na tym etapie można już użyć pppd aby połączyć się z internetem.
Dla połączeń ppp przez GPRS niezbędne jest załadowanie odpowiednich modułów i opcji do obsługi połączeń ppp.
W pliku /etc/modprobe.conf dodajemy:
alias /dev/ppp ppp_generic alias char-major-108 ppp_generic alias tty-ldisc-3 ppp_async alias tty-ldisc-14 ppp_synctty alias ppp-compress-21 bsd_comp alias ppp-compress-24 ppp_deflate alias ppp-compress-26 ppp_deflate options ppp_async flag_time=0Aby wywołać połączenie ppp wpisujemy
pppd /dev/rfcomm0 noauth nocrtscts noipdefault novj novjccomp defaultroutegdzie dla połączenia GPRS plik /etc/ppp/nokiazawiera
connect 'chat -v -f /etc/ppp/nokia' &
"" "ath" OK "atdt*99#" CONNECT
Automatyzacja
Poniżej przykład skryptu automatycznie łączącego się z internetem przez bluetooth i GPRS.
#!/bin/sh
ifdown eth0
killall -9 pppd
echo Podłącz urządzenie bluetooth i naciśnij enter
read
/etc/rc.d/init.d/bluetooth restart
sleep 1
hciconfig hci0 down
sleep 1
hciconfig hci0 up
sleep 1
hciconfig -a
echo Jeśli urządzenie aktywne naciśnij enter, jeśli nie spróbuj ponownie
używając ctrl-c
echo Sprawdzam ping w warstwie drugiej
l2ping -c 3 00:15:DE:8F:DF:AA
rfcomm release 0 2> /dev/null
rfcomm bind 0 00:15:DE:8F:DF:AA 1
pppd /dev/rfcomm0 noauth nocrtscts noipdefault novj novjccomp defaultroute
connect 'chat -v -f /etc/ppp/nokia' &
echo Połączenie bluetooth powinno być aktywne za chwilę, aby zakończyć
wpisz killall -9 pppd oraz ifup eth0
Koniec.