Décoder les messages RDS en ligne de commandes avec un récepteur RTL-SDR

Suite à ce billet de Oona Räisänen sur son blog j’ai tenté de faire fonctionner son sympathique outil Redsea.

Récupération de Liquid-dsp depuis un fork disposant des éléments pour produire un paquet Debian (./configure && make && sudo make install, je fais pas, c’est un appeau à problème pour plus tard) , puis clonage du dépôt officiel pour y inclure le répertoire debian :

% git clone https://github.com/dsx/liquid-dsp.git
% mv liquid-dsp liquid-dsp.DEB
% cd liquid-dsp.DEB
% git checkout debianize
% cd ..
% git clone https://github.com/jgaeddert/liquid-dsp.git
% cd liquid-dsp
% cp -r ../liquid-dsp.DEB/debian .
% dpkg-buildpackage -b
% cd ..
% sudo dpkg -i liquid-dsp_1.2.0-git-1_i386.deb

Ok, on a Liquid-dsp d’installé bien proprement. On passe à Redsea :

% git clone https://github.com/windytan/redsea.git
% cd redsea
% ./autogen.sh
% ./configure
% make
[...]
subcarrier.cc: In member function ‘void redsea::Subcarrier::demodulateMoreBits()’:
subcarrier.cc:171:9: error: ‘tie’ is not a member of ‘std’
 std::tie(is_clock,biphase) = biphase_decoder_.push(symbol);
 ^~~

Oh !?

Ok, on édite src/subcarrier.cc et on ajoute #include <tuple> en début de fichier (étrange que ça marche pour d’autres utilisateurs), et là la compilation se passe sans problème. On peut jouer :

% ./rtl-rx.sh -f 89M | jq -c
Found 1 device(s):
 0: Realtek, RTL2838UHIDIR, SN: 00000001

Using device 0: Generic RTL2832U OEM
Detached kernel driver
Found Rafael Micro R820T tuner
Tuner gain set to 40.20 dB.
Tuned to 89342000 Hz.
Oversampling input by: 8x.
Oversampling output by: 1x.
Buffer size: 5.99ms
Exact sample rate is: 1368000.013046 Hz
Sampling at 1368000 S/s.
Output at 171000 Hz.
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":" F "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"partial_ps":" FM "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZ "}
{"pi":"0xf784","group":"2A","tp":true,"prog_type":"No PTY","partial_radiotext":" M.CO"}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"partial_ps":"AZUR "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZUR F "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"ps":"AZUR FM "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZ "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"partial_ps":"AZUR "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZUR F "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"ps":"AZUR FM "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZ "}
{"pi":"0xf784","group":"2A","tp":true,"prog_type":"No PTY","partial_radiotext":" M.COM"}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"partial_ps":"AZUR "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZUR F "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"alt_freqs":[89,91.9,93.3],"ps":"AZUR FM "}
{"pi":"0xf784","group":"0A","tp":true,"prog_type":"No PTY","ta":false,"is_music":true,"partial_ps":"AZ "}
^CSignal caught, exiting!
User cancel, exiting...
Reattached kernel driver
Signal caught, exiting!

jq s’installe avec le paquet du même nom, c’est un colorisateur syntaxique JSON.

USB HID Report Descriptor

Le nouveau support USB Gadget du noyau permet de facilement composer des périphériques USB via configfs et ceci inclus les périphériques USB HID.

Il faut cependant écrire le descripteur de rapport dans un fichier report_desc, par exemple depuis un script bash et la commande echo.

On peut facilement récupérer cette information depuis un périphérique HID existant (celui qu’on veut simuler) avec lsusb -v, mais le format n’est pas directement utilisable.

Si, en revanche on utilise usbhid-dump livré avec les usbutils, on obtient un format plus facile à gérer :

% sudo usbhid-dump -d 1d34:0004
001:106:000:DESCRIPTOR 1474883599.550267
 05 01 09 10 A1 01 05 00 19 10 29 11 15 00 25 0F
 75 08 95 08 91 02 19 10 29 11 15 00 25 0F 75 08
 95 08 81 00 C0

Avec quelques coups de grep et de sed, on peut transformer cela en quelque chose de directement utilisable avec un script :

% sudo usbhid-dump -d 1d34:0004 | grep "^ " | sed ':a;N;$!ba;s/\n//g;s/ /\\x/g' 
\x05\x01\x09\x10\xA1\x01\x05\x00\x19\x10\x29\x11\x15\x00\x25\x0F\x75\x08\x95\x08\x91\x02\x19\x10\x29\x11\x15\x00\x25\x0F\x75\x08\x95\x08\x81\x00\xC0

Et pour la taille du descripteur :

% sudo usbhid-dump -d 1d34:0004 | grep "^ " | sed ':a;N;$!ba;s/\n//g;s/ /\\x/g' | grep -Fo x | wc -l
37

PS : Oui, ce billet est surtout un mémo mais cela pourra peut-être faire économiser 5mn à quelqu’un d’autre ;)

Critique Star Wars, épisode VII : Le Réveil de la Farce… ou comment j’ai perdu 2h et 6€ !

Non ce n’est pas une faute de frappe mais la transposition d’une autre qui m’est revenue sans cesse pendant plus de deux heures après avoir dépensé 6€ pour une place de cinéma : « c’est une blague ? ».

Cédant sous la pression médiatique et ma propre curiosité j’ai fini par aller voir ce fameux épisode 7, mais à mes conditions : pas de 3D et en VO. Et mes réticences étaient pour le moins justifiées : une presque totale déception !

Je comprend à présent les affirmations du type « Star Wars is Back ! » car c’est exactement ça… Je veux dire TRÈS EXACTEMENT ÇA !

Vous voulez des exemples ? J’allai dire « attention spoilers » mais en réalité, si vous avez vu les épisodes 4, 5 et 6, vous avez déjà votre compte de spoilers. Jugez plutôt : Lire la suite

C’est officiel, j’ai mon (demi) TARDIS ! (partie 5) : La lampe

Voilà bien LE problème du constructeur de TARDIS ! La lampe est l’élément distinctif (en plus des différentes inscriptions) de la boîte bleue.

Il s’agirait initialement d’une lampe de jardin, adaptée par les accessoiristes de la BBC. La lampe comme le TARDIS lui-même a changé au cours de la longue vie de la série. Celui que j’ai choisi d’utiliser comme source d’inspiration, le TARDIS 2005-2009 des 9ème et 10ème docteurs, est relativement simple et facile à reproduire. Celle du 11ème et 12ème docteurs, c’est une autre paire de manches puisqu’elles incluent un verre d’une forme particulière intégrant une sorte de lentille à échelons (dite de Fresnel) diffusant la lumière de façon optimale. Lire la suite

C’est officiel, j’ai mon (demi) TARDIS ! (partie 4) : Le toit et la décoration

Une fois la structure de base peinte et testée, avec les portes pleinement fonctionnelles et la partie supérieure ajustée, il ne resta plus qu’à ajouter le toit.

Celui-ci possède un angle qui tantôt est délibérément oublié sur quelques réalisations, sans doute afin de simplifier les choses. Personnellement, je pense que c’est là une caractéristique non seulement très importante du TARDIS mais, en plus, parfaitement logique. C’est, en principe, une cabine d’appel de police destinée à se trouver à l’extérieur à la merci des éléments. Il ne peut y avoir de toit plat car l’eau de pluie doit pouvoir s’écouler. Lire la suite

C’est officiel, j’ai mon (demi) TARDIS ! (partie 3)

Avec le socle fixée aux « poteaux », il était temps de passer à un peu plus d’assemblage et en particulier à l’ajout des panneaux.

La récupération de bois qui traîne a, là aussi, joué son rôle car stupidement je me disais qu’il suffirait d’utiliser les cadres des panneaux comme support de fixation. Le petit problème c’est que j’avais totalement zappé le fait que le bord de ces cadres est à l’extérieur du TARDIS et que l’angle ne permettait, en plus, absolument pas d’utiliser la visseuse correctement. Hors de question de laisser apparaître des vis sur l’extérieur de mon TARDIS !

Lors de ma prochaine construction j’utiliserai la démarche suivant : créer les cadres, sans les fonds, fixer les cadres au socle et aux « poteaux » et ensuite ajouter les fonds en panneau de particules et le Plexi des fenêtres.

Là, j’ai été obligé de fouiller dans mon grenier pour trouver des baguettes d’environ 2 cm de côté pour servir le liant entre la base et les panneaux, en utilisant de longues vis et des rondelles pour ne pas massacrer le bois. Lire la suite

C’est officiel, j’ai mon (demi) TARDIS ! (partie 2)

Voici la suite de l’aventure…

Une fois les panneaux terminés et peints, il était temps de passer à la structure de base, à savoir le socle du TARDIS et les deux « poteaux » dans les coins.

De nombreuses réalisations utilisent des tasseaux rectangulaires, assemblés par deux de façon à former un coin. Les plans de la BBC eux-mêmes montre que les fameux « poteaux » sont en réalité creux. Moi, je ne sais pas pourquoi, je voulais que :

  1. comme le TARDIS original, les portes soient en retrait par rapport à ces « poteaux »,
  2. les « poteaux » en question soient en bois massif. Sans doute parce que ainsi cela assurerait la solidité de l’ensemble, du moins dans mon esprit (puisque pas grand chose supporte l’arrière du demi-TARDIS).

Lire la suite

C’est officiel, j’ai mon (demi) TARDIS ! (partie 1)

La série britannique Doctor Who sans doute sans aucun équivalent dans le monde. Créée en 1963 par la BBC, elle compte quelque 680 épisodes répartis sur 35 saisons. Personnellement, j’ai découvert Doctor Who sur Netflix avec le 9ème docteur (2005) interprété par Christopher Eccleston .

Le synopsis est relativement simple : Le docteur est un extraterrestre originaire de la planète Gallifrey, un Time Lord. Il voyage dans le temps et l’espace à bord d’un vaisseau appelé un TARDIS (Time And Relative Dimension In Space), qui parmi ses différentes caractéristiques possède la capacité de se camoufler et prendre l’apparence d’une cabine d’appel de police bleue britannique des années 1960. Dès le premier épisode, ce système de camouflage reste bloqué sur cette apparence. Lire la suite