====== BlueTooth ====== Lien: *http://www.meeus-d.be/linux/bluetooth.html *http://www.nerux.org/index.php/Bluetooth_irda *http://www.developershome.com/sms/ *http://www.michaelwood.me.uk/wordpress/2007/03/ ===== bases ===== ==== Brancher ==== Au départ, il n'y a rien: # hcitool dev Devices: On branche la clé **USB-Bluetooth** en reluquant dans le syslog: Oct 28 11:06:15 nin kernel: usb 2-7.1.4: new full speed USB device using ehci_hcd and address 13 Oct 28 11:06:25 nin kernel: usb 2-7.1.4: configuration #1 chosen from 1 choice Oct 28 11:06:25 nin hcid[21933]: HCI dev 0 registered Oct 28 11:06:25 nin hcid[21933]: Register path:/org/bluez/hci0 fallback:0 Oct 28 11:06:25 nin hcid[21933]: HCI dev 0 up Oct 28 11:06:25 nin hcid[21933]: Device hci0 has been added Oct 28 11:06:25 nin hcid[21933]: Starting security manager 0 Oct 28 11:06:25 nin hcid[21933]: Device hci0 has been activated Notons le "lag" de 10 secondes entre le branchement et les logs. Et alors: # hcitool dev Devices: hci0 00:11:67:36:52:EF La "config" de la clé Bluetooth: # hciconfig hci0: Type: USB BD Address: 00:11:67:36:52:EF ACL MTU: 678:8 SCO MTU: 48:10 UP RUNNING PSCAN RX bytes:401 acl:0 sco:0 events:18 errors:0 TX bytes:320 acl:0 sco:0 commands:18 errors:0 Plus d'info: # hciconfig hci0 -a hci0: Type: USB BD Address: 00:11:67:36:52:EF ACL MTU: 678:8 SCO MTU: 48:10 UP RUNNING PSCAN RX bytes:3362 acl:4 sco:0 events:137 errors:0 TX bytes:1268 acl:4 sco:0 commands:78 errors:0 Features: 0xbf 0xfe 0x8d 0x78 0x08 0x18 0x00 0x00 Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 Link policy: RSWITCH HOLD SNIFF PARK Link mode: SLAVE ACCEPT Name: 'nin-0' Class: 0x3e0100 Service Classes: Networking, Rendering, Capturing, Object Transfer, Audio Device Class: Computer, Uncategorized HCI Ver: 1.2 (0x2) HCI Rev: 0x1fe LMP Ver: 1.2 (0x2) LMP Subver: 0x1fe Manufacturer: Integrated System Solution Corp. (57) Rendons cette clé visible: # hciconfig hci0 up piscan Verifions: # hciconfig hci0 -a hci0: Type: USB BD Address: 00:11:67:36:52:EF ACL MTU: 678:8 SCO MTU: 48:10 UP RUNNING PSCAN ISCAN ... "ISCAN" => visible ??? ==== Scan ==== === MacBookPro === Y a t'il des equipements qui emettent sur le réseau "Bluethooth" (prévoir une attente d'une dizaine de secondes) # hcitool scan Scanning ... 00:1B:63:aa:bb:cc MacBookPro_de_XXXXXX On en veut plus: # hcitool inq Inquiring ... 00:1B:63:43:B4:EE clock offset: 0x32a5 class: 0x30210c La "class" donne le type d'equipement... ici, ce n'est pas un téléphone. On peut pinguer: # l2ping 00:1B:63:aa:bb:cc Ping: 00:1B:63:aa:bb:cc from 00:11:67:36:52:EF (data size 44) ... 44 bytes from 00:1B:63:aa:bb:cc id 0 time 195.02ms 44 bytes from 00:1B:63:aa:bb:cc id 1 time 35.50ms 44 bytes from 00:1B:63:aa:bb:cc id 2 time 35.15ms 3 sent, 3 received, 0% loss On en veut encore plus: # hcitool info 00:1B:63:aa:bb:cc Requesting information ... BD Address: 00:1B:63:aa:bb:cc Device Name: MacBookPro_de_XXXXXX LMP Version: 2.0 (0x3) LMP Subversion: 0x7ad Manufacturer: Cambridge Silicon Radio (10) Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80 <3-slot packets> <5-slot packets> <3-slot EDR ACL> <5-slot EDR ACL> <3-slot EDR eSCO> Comprend rien... normal. === Téléphone === Activons le "Bluetooth" sur un téléphone. # hcitool scan Scanning ... 00:17:B0:aa:bb:cc XXXXXX 00:0F:DE:16:E3:5C Benouze 00:1B:63:aa:bb:cc MacBookPro_de_XXXXXX Mon téléphone est "Benouze". # hcitool inq Inquiring ... ... 00:0F:DE:16:E3:5C clock offset: 0x678c class: 0x520204 ... D'aprés linux mag: *5(2) => Object Transfert *02 => Téléphone *04 => Cellulaire :!: A verifier! Plus: # hcitool info 00:0F:DE:16:E3:5C Requesting information ... BD Address: 00:0F:DE:16:E3:5C Device Name: Benouze LMP Version: 1.1 (0x1) LMP Subversion: 0x503 Manufacturer: Ericsson Technology Licensing (0) Features: 0x04 0xca 0x31 0x00 0x00 0x00 0x00 0x00 Il ne fait pas grand chose... Verifions les services disponibles: # sdptool browse 00:0F:DE:16:E3:5C | grep "Service Name" Service Name: Dial-up Networking Service Name: Voice gateway Service Name: Serial Port 1 Service Name: Serial Port 2 Service Name: OBEX Object Push Service Name: IrMC Synchronization Service Name: HF Voice gateway Service Name: OBEX Basic Imaging Service Name: OBEX File Transfer Parfait ! ==== Pairing ==== === hcid.conf === Aprés avoir rendu la clé Bluetooth visible... Le telephone cherche... | :!: Le nom affiché peut être un nom préalablement mémorisé | Le téléphone trouve "nin-0" se qui correspond bien a la config. La config **''/etc/bluetooth/hcid.conf''** :\\ # cat hcid.conf | grep -v "^[[:space:]]*#" options { autoinit yes; security auto; pairing multi; passkey "1234"; pin_helper /etc/bluetooth/echopin; } device { name "%h-%d"; class 0x3e0100; iscan enable; pscan enable; lm accept,master; lp rswitch,hold,sniff,park; } Ce qui a été modifié: # security user security auto #dbus_pin_helper; pin_helper /etc/bluetooth/echopin; #lm accept; lm accept,master; === pin_helper === Contient le code PIN echangé. # cd /etc/bluetooth # cat echopin #!/bin/sh echo "PIN:1234" # chmod a+x echopin Si ca ne fonctionne pas ! ... nin hcid[26678]: pin_code_request (sba=00:11:67:36:52:EF, dba=00:0F:DE:16:E3:5C) ... nin hcid[26678]: call_passkey_agent(): no agent registered Vérifier le code PIN ! === et puis === A un certain moment... # /etc/init.d/bluetooth restart === pairing === Normalement le telephone doit se joindre avec le serveur "nin-0" ===== gnokii ===== ==== Installation ==== # apt-get update # apt-get install gnokii ==== configuration ==== En tant que 'root' et toujours en utilisant une clé Bluetooth. | :!: gnokii ne pourra utiliser le telephone qu'au travers d'un pseudo modem AT\\ C'est pas plus mal puisque ca fonctionne avec plein de telephone ! hu! | Créé un fichier **''.gnokiirc''** à la racine du Home de l'utilisateur.\\ Ici, c'est root, donc c'est dans **''/root/''**. En pratique, on va s'appuyer sur un exemple de la doc: # zcat /usr/share/doc/gnokii/Docs/sample/gnokiirc.gz > ~/.gnokiirc Et puis on change quelques lignes: ( **''# vi ~/.gnokiirc''** ) [global] port = 00:0F:DE:16:E3:5C model = AT connection = bluetooth On ne change pas le reste... ==== tests ==== # gnokii --identify gnokiid Version 0.6.14 LOG: debug mask is 0x1 phone instance config: model: AT port_device: 00:0F:DE:16:E3:5C connection_type: 5 init_length: 0 serial_baudrate: 19200 serial_write_usleep: -1 hardware_handshake: 0 require_dcd: 0 smsc_timeout: 100 connect_script: disconnect_script: rfcomm_cn: 1 sm_retry: off Initializing AT capable mobile phone ... Serial device: opening device 00:0F:DE:16:E3:5C Message sent: 0x00 / 0x0004 41 54 5a 0d | ATZ write: [ATZ] read : [ATZOK] Message received: 0x00 / 0x000a 02 41 54 5a 0d 0d 0a 4f 4b 0d | ATZ OK Received message type 00 Message sent: 0x00 / 0x0005 41 54 45 31 0d | ATE1 write: [ATE1] read : [ATE1OK] Message received: 0x00 / 0x000b 02 41 54 45 31 0d 0d 0a 4f 4b 0d | ATE1 OK Received message type 00 Message sent: 0x00 / 0x000a 41 54 2b 43 4d 45 45 3d 31 0d | AT+CMEE=1 .. ... Received message type 06 Message sent: 0x06 / 0x0008 41 54 2b 43 47 53 4e 0d | AT+CGSN write: [AT+CGSN] read : [AT+CGSN353989002606520OK] Message received: 0x06 / 0x0021 02 41 54 2b 43 47 53 4e 0d 0d 0a 33 35 33 39 38 | AT+CGSN 35398 39 30 30 32 36 30 36 35 32 30 0d 0a 0d 0a 4f 4b | 9002606520 OK 0d | Received message type 06 IMEI : XXXXXXXXXXXXXXXXX Fabricant: SONY ERICSSON Modele : AAB-1021011-BV Product name : AAB-1021011-BV Revision : R4C003 CXC1255 Serial device: closing device Yes ! Mais encore: # gnokii --monitor once gnokiid Version 0.6.14 LOG: debug mask is 0x1 phone instance config: model: AT port_device: 00:0F:DE:16:E3:5C connection_type: 5 init_length: 0 serial_baudrate: 19200 serial_write_usleep: -1 hardware_handshake: 0 require_dcd: 0 smsc_timeout: 100 connect_script: disconnect_script: rfcomm_cn: 1 sm_retry: off Initializing AT capable mobile phone ... Serial device: opening device 00:0F:DE:16:E3:5C Message sent: 0x00 / 0x0004 41 54 5a 0d | ATZ write: [ATZ] read : [ATZOK] Message received: 0x00 / 0x000a 02 41 54 5a 0d 0d 0a 4f 4b 0d | ATZ OK Received message type 00 Message sent: 0x00 / 0x0005 41 54 45 31 0d | ATE1 write: [ATE1] read : [ATE1OK] Message received: 0x00 / 0x000b 02 41 54 45 31 0d 0d 0a 4f 4b 0d | ATE1 OK ... ... Received message type 14 Message sent: 0x14 / 0x0009 41 54 2b 43 52 45 47 3f 0d | AT+CREG? write: [AT+CREG?] read : [AT+CREG?+CREG: 0,1OK] Message received: 0x14 / 0x001d 02 41 54 2b 43 52 45 47 3f 0d 0d 0a 2b 43 52 45 | AT+CREG? +CRE 47 3a 20 30 2c 31 0d 0a 0d 0a 4f 4b 0d | G: 0,1 OK Received message type 14 strings[0] = +CREG: 0 strings[1] = 1 strings[2] = (null) strings[3] = (null) Appel0: inactif Appel1: inactif Sortie du mode surveillance... Serial device: closing device ==== Envoi SMS ==== # echo "Hello Ducon" | gnokii --sendsms +3360721abcd Yes ! ===== N80/N81 ===== ==== Problème ==== Problème... gnokii ne fonctionne pas avec... grrr # sdptool browse 00:12:D2:CC:B8:8B | grep "Service Name" Service Name: AVRCP Target Service Name: Hands-Free Audio Gateway Service Name: Headset Audio Gateway Service Name: SyncMLClient Service Name: OBEX File Transfer Service Name: Nokia OBEX PC Suite Services Service Name: Nokia SyncML Server Service Name: OBEX Object Push Service Name: Dial-Up Networking Service Name: Imaging Et pourtant: $ obexftp -b 00:12:D2:CC:B8:8B -l Browsing 00:12:D2:CC:B8:8B ... Channel: 11 Connecting...done Receiving "(null)"... ]> done Disconnecting...done ==== Soluce ? ==== Editer le fichier **''/etc/bluetooth/rfcomm.conf''** afin d'avoir: # # RFCOMM configuration file. # rfcomm0 { # Automatically bind the device at startup bind yes; # Bluetooth address of the device device 00:12:D2:CC:B8:8B; # RFCOMM channel for the connection channel 2; # Description of the connection comment "Example Bluetooth device"; } | :!: "channel 2" et pas autre chose! pourquoi ? mystère! et pas de rapport évident avec ".gnokiirc" ... | Et puis: # /etc/init.d/bluetooth restart Restarting bluetooth: hcid sdpd rfcomm. Et là, un device apparait: /dev/rfcomm0 Parce qu'il a vu le N80 branché ? Editer **''.gnokiirc''** (toujours a la racine de la home de votre user), afin d'avoir: [global] port = /dev/rfcomm0 model = AT connection = serial rfcomm_channel = 2 (Ne pas toucher le reste) Et puis ca marche.