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.

Installation du SDK et du NDK Android en ligne de commande

Voici les étapes à suivre pour installer le SDK et le NDK Android en ligne de commande, par exemple sur un serveur dédié, ou pour faire des nighty build.

Prérequis

Avoir installé Java, voir le prérequis de l’article Compiler CyanogenMod pour un HTC Desire

Installation

Installation du NDK

Télécharger l’archive sur le site http://developer.android.com/sdk/ndk/index.html.
wget http://dl.google.com/android/ndk/android-ndk-r7-linux-x86.tar.bz2
Vérifier le md5sum.
Le décompresser et placer le répertoire à l’endroit souhaité.
tar xvjf android-ndk-r7-linux-x86.tar.bz2
mv android-ndk-r7 ~

Installation du SDK

Télécharger l’archive sur le site http://developer.android.com/sdk/index.html.
wget http://dl.google.com/android/android-sdk_r16-linux.tgz
Vérifier le md5sum.
Le décompresser et placer le répertoire à l’endroit souhaité.
tar xvzf android-sdk_r16-linux.tgz
mv android-sdk-linux ~

Entrer dans le répertoire du SDK puis installer les différentes plateformes avec la commande suivante :
./tools/android update sdk -u -t platform,platform-tool,extra

Exemple d’utilisation : Compilation de VLC media player

Pour cette compilation il faut des outils récents, j’ai donc testé la compilation sur la future Ubuntu 12.04 LTS.
Les prérequis sont les suivant :
sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev pngcrush schedtool gcc g++ autoconf gettext cvs libtool subversion cmake ant gawk pkg-config autopoint openjdk-6-jdk
et comme c’est une version 64 bits :
sudo apt-get install g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline-gplv2-dev gcc-4.6-multilib g++-4.6-multilib

Les SDK et NDK sont installés respectivement dans les répertoires /home/ubuntu/android-sdk-linux et /home/ubuntu/android-ndk-r7

La version de awk fournie avec le ndk est ancienne, on la remplace donc par gawk :
mv ~/android-ndk-r7/prebuilt/linux-x86/bin/awk ~/android-ndk-r7/prebuilt/linux-x86/bin/awk.old
cp /usr/bin/gawk ~/android-ndk-r7/prebuilt/linux-x86/bin/awk

Maintenant les variables d’environnement :
export ANDROID_SDK=/home/ubuntu/android-sdk-linux
export ANDROID_NDK=/home/ubuntu/android-ndk-r7
export PATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

Il ne reste plus qu’à récupérer les sources de VLC pour Android :
git clone git://git.videolan.org/vlc-ports/android.git

Et de lancer la compilation :
cd android
./compile.sh

Et voilà une version est disponible dans le répertoire vlc-android/bin