Introduction aux outils bluetooth en ligne de commande sous linux

Voici une petite introduction aux outils disponibles sous la ligne de commande linux pour effectuer quelques opérations avec le bluetooth.

Détections des modules connectés

Cette commande permet d’afficher les différents modules bluetooth connectés au PC :

hcitool dev
Devices:
hci0 00:20:E0:9B:XX:XX
hci1 00:1B:11:63:XX:XX

Nous avons donc 2 modules bluetooth connectés soit hci0 et hci1.

Recherche des voisins visibles

Pour recherché les éléments bluetooth du voisinage :

hcitool -i hci1 scan
Scanning ...
8C:DE:52:06:XX:XX SRS-BTV5

Nous avons donc détecté une enceinte portable Sony SRS-BTV5.

Demande d’infos

Pour avoir des informations sur cette enceinte bluetooth il faut utiliser la commande suivante :

sudo hcitool -i hci1 info 8C:DE:52:06:XX:XX
Requesting information ...
BD Address: 8C:DE:52:06:XX:XX
Device Name: SRS-BTV5
LMP Version: 3.0 (0x5) LMP Subversion: 0x2200
Manufacturer: Integrated System Solution Corp. (57)
Features page 0: 0xbf 0xff 0xff 0xfe 0x88 0x3d 0x19 0x86
<3-slot packets> <5-slot packets>

<3-slot EDR ACL>
<5-slot EDR ACL>

Features page 1: 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00

L’outil sdptool permet d’avoir d’autres information dont les services offert par le périphérique :

sdptool browse 8C:DE:52:06:XX:XX
Browsing 8C:DE:52:06:XX:XX ...
Service RecHandle: 0x10001
Service Class ID List:
"PnP Information" (0x1200)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 1
"SDP" (0x0001)
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"PnP Information" (0x1200)
Version: 0x0100

Service Name: Headset unit
Service RecHandle: 0x10002
Service Class ID List:
« Headset » (0x1108)
« Generic Audio » (0x1203)
Protocol Descriptor List:
« L2CAP » (0x0100)
« RFCOMM » (0x0003)
Channel: 2
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
« Headset » (0x1108)
Version: 0x0100

Service Name: Hands-free unit
Service RecHandle: 0x10003
Service Class ID List:
« Handsfree » (0x111e)
« Generic Audio » (0x1203)
Protocol Descriptor List:
« L2CAP » (0x0100)
« RFCOMM » (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
« Handsfree » (0x111e)
Version: 0x0105

Service Name: Audio SNK
Service Provider: ISSC
Service RecHandle: 0x10008
Service Class ID List:
« Audio Sink » (0x110b)
Protocol Descriptor List:
« L2CAP » (0x0100)
PSM: 25
« AVDTP » (0x0019)
uint16: 0x100
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
« Advanced Audio » (0x110d)
Version: 0x0100

Service Name: AVRCP CT
Service Provider: ISSC
Service RecHandle: 0x10006
Service Class ID List:
« AV Remote » (0x110e)
Protocol Descriptor List:
« L2CAP » (0x0100)
PSM: 23
« AVCTP » (0x0017)
uint16: 0x100
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
« AV Remote » (0x110e)
Version: 0x0100

Service Name: AVRCP TG
Service Provider: ISSC
Service RecHandle: 0x1000c
Service Class ID List:
« AV Remote Target » (0x110c)
Protocol Descriptor List:
« L2CAP » (0x0100)
PSM: 23
« AVCTP » (0x0017)
uint16: 0x100
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
« AV Remote » (0x110e)
Version: 0x0100

Récupérer le nom d’un élément

Pour ne récupérer que le nom de l’élement bluetooth il suffit d’utiliser la commande suivante :

hcitool -i hci1 name 8C:DE:52:06:XX:XX
SRS-BTV5

Introduction aux outils pour les puces Bluetooth CSR

Dans cet article nous verrons comment sauvegarder/restaurer un firmware sur une puce CSR.

Attention, faire ceci peut être dommageable et empêcher le bon fonctionnement de votre dongle Bluetooth voir le rendre inopérant.

Identification des composants

Tout d’abord il faut connaître le fabricant de la puce avec la commande hciconfig -a qui devrait afficher les informations des différents éléments bluetooth connectés à l’ordinateur, par exemple :
hci0: Type: BR/EDR Bus: USB
BD Address: 00:20:E0:9B:XX:XX ACL MTU: 192:8 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:2454 acl:0 sco:0 events:87 errors:0
TX bytes:562 acl:0 sco:0 commands:51 errors:0
Features: 0xff 0xff 0x8f 0x78 0x18 0x18 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-0'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 1.1 (0x1) Revision: 0x571
LMP Version: 1.1 (0x1) Subversion: 0x571
Manufacturer: Cambridge Silicon Radio (10)

hci1: Type: BR/EDR Bus: USB
BD Address: 00:1E:58:3F:XX:XX ACL MTU: 384:8 SCO MTU: 64:8
UP RUNNING PSCAN
RX bytes:789 acl:0 sco:0 events:28 errors:0
TX bytes:376 acl:0 sco:0 commands:27 errors:0
Features: 0xff 0xff 0x8f 0xfe 0x9b 0xf9 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-1'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 2.0 (0x3) Revision: 0x77b
LMP Version: 2.0 (0x3) Subversion: 0x77b
Manufacturer: Cambridge Silicon Radio (10)

 

hci2: Type: BR/EDR Bus: USB
BD Address: 00:1B:11:63:XX:XX ACL MTU: 1017:8 SCO MTU: 64:0
UP RUNNING PSCAN
RX bytes:779 acl:0 sco:0 events:27 errors:0
TX bytes:376 acl:0 sco:0 commands:27 errors:0
Features: 0xff 0xff 0x8d 0xfe 0x9b 0xf9 0x00 0x80
Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3
Link policy: RSWITCH HOLD SNIFF PARK
Link mode: SLAVE ACCEPT
Name: 'malin-2'
Class: 0x6e0100
Service Classes: Networking, Rendering, Capturing, Audio, Telephony
Device Class: Computer, Uncategorized
HCI Version: 2.0 (0x3) Revision: 0x403d
LMP Version: 2.0 (0x3) Subversion: 0x430e
Manufacturer: Broadcom Corporation (15)

Nous pouvons donc voir que nous avons 2 éléments venant de chez CSR(Cambridge Silicon Radio) qui sont hci0 et hci1.

Pour connaître les révisions des composants il faut lancer la commande bccmd -d hci0 chiprev ce qui donne pour mes 2 éléments :
sudo bccmd -d hci0 chiprev
Chip revision: 0x008a (BC2-External B)
sudo bccmd -d hci1 chiprev
Chip revision: 0x0026 (BC4-External)

Nous avons donc une puce BC2-Ext et une BC4-Ext qui sont toutes les deux programmables (-Ext et non -Rom).

Sauvegarde et modification du firmware CSR

Pour sauvegarder les firmwares de ces puces il faut utiliser la commande dfutool archive nomdufichier.dfu et sélectionné l’élément désiré, cela permet de sauvegarder le firmware.

Il est ainsi par exemple possible de passer la clé DBT-120 utilisant le chip Bluecore4-Ext en bluetooth 2.1 par mise à jour de firmware avec la commande dfutool upgrade nouveaufirmware.dfu.

Détection des registres

Il suffit de taper la commande sudo bccmd -d hci1 pslist

0x0001 - Bluetooth address (8 bytes)
0x01f9 - Host interface (2 bytes)
0x01fe - Crystal frequency (2 bytes)
0x0209 - TX and RX PIO control (2 bytes)
0x025c - Module security code (16 bytes)
0x02be - USB vendor identifier (2 bytes)
0x02bf - USB product identifier (2 bytes)

Modification des Vendor Id et Product Id USB

Il est aussi possible de modifier le vendor Id de la clé usb avec la commande bccmd psset -s 0x0000 0x02be 0x07d1 où 0x07d1 est le Vendor Id de la clé DBT-120 ainsi que le Product Id bccmd psset -s 0x0000 0x02bf 0xfc01.

Modification de l’adresse Mac

Pour lire l’adresse Mac du dongle :

sudo bccmd -d hci1 psget -s 0x0001 0x0001

Et pour le modifier de façon à avoir une adresse Mac 01:02:03:04:05:06 :

sudo bccmd -d hci1 psset -s 0x0001 0x0001 0x04 0x00 0x06 0x05 0x03 0x00 0x02 0x01

Menu caché Test/Info android

Pour accéder au menu caché Test/Info sur un téléphone Android il suffit de composer le *#*#4636#*#* , un moyen mnémotechnique est de retenir le fait que ces touches correspondent à *#*#info#*#*

Forcer le démarrage d’une TV Samsung LE32R51B en mode PC par défaut

Le but de cette manipulation est d’utiliser cet écran de 32 pouce comme écran d’ordinateur.
Pour cela il faut passer par le mode service de cette télé : télé éteinte, il faut appuyer successivement sur les touches « Info » « Menu » « Mute » et « Power ».
Ensuite aller sur le menu « 8. Adjust » puis « Hotel Option » et passer le mode « Hotel Mode » sur « On » ainsi que « Power On Source » sur « PC »

Pour revenir au menu précédent appuyer sur la touche « Menu »
Pour quitter appuyer sur la touche « Power »

Repasser un HTC Desire en rom d’origine puis débloquer son bootloader

État du téléphone au départ :
hboot : Alpharev Bravo CM7 r2
Rom : Nightly cyanogenmod 7.2

Note : il est sûrement possible d’effectuer toutes les opérations sous linux en utilisant les outils pour mise à jours d’un téléphone Android HTC sous linux.

Pour pouvoir le remettre dans son état d’origine il faut passer sur le hboot de downgrade d’Alpharev donc une fois celui ci téléchargé et on md5sum vérifié il faut taper les commandes suivantes :
sudo ./fastboot flash hboot bravo_downgrade.img
sudo ./fastboot reboot-bootloader
sudo ./fastboot erase cache

Le téléphone est donc maintenant prêt pour repasser en Rom d’origine, pour cela il faut repasser sous Windows, j’ai tout d’abord installé HTC Sync avec le fichier HTCSync_2.0.28.exe puis flasher la rom d’origine avec la RUU : RUU_Bravo_Froyo_HTC_WWE_2.29.405.5_Radio_32.49.00.32U_5.11.05.27_release_159811_signed.exe

Une fois terminé il faut faire la mise à jour OTA pour passer en version 2.29.405.14 et pouvoir flasher le hboot permettant de débloquer le bootloader : PB9920000_Bravo_Froyo_hboot_1.03.0003_R.exe.

Le téléphone est maintenant prêt pour être débloqué en allant sur le site htcdev.com.
Il sera par la suite possible de reverrouiller et déverrouiller le bootloader autant de fois qu’on le veut :
Reverrouillage (pour le flashage de ROM RUU par exemple):
fastboot oem lock
Déverrouillage avec le fichier Unlock_code.bin fournit par HTC :
fastboot flash unlocktoken Unlock_code.bin

Codes secrets sur Xperia Z

Pour accéder au menu caché Service sur un téléphone Sony Xperia Z il suffit de composer le *#*#7378423#*#* , un moyen mnémotechnique est de retenir le fait que ces touches correspondent à *#*#service#*#*.

Pour activer le mode Demo il faudra composer le *#*#73556673#*#* , soit *#*#sellmore#*#*, pour le désactiver il faudra de nouveau le composer.

Il est aussi possible d’accéder au menu caché Android.

Modifier l’animation de démarrage sous Android

Il suffit tout simplement de remplacer le fichier /system/media/bootanimation.zip avec par exemple l’animation de CyanogenMod 9

Script php pour démarrer son PC à distance en Wake On Lan

Voici un script que j’utilise régulièrement pour démarrer mon pc à distance et pouvoir ensuite y accéder en ssh.

[php]<?php

$IP_ADDRESS="10.0.0.1";
$MAC_ADDRESS="0123456789ab";

class Wol{
private $nic;
public function wake($mac,$ip){
$this->nic = fsockopen("udp://$ip", 9);
if( !$this->nic ){
fclose($this->nic);
return false;
}
else{
fwrite($this->nic, $this->pacquet($mac));
fclose($this->nic);
return true;
}
}
private function pacquet($Mac){
$packet = "";
//for($i = 0; $i < 6; $i++){$packet .= chr(0xFF);}
$packet = "\xFF\xFF\xFF\xFF\xFF\xFF";
for ($j = 0; $j < 16; $j++){
for($i = 0; $i < 12; $i=$i + 2){$packet .= chr(hexdec(substr($Mac, $i, 2)));}
}
return $packet;
}
}

$wol = new Wol();

$php_wal=$_POST[‘WAL’];

if ($php_wal!="OK") {

?>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Wake On Lan</title>
</head>
<body>
<form action="<?php echo $_SERVER[‘SCRIPT_NAME’];?>" method="post">
<input type="hidden" name="WAL" value="OK" >
<input type="submit" value="Démarrer" autofocus>
</form>
</body>
</html>

<?php
exit();
}
$wol->wake("$MAC_ADDRESS","$IP_ADDRESS");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Wake On Lan</title>
</head>
<body>
Démarrage en cours…
</body>
</html>[/php]

Réorganiser les mp3 sur une clé usb pour une lecture sur Autoradio

Certains autoradios, comme les sony CDX-GT414U, ne savent pas lire les mp3 dans l’ordre alphabétique mais se basent sur l’ordre du système de fichier. Cela se traduit par une lecture dans le désordre les chansons.

Mais il existe une solution : FATSort

L’utilisation est très simple, pour une clé usb sur /dev/sdb :
sudo fatsort /dev/sdb1

Et voilà, toutes les chansons sont dans l’ordre

Rejet des appels anonymes sur CyanogenMod

Il existe une possibilité pour filtrer les appels anonymes sur la version modifiée d’Android CyanodenMod :
il faut entrer le numéro 0000 dans la liste noire.
Et ensuite au revoir centres d’appels ! Tous les appels masqués seront bloqués et renvoyés sur le répondeur.