Born to be wired

Archive pour octobre 2013

 Xbox upgrade : affichage HD / HD-ready

 24 octobre 2013  Bricolage  8 commentaires

Nombreux utilisateurs d’une Xbox première du nom vous le diront : une fois correctement hackée, sans modification matérielle s’il vous plait, difficile de trouver un media player de meilleur qualité/prix que cette grosse boîte noire. Avec une version récente de XBMC4Xbox chargée, elle lit sans encombre à peu près tous les formats vidéo ou audio (y compris les récents H.264 et VP8), et quel que soit leur espace de stockage (disque dur interne, ou réseau avec une compatibilité UPnP-AV, NFS, et surtout SMB/CIFS).

Certes la Playstation 3, beaucoup plus récente, semble apte à rendre autant de services sans la moindre nécessité de hacking, voire même plus grâce à son support des vidéos HD. Mais le prix n’est pas le même d’une part, et la compatibilité avec la grande variété de formats semble un poil en retard par rapport à ce que l’on pourrait en attendre.

La Xbox 360, est, comment dirais-je… une arnaque de ce point de vue. Difficile à hacker sans modification physique, et incapable de lire sans hack autre chose que du format video Microsoft. En en ce qui concerne l’accès réseau sans hack, vous pouvez oublier tellement c’en est risible.

En ce qui concerne les consoles Next-Next-Gen (Playstation 4 / Xbox One), il faudra attendre leur sortie officielle pour juger leur capacités sur ce terrain. Et se saigner le portefeuille, aussi.

Le Freebox Player, quant à lui, se positionne en deçà de la PS3, avec un support de la HD mais une connectivité réseau très limitée (UPnP-AV uniquement, et Satan sait que c’est un véritable enfer à configurer). J’arrive pour ma part à lire du contenu UPnP-AV de Minidlna (version 1.0.24 à ce jour), mais j’arrive encore à trouver de manière régulière certaines vidéos qui ne peuvent être lues, pour des raisons inconnues. Ajoutez à cela l’ergonomie désastreuse du Player de Xavier en ce qui concerne la navigation dans le contenu multimédia pour qui a joué plus de 5 minutes avec un XBMC, et vous obtenez une aversion profonde pour l’utilisation de la jolie boiboite de Stark en ce qui concerne tout usage ne consistant pas à regarder les chaines du bouquet TNT/ADSL.

Je ne parlerai pas des box des autres fournisseurs d’accès à internet, d’une part car je ne les connais pas, et d’autre part car certains – surtout celui au logo orange – ont souvent démontré leur immense retard en ce qui concerne les fonctionnalités multimédia offertes à l’utilisateur curieux par rapport à la société de Xavier.

La Xbox

Si l’on revient sur la Xbox européenne première du nom, elle souffre en natif de 2 inconvénients : un affichage vidéo par sortie péritel (ce qui génère un signal PAL 4:3 50 Hz dégueulasse), et l’impossibilité matérielle de lire du contenu HD (de manière fluide, j’entends). S’il n’existe aucune méthode pour remédier au second point, le premier peut être nettement amélioré, ce qui permet, quand on daigne connecter la boîte à une TV récente et avec la connectique adéquate :

  • D’utiliser l’intégralité de votre écran 16:9 sans souffrir de déformation d’image.
  • De lire du contenu multimédia jusqu’à 720p natif (HD-ready).
  • De monter la résolution d’affichage jusqu’à 1080i sur les sources non-HD (par exemple pour les émulateurs).
  • Et donc, en conséquence, de prolonger un peu la vie de la boiboite de Microsoft, qu’il serait dommage d’entasser au grenier ou de brader à la brocante annuelle du village alors qu’elle peut encore rendre tant de bons et loyaux services.

Cet article s’adresse donc à toutes les personnes désireuses de configurer leur Xbox pour une utilisation sur une TV récente avec un bel affichage en 720p/1080i à la clé.

Prérequis

  • Une Xbox hackée proprement. La mienne comporte un softmod Ndure 3.4 installé par l’excellentissime Xcalibur de jp33 avec un dual boot XMBC4Xbox / UnleashX.
  • Une version suffisamment récente de XBMC4Xbox. J’ai utilisé la version 3.2 lors de mes manips, la dernière stable au moment de ma rédaction est la 3.3.2.
  • Le soft Enigmah-X PAL-NTSC Video Selector à copier dans le dossier Programmes de la Xbox.
  • Un câble Xbox HDAV. Vous pouvez en trouver sur eBay pour une dizaine d’euros frais de port compris en recherchant par exemple : « Xbox HDTV cable 720p ». Attention à bien ignorer tout ce qui concerne la Xbox 360. C’est un câble avec le connecteur audio/vidéo rectangulaire Xbox d’un côté, et 5 RCA de l’autre. J’ai pris le mien chez le vendeur neotechs.
  • Un téléviseur récent capable d’afficher au moins du 720p et ayant une connectique YPBPR.

Mode opératoire

Si je détaille le mode opératoire ici, c’est surtout car j’ai eu du mal à en trouver un suffisamment précis et proche de ma configuration. J’ai été obligé de fouiller longtemps, j’ai trouvé des infos parfois correctes, parfois inadaptées, parfois erronées. L’ordre des étapes est important, et les softs utilisés ne détaillent pas toujours les modifications qu’ils effectuent. Il est donc assez facile de faire n’importe quoi, voire de vautrer complètement sa console de jeux. J’ai donc reconstitué une procédure avec les bribes d’informations trouvées à droite et à gauche, sur la base de ma propre expérience. Cette procédure vaut ce qu’elle vaut. Ce qui suit devra donc être reproduit à vos risques et périls. Je le répète, l’ordre des étapes est important.

1. Remplacement du câble audio/vidéo

Remplacer le câble audio/vidéo Hbox d’origine par le câble HDAV. C’est le pré-requis n°1. Inutile de passer aux étapes suivantes si ce câble n’est pas présent. On pourrait naïvement croire qu’il suffit d’effectuer cette manipulation et roule ma poule j’ai une image HD sans rien faire, mais non, ça serait trop facile.

Sans cet accessoire, inutile d'aller plus loin. Et dans l'espace colonisé par l'UNSC et les Covenants, personne ne vous entendra crier.

Sans cet accessoire, inutile d’aller plus loin. Et dans l’espace colonisé par l’UNSC et les Covenants, personne ne vous entendra crier.

2. Activer le mode de balayage progressif sur les différents dashboard.

Ce que je comprends grossièrement, c’est que lorsque le softmod lance un dash, il change le mode de balayage vidéo en fonction du dash sélectionné, si le hardware accepte ce balayage. Cela se configure dans le gestionnaire du softmod. Pour y accéder, je boote sur le dashboard alternatif (UnleashX), puis je sélectionne « Logiciels / Gestionnaire Ndure jp33 ».

Une fois dans le gestionnaire Ndure, descendre dans « Personnalisation / Dash principal / Mode vidéo » et sélectionner « Progressive ». Revenir en arrière et effectuer la même manipulation pour le dash alternatif.

3. Désactiver l’EEPROM virtuelle

Le softmod Ndure ajoute une couche de protection à la console en faisant voir au dashboard et aux applications un disque système C: virtuel et une EEPROM virtuelle, afin de protéger ces derniers. Seul le softmod sait où se trouve les véritables ressources. De ce fait, toute application tentant de modifier les données sur C: ou sur l’EEPROM effectue ces modifications de manière volatile, celles-ci sont perdues à la prochaine coupure d’alimentation. Les modifications suivantes devant être effectuées sur la véritable EEPROM, il est nécessaire de désactiver temporairement le mécanisme de protection pour que les modifications soient permanentes.

Pour cela, toujours avec le gestionnaire Ndure, descendre dans « Options avancées / Sauvegarde de l’eeprom.bin » et ordonner la sauvegarde de cette EEPROM. Le gestionnaire m’indique qu’elle est sauvegardée dans E:\Apps\Ndure\eeprom.bin. Si vous n’avez sauvegardé votre EEPROM, c’est le moment de le faire PUIS de la récupérer impérativement par FTP sur une autre machine avant d’effectuer toute autre action. En cas de pépin, il sera toujours possible de restaurer la console en configuration usine grâce à cette sauvegarde et un utilitaire tel que HboxHDM, que tout bon utilisateur de softmod se doit de posséder dans sa caisse à outils.

Une fois l’EEPROM sauvegardée, récupérée et stockée en lieu sûr, sur au moins 8 périphériques de stockage différents, il est temps de désactiver la protection par EEPROM virtuelle. Pour cela, dans le gestionnaire Ndure, descendre dans « Options avancées / Eeprom.bin virtuelle / Désactivation ». Le gestionnaire va alors afficher que l’EEPROM de la carte mère sera active au prochain boot. Confirmer cette option et redémarrer électriquement la Xbox.

Le message peut paraître inquiétant pour un non-initié. Ayez confiance ! Au pire, vous pourrez toujours vous servir de votre Xbox comme d'un presse-livres.

Le message peut paraître inquiétant pour un non-initié. Ayez confiance ! Au pire, vous pourrez toujours vous servir de votre Xbox comme d’un presse-livres.

4. Passer l’affichage en NTSC

C’est le programme Enigmah-X PAL-NTSC Video Selector qui se charge de cette opération, et comme elle est effectué par un patchage de l’EEPROM, l’étape précédente était déterminante.

Pour ma part, j’ai booté sur le dash alternatif, et lancé Enigmah dans « Logiciels / Enigmah Videomode Switchdisc ».

Par défaut, l’écran affiche « Current region : PAL ». Appuyer sur B, l’affichage est changé en « Current region : NTSC ». C’est tout, l’EEPROM est patchée. Sortir du soft en maintenant les deux gâchettes + bouton noir.

Un petit message de confirmation du style "Patch correctly applied on EEPROM" aurait pu être utile pour comprendre ce que fait vraiment le soft.

Un petit message de confirmation du style « Patch correctly applied on EEPROM » aurait pu être utile pour comprendre ce que fait vraiment le soft.

5. Activer les résolutions HD-ready et HD

C’est le dashboard Microsoft qui se charge de cette opération, et cela s’effectue aussi en patchant l’EEPROM. Mais tant que le NTSC n’est pas activé, l’accès au paramétrage de ces résolutions n’est pas accessible.

Revenu sur mon dash alternatif, j’ai lancé « Dashboard Microsoft ».

Une fois dans le dash Microsoft, naviguer dans « Paramètres / Vidéo » et sélectionner les options suivantes :

  • Mode vidéo : Normal
  • 480p : Oui
  • 720p : Oui
  • 1080i : Oui

Sortir du dash en maintenant les deux gâchettes + bouton noir.

L'easter egg du dashboard de Microsoft : la résolution HD sur une console PAL !

L’easter egg du dashboard de Microsoft : la résolution HD sur une console PAL !

6. Réactiver l’EEPROM virtuelle

Les 2 patchs ont été appliqués sur l’EEPROM réelle, on peut donc réactiver le mécanisme de protection. La manipulation est très similaire à la désactivation. Il suffit de relancer le gestionnaire Ndure, de descendre dans « Options avancées / Eeprom.bin virtuelle / Activation », et de valider. Redémarrer électriquement la Xbox.

7. Vérifier le paramétrage

À ce stade il peut être intéressant de vérifier que les modifications ont été correctement appliquées et que malgré la présence de l’EEPROM virtuelle la console permet un affichage à résolutions élevée. Pour cela, retourner dans le dash Microsoft et vérifier que les paramètres saisis précédemment sont toujours présents malgré le redémarrage électrique. Si le paramétrage est désactivé ou pire, qu’un seul mode d’affichage vidéo est proposé, alors quelque chose a foiré (vous dans la manip ou moi dans l’explication), et il faudra probablement recommencer certaines étapes jusqu’à arriver au paramétrage vidéo persistant à la coupure d’alimentation.

Il peut être également intéressant d’effectuer ET de récupérer une seconde sauvegarde de l’EEPROM à ce stade.

8. Vérifier le splash screen

En principe, si votre téléviseur est capable d’afficher les informations concernant le signal vidéo, vous devriez voir un signal en 480i 60 Hz pendant la vidéo de splash (celle avec les espèces de blobs verts qui s’accouplent en apesanteur). Sur mon téléviseur, le mode affiché est « 720×480 / 60i ». Ce 60 indique que le mode NTSC est activé (les fameux 60 Hz), ce qui est une bonne nouvelle. Le splash n’excède jamais le 480i, pas de panique, c’est normal.

Le splash est affiché en 60 Hz, c'est bon signe !

Le splash est affiché en 60 Hz, c’est bon signe !

9. Paramétrer le dashboard principal

Vous arrivez ensuite sur votre dash principal et constatez amèrement que la résolution de l’image est toujours aussi moisie. Pas de panique, c’est normal aussi. Les modifications sont présentes au niveau de la console elle-même, il faut maintenant les activer aussi au niveau du dash. Cela se passe de la manière suivante sur XBMC4XBOX :

Dans « Paramètres / Système / Sortie vidéo », activer le paramétrage suivant :

  • Aspect ratio : Normal
  • Activer 480p : Oui
  • Activer 720p : Oui
  • Activer 1080i : Oui

Dans « Paramètres / Apparence / Affichage », sélectionner la résolution qui sera affichée au démarrage du dash. J’utilise pour ma part le 720p 16:9. Le 1080i est possible mais occasionne quelques pertes en fluidité lors de la navigation dans le dash, ça sera donc selon vos envies.

Résolution forcée à 720p dans le dashboard.

Résolution forcée à 720p dans le dashboard.

Dans « Paramètres / Programmes / Général », il faut savoir qu’un paramètre est présent, que je n’ai jamais modifié. Pour les jeux en 60 Hz : Utiliser NTSC-M & NTSC-J.

Enfin, dans « Paramètres / Vidéo / Lecture », sélectionner la résolution qui sera utilisée lors de la lecture d’une vidéo. Je reste pour ma part en 720p 16:9. Le 1080i est encore une fois possible mais avec lag entre chaque changement de résolution. De plus, la Xbox n’ayant pas la puissance processeur pour décoder des vidéos natives 1080p, l’affichage d’une vidéo 720p ou inférieure en 1080i par la console présentera peu d’intérêt, autant laisser le travail d’adaptation de l’image au téléviseur.

Résolution forcée à 720p pour la lecture de vidéos.

Résolution forcée à 720p pour la lecture de vidéos.

À ce stade vous devriez voir, à chaque démarrage sur votre dash par défaut, la résolution que vous avez sélectionnée. Et même en restant sur du 720p, l’écart de netteté avec l’ancien format PAL 4:3 (déformé sur votre écran 16:9) est extrêmement appréciable.

Dashboard correctement affiché à la résolution demandée !

Dashboard correctement affiché à la résolution demandée !

Même si ce n'est que du 720p, l'affichage est nettement plus fin et agréable qu'à la résolution d'origine.

Même si ce n’est que du 720p, l’affichage est nettement plus fin et agréable qu’à la résolution d’origine.

10. Paramétrer vos applications

Certaines applications proposent à leur tour plus de possibilités dans le paramétrage vidéo une fois la HD activée. C’est le cas par exemple de certains émulateurs. À vous de trouver le bon endroit pour modifier ces paramètres pour chacun d’entre eux. Contrairement au dash, le passage à la résolution maximale 1080i présente ici plus d’intérêt puisque la résolution de base des consoles émulées est très faible, on pourra donc obtenir de belles images proches du pixel-perfect, avec une interpolation minimale, si la résolution d’affichage est poussée au maximum.

Flashback en 1080i sur TV avec conservation de l'aspect ratio. C'est beau !

Flashback en 1080i sur TV avec conservation de l’aspect ratio. C’est beau !

Prise de vue rapprochée : on est très proche du pixel perfect !

Prise de vue rapprochée : on est très proche du pixel perfect !

Détail de l'image : l'interpolation est marginale, les pixels ne bavent pas :)

Détail de l’image : l’interpolation est marginale, les pixels ne bavent pas 🙂

Voila, c’est tout pour aujourd’hui. Dans mon prochain article, on abordera l’étape finale pour la mise en place de SMS automatisés.

 Winter is coming – S01E01

 14 octobre 2013  Domotique  1 commentaire »

L’hiver vient. Après avoir automatisé le démarrage et l’arrêt des radiateurs de mon appartement grâce à l’installation de fils pilotes et d’une centrale de programmation, je souhaite vivement mettre en place une fonctionnalité similaire sur ma climatisation réversible. Elle constitue pour moi un moyen économique et rapide de chauffer ma pièce principale, il serait donc intéressant de pouvoir la déclencher de manière programmée, ou encore mieux, à distance, par exemple de manière automatique le matin avant que je me lève, ou manuellement à l’heure où je sors du travail, afin que la pièce soit déjà chauffée lorsque j’arrive chez moi.

Seulement, mettre en place un tel projet n’est pas évident. Ma clim de marque Airton n’est pas programmable. Je ne peux pas non plus automatiser son déclenchement en connectant son alimentation sur des relais, cela équivaudrait à couper brutalement le courant lorsque je demande un arrêt, ce qui n’est pas conseillé quand le climatiseur est activé.

Ma seule possibilité d’interaction avec l’appareil reste sa télécommande. Je dois donc trouver un moyen de récupérer les codes infrarouges envoyés par la télécommande et de les faire reproduire par un second dispositif automatisable.

Pour récupérer les codes de la télécommande d’origine, j’ai choisi de ressortir mon Arduino, qui jusqu’ici ne m’avait pas encore beaucoup servi, et de lui connecter un récepteur infrarouge issu d’un petit kit de développement commandé chez DealExtreme. J’ai effectué le câblage de la manière suivante :

ir-receiver-breadboardir-receiver-schematicsJe précise, pour ceux qui ne connaissent pas et qui voudrait réaliser des plans de câblage similaires, que ces schémas ont été réalisés avec le fabuleux Fritzing. Attention, selon le type de récepteur infrarouge utilisé, le brochage peut varier. Vérifiez la notice du composant en cas de doute.

J’ai récupéré et utilisé la bibliothèque de commande infrarouge pour Arduino développée par Ken Shirriff sur la page GitHub associée. Le blog de Ken Shirriff regorge également d’excellentes explications sur l’utilisation de cette bibliothèque.

J’ai enfin compilé et déployé le code suivant sur l’Arduino. C’est du quick and dirty, pour le test :

#include <IRremote.h>
int RECV_PIN = 11; //define input pin on Arduino
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
	Serial.begin(9600);
	irrecv.enableIRIn(); // Start the receiver
	irrecv.blink13(true); // Blink LED 13 during IR reception
}

// Dumps out the decode_results structure.
// Call this after IRrecv::decode()
void dump(decode_results *results) {
	int count = results->rawlen;
	if (results->decode_type == UNKNOWN) {
		Serial.print("Unknown encoding: ");
	}
	else if (results->decode_type == NEC) {
		Serial.print("Decoded NEC: ");
	}
	else if (results->decode_type == SONY) {
		Serial.print("Decoded SONY: ");
	}
	else if (results->decode_type == RC5) {
		Serial.print("Decoded RC5: ");
	}
	else if (results->decode_type == RC6) {
		Serial.print("Decoded RC6: ");
	}
	else if (results->decode_type == PANASONIC) {
		Serial.print("Decoded PANASONIC - Address: ");
		Serial.print(results->panasonicAddress,HEX);
		Serial.print(" Value: ");
	}
	else if (results->decode_type == JVC) {
		Serial.print("Decoded JVC: ");
	}
	Serial.print(results->value, HEX);
	Serial.print(" (");
	Serial.print(results->bits, DEC);
	Serial.println(" bits)");
	Serial.print("Raw (");
	Serial.print(count, DEC);
	Serial.print("): ");

	for (int i = 0; i < count; i++) {
		if ((i % 2) == 1) {
			Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
		}
		else {
			Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
		}
		Serial.print(" ");
	}
	Serial.println("");
}

void loop() {
	if (irrecv.decode(&results)) {
		Serial.println(results.value, HEX);
		dump(&results);
		irrecv.resume(); // Receive the next value
	}
}

La carte est maintenant prête à recevoir les codes de quelques télécommandes. Afin d’afficher les codes IR reconnus par le dispositif, il est nécessaire de lancer le moniteur série de l’éditeur Arduino.

Montage sur platine d'essais, on ne peut plus simple.

Montage sur platine d’essais, on ne peut plus simple.

La plupart des télécommandes que j’avais sous la main ont été reconnues par le récepteur, à l’exception de ma télécommande Xbox. La LED du récepteur clignote lorsqu’il reçoit un signal IR. C’est d’ailleurs ce qui m’a permis de constater que mon écran PC parasitait le récepteur, j’ai donc pris soin de conserver une distance suffisante entre les deux appareils pour mes tests.

Je me suis par la suite focalisé sur le décodage des codes IR reçus, et affichés dans moniteur série. Sans surprise, la télécommande DealExtreme affiche les codes de télécommande NEC, tels que l’indique sa documentation.

La télécommande de mon climatiseur Airton est également reconnue comme utilisant le protocole NEC. En cherchant des informations sur ce protocole, j’ai trouvé entre autres cette synthèse, très bien réalisée. Elle m’a alors permis de vérifier si les codes IR reçus étaient cohérents par rapport au protocole reconnu.

decoded-ir-codes-with-raw-data

Attention, là, ça devient un poil technique :

La synthèse du protocole NEC m’apprend que celui-ci transmet une information sur 4 octets (soit 32 bits), plus un en-tête et un stop bit. Chaque bit 0 ou 1, ainsi que l’en-tête et le stop bit, sont codés par un niveau actif (émission de lumière IR) suivi d’un niveau inactif (pas d’émission de lumière), la durée de chacun de ces niveaux déterminant le type de bit codé. Pendant un niveau actif, l’émission de lumière n’est pas continue mais pulsée à la fréquence de 38 kHz. Enfin, sur les 4 octets, seuls 2 comportent une information utile, puisque les 2 autres contiennent un XOR de l’octet précédent avec 0xFF. Pour les novices en informatique, le XOR est un OU EXCLUSIF logique bit à bit, et n’a aucun rapport avec un personnage de fiction exerçant la profession de shérif de l’espace. Ici un XOR avec 0xFF revient à inverser chaque bit, donc 0 devient 1 et 1 devient 0.

Ainsi par exemple, au niveau de ma télécommande DealExtreme, le premier code remonté est FFA25D, ce qui correspond en réalité à une réception de 00FFA25D exprimé avec 32 bits. Les 4 octets sont 0x00, 0xFF, 0xA2, 0x5D. Le premier octet représente l’adresse (0), le second 0xFF correspond bien à l’inversion bit à bit de 0x00, le troisième octet 0xA2 représente la commande, et le quatrième 0x5D correspond bien à l’inversion bit à bit de 0xA2. Notez que la commande reçue 0xA2 est exprimée en LSB-first, bit de poids faible transmis en premier, et que si on la convertit en MSB-first, bit de poids fort transmis en premier comme l’être humain moyen a l’habitude de manier les nombres (en général on écrit les dizaines à gauche des unités), on obtient le code logique de commande 0x45, soit 69 en décimal.

La commande reçue correspond donc à un code 69 envoyé à l’adresse 0. Fin de la plongée dans le détail du protocole.

Si je regarde maintenant les codes reçus correspondants aux appuis de touches sur ma télécommande Airton, 2 points m’interpellent :

  • J’ai appuyé sur plusieurs boutons de ma télécommande, et tous sont décodés comme 6A8E0000 par le dispositif. Tous les boutons qui envoient le même code, c’est louche.
  • Au niveau de la structure du code reçu, si 0x6A est l’adresse, alors son inversion bit à bit devrait être 0x95, et non pas le 0x8E obtenu. De même, l’inversion bit à bit de 0x00 devrait être 0xFF, et non pas le 0x00 obtenu. Il y a donc vraiment quelque chose qui cloche.

Forcément, je m’attendais à ce que cela ne soit pas simple. La bonne nouvelle pour moi, c’est que le signal envoyé par la télécommande est bien perçu par le récepteur. La mauvaise, c’est que le récepteur ne semble pas décoder ce signal de la bonne façon. Il faut donc investiguer sur la bibliothèque de commande infrarouge, comprendre comment elle fonctionne, et probablement la modifier pour l’adapter aux spécificités de ma télécommande Airton. Mais ça, c’est pour une prochaine fois.

 SMS automatisé – Round two

 11 octobre 2013  Projet Serveur  Aucun commentaire

Dans mon premier article sur le sujet, j’avais promis que la suite de l’aventure se déroulerait sur une seconde maquette démontrant l’envoi de SMS grâce à l’utilisation d’un modem GSM et des commandes AT. Cette expérience constituera donc le sujet de cet article.

Comme d’habitude en retard en ce qui concerne la rédaction de mes articles (les photos que vous pourrez voir dans celui-ci ont été prises il y a pile un an), je tiens à préciser que ce retard se comble néanmoins peu à peu, avec pour effet de bord une accumulation de retard sur les interactions sociales avec les individus de mon espèce.

À la question « Pourquoi le modem GSM quand on peut déjà scripter l’envoi de SMS avec un Nokia 3310 ? », je répondrais : « Pour sa capacité à s’intégrer dans une chaîne de traitement automatisée ! Le 3310 ne fonctionne qu’avec son chargeur branché en permanence, avec les conséquences sur la batterie, et il doit être rallumé manuellement si jamais il venait à s’éteindre. Le modem GSM est alimenté par USB et sous tension dès que la machine/le serveur sur lequel il est connecté l’est aussi. »

Maintenant que tout est dit, passons au détail. J’ai choisi un modem Fastrack Wavecom en USB, ou un de ses clones, acheté à un vendeur chinois pour une somme très raisonnable sur un célèbre de site de vente aux enchères au logo multicolore et aux commissions sur les ventes outrageantes. L’appareil m’a été livré seulement deux semaines après l’achat, cette livraison dans un laps de temps si court prouve qu’il n’est pas arrivé à pied par la Chine.

Un paquet mystère en provenance de Chine.

Un paquet mystère en provenance de Chine.

Détail intéressant n°1, comme à leur habitude, les Chinois ne se prennent pas trop la tête avec la douane. La déclaration sur le paquet mentionne une valeur de marchandise de 1$, le contenu est décrit comme étant des LED, et la case « gift » est coché. Tout est fait pour que le colis passe les frontière comme une lettre à la poste, c’est le cas de le dire.

Le formulaire accolé sur le paquet suit à la lettre les préceptes du livre "Comment gruger les services de douane en loucedé", éditions Gallimard.

Le formulaire accolé sur le paquet suit à la lettre les préceptes du livre « Comment gruger les services de douane en loucedé », éditions Gallimard.

Au déballage, on retrouve le modem, son antenne amovible, un cordon USB et un mini-CD.

Pas de grosse surprise au déballage.

Pas de grosse surprise au déballage.

Détail intéressant n°2, le mini-CD inclus dans le package, auquel j’ai tenté d’accéder, comme ça pour rigoler. Évidemment, le support est blindé à craquer de fichiers tous plus chelous les uns que les autres, entre autres des bons vieux exécutables chargés à ras bord de plus de chevaux de Troie qu’il ne faudrait pour mettre à sac un pays entier. Timeo Danaos et dona ferentes, et cela s’applique aussi aux Chinois.

Double-cliquez sur n'importe quel exécutable pour transformer votre PC en robot-spammeur, plate-forme d'échange de numéros de cartes bancaires volés, et proxy pour darknet pédophile.

Double-cliquez sur n’importe quel exécutable pour transformer votre PC en robot-spammeur, plate-forme d’échange de numéros de cartes bancaires volés, et proxy pour darknet pédophile.

Par sécurité, je décide que le mini-CD ne sera plus jamais lu sur un système Windows. La lecture du support sur un système Linux, afin de fouiller si des instructions intéressantes sont présentes, ne me permet de ne faire qu’une seule découverte digne de ce nom : le support Unicode est bien opérationnel sur ma plate forme.

Et on remercie la fonction copier/coller du terminal pour naviguer dans les répertoires en chinois.

Et on remercie la fonction copier/coller du terminal pour naviguer dans les répertoires en chinois.

Le déballage effectué, il est maintenant temps de passer aux choses sérieuses, à savoir, pour commencer, le chargement d’une carte SIM dans le modem et le test de quelques commandes AT. J’ai effectué ces tests de commandes AT sous Windows.

La carte SIM B&You prête à reprendre du service.

La carte SIM B&You prête à reprendre du service.

Le but de cet article n’est pas de détailler l’utilisation des commandes AT. Quelques minutes de browsing en passant par votre moteur de recherche préféré vous conduiront directement à des tutoriels très bien faits sur le sujet, dont celui-ci que je trouve extrêmement complet.

Une fois la base des commandes AT comprises, l’envoi d’un SMS de test devient rapidement une formalité, comme l’illustre la capture d’écran ci dessous.

Envoi d'un message simple par commandes AT.

Envoi d’un message simple par commandes AT.

Un détail intéressant à propos des commandes AT, surtout à l’ère des communications internationales, est la possibilité malgré un ensemble de commandes utilisant un jeu de caractères réduit,  d’envoyer également des caractères Unicode, pour peu que le modem supporte la fonction (et que le mobile puisse les afficher). Cela se fait au travers d’une petite gymnastique de conversion décrite sur ce site. J’ai bien évidemment testé :

Envoi d'un message Unicode par commandes AT.

Envoi d’un message Unicode par commandes AT.

Et le résultat ne se fait pas attendre, les 2 SMS sont bien reçus par le mobile destinataire, ici un Nokia C7.

Réception immédiate et conforme aux messages envoyés.

Réception immédiate et conforme aux messages envoyés.

J’en sais assez, l’expérience peut prendre fin. Il est temps de confier la tâche de l’envoi à une application de plus haut niveau qui se chargera d’envoyer les commandes AT au modem pour moi. Et cette application, c’est encore une fois gnokii, sur système Linux cette fois-ci.

En premier vient la préparation du système. Si ce n’est pas déjà fait, cela consiste à ajouter les options suivantes dans le noyau Linux :

Device Drivers --->
-----USB Support --->
----------USB Serial Converter support --->
--------------- USB FTDI Single Port Serial Driver
--------------- USB Prolific 2303 Single Port Serial Driver

Si pl2303 est bien chargé automatiquement au démarrage, ce n’est pas le cas de ftdi_sio. La déclaration de ftdi_sio  dans /etc/modules permet de résoudre ce problème. J’ai aussi créé un lien symbolique /dev/wavecom vers le périphérique USB adéquat (/dev/ttyUSB0 chez moi) grâce à udev.

Enfin, le fichier de configuration de gnokii (/etc/xdg/gnokii/config sur Debian) est mis à jour de la manière suivante :

[global]
port = /dev/wavecom
model = AT
initlength = default
connection = serial
use_locking = yes
serial_baudrate = 9600

Les préparatifs sont terminés, place à l’action. On commence par tester que le lien avec le modem est fonctionnel, grâce à une commande qui retourne les principales informations liées au modem.

Modem reconnu par gnokii, numéro IMEI générique.

Modem reconnu par gnokii, numéro IMEI générique.

Détail intéressant n°3, le modem est livré avec un numéro IMEI non programmé, c’est à l’utilisateur de le faire au moyen d’une commande AT (vraisemblablement irréversible une fois effectué). Le numéro par défaut est 012345678901234. Je n’ai pas testé l’écriture d’un numéro IMEI à l’heure où j’écris ces lignes, l’envoi de SMS fonctionne très bien sans cela. Je ne pourrais que conseiller d’être prudent avec cette fonction, il serait en effet dommage d’entrer un IMEI au hasard bloqué par les opérateurs (par exemple suite à un vol de mobile). Si je devais le faire, j’utiliserais un IMEI issu d’un vieux téléphone mobile qui traine dans mes cartons, par exemple le Nokia 3310 qui m’a servi lors des tests précédents.

Avant de tenter un envoi, on prendra soin de débloquer la carte SIM en saisissant le code PIN. L’exemple suivant montre comment effectuer l’opération :

dhalsim:/# gnokii --identify
gnokiid Version 0.6.30
IMEI         : 012345678901234
Fabricant: WAVECOM MODEM
Aucune section flags dans le fichier de configuration.
Modele       : MULTIBAND  900E  1800
Nom du produit : MULTIBAND  900E  1800
Revision     : 532a09gg.2C2 182812
dhalsim:/# gnokii --getsecuritycodestatus
gnokiid Version 0.6.30
Etat du code de securite: en attente du code PIN.
dhalsim:/# gnokii --entersecuritycode PIN
gnokiid Version 0.6.30
Entrez votre code:
Code ok.
dhalsim:/# gnokii --getsecuritycodestatus
gnokiid Version 0.6.30
Etat du code de securite: rien a entrer.

On peut ensuite tester l’envoi de SMS en bonne et due forme. Pour commencer, un envoi d’un message long avec divers caractères accentués (NB : l’encodage de caractères des paramètres régionaux de ma session est l’UTF-8). Gnokii m’informe que le message a bien été envoyé en 2 parties.

Envoi d'un message avec caractères accentués par gnokii.

Envoi d’un message avec caractères accentués par gnokii.

Dans la foulée, j’en profite pour tester l’envoi de caractères un peu plus exotiques, directement depuis le shell. Celui-ci est bien envoyé également.

Envoi d'un message avec caractères chinois par gnokii.

Envoi d’un message avec caractères chinois par gnokii.

Attention toutefois, chaque idéogramme compte pour plus d’un caractère, on peut donc vite dépasser la limite du sous-message à 160 caractères en envoyant n’importe quoi. Pour ma part, bien que cela soit prévu par la norme GSM j’ai réussi à bloquer gnokii en tentant d’envoyer « 短信猫驱动与配套软件及安装说明书 ». Je n’ai pas cherché qui de gnokii ou du modem était en faute, ce genre de message n’étant pas représentatif des communications que je compte automatiser. J’aime simplement connaître les limites des systèmes que j’utilise. J’espère juste qu’un modem chinois est capable d’envoyer des message en chinois, sinon, le monde est mal barré.

Les messages correctement traités par gnokii ont bien été reçus sur le Nokia C7, avec un bémol sur le message en chinois : le mobile repère bien 4 caractères correspondant à mes 4 idéogrammes, mais ne les affiche pas. Je présume qu’il n’embarque pas la police de caractère adéquate. Décidément, Nokia, ce n’est plus ce que c’était.

Les messages envoyés par le shell sont reçus sur le mobile, et plus ou moins bien affichés en fonction du jeu de caractères constituant chacun d'entre eux.

Les messages envoyés par le shell sont reçus sur le mobile, et plus ou moins bien affichés en fonction du jeu de caractères constituant chacun d’entre eux.

La photo ci-dessus fait également apparaitre un message « Test réception SMS », que j’ai moi-même écrit à partir du mobile et envoyé au numéro de téléphone correspondant à la carte SIM à l’intérieur du modem. Le but de l’opération étant cette fois-ci de tester la réception et la récupération de messages à partir du shell. Une fois encore, c’est gnokii qui s’occupe de cette tâche. La commande permet d’afficher tous les messages enregistrés dans la boîte de réception de la carte SIM. Le message envoyé à partir de mon mobile est bien visible (tout en bas).

Dépilage des messages stockés dans la carte SIM.

Dépilage des messages stockés dans la carte SIM.

Au fait, ne vous en faîtes pas pour les impayés dont il est question dans la capture d’écran ci-dessus, le message bien qu’alarmant a été envoyé par erreur par B&You à un grand nombre de ses clients parfaitement en règle avec leurs échéances de paiement. Les malencontreuses erreurs de fonctionnement que l’on rencontre au début quand on est un nouvel opérateur sur le marché, j’imagine…

Voila pour l’instant, les résultats de ces test sont très satisfaisants. Bien sûr, il reste encore à mettre en place une architecture proposant les interfaces d’envoi et de réception à n’importe quel script ou process présent sur le système, en passant par une base de données par exemple.

C’est là qu’intervient gnokii-smsd. Mais cela sera relaté dans un article futur.