Commander un iPhone depuis un Mac à travers le connecteur dock

Ce sujet est un peu spécial. A la base, je voulais me fabriquer un adaptateur pour activer manuellement le mode « iPod Out » d’iOS, un truc lié aux voitures. Mais je me suis rendu compte que – malheureusement – ça ne fonctionne avec un accessoire authentifié. En attendant de régler (peut-être) ce problème, voici un petit résumé de ce qu’il est possible de faire.

Le connecteur dock (30 broches) des iPod et appareils iOS dispose de pas mal de fonctions. Il gère l’USB, le FireWire (sur les vieux appareils), un port série (TTL), une entrée audio analogique, une sortie audio analogique, de la vidéo en analogique (composite, S-Video, composante) et même dans certains cas de la vidéo en numérique (deux lignes DisplayPort, même si rarement sous cette forme). Mon projet de base était de connecter ce qui est nécessaire pour le mode « iPod Out » (série, sortie audio, sortie vidéo) sur un connecteur PodBreakout – une prise qui donne un accès simple aux 30 broches – et de l’activer manuellement.

Le connecteur

On trouve assez facilement le brochage du connecteur.

• Audio : Broche 1 pour la masse, broche 3 pour la sortie ligne droite et broche 4 pour la sortie ligne gauche.
• Vidéo : Broche 1 pour la masse et broche 8 pour la sortie composite.
• Série : Broche 11 pour la masse (ça force la sortie audio sur le connecteur dock), broche 18 pour le 3,3 V, broche 12 pour le TX et broche 13 pour le RX.
• Activation du série : Une résistance de ~500K entre la broche 21 (identification) et la broche 15 (masse).

J’ai relié l’audio à une prise jack femelle, la vidéo à une prise composite mâle et le connecteur série à un adaptateur USB super cheap (astuce : on trouve des pilotes signés là).

Mon adaptateur crade : un PodBreakout, un adaptateur USB vers TTL, une sortie jack (ligne) et une sortie composite

Le souci de l’authentification

Avant même de parler de ce qu’il est possible de faire, un mot sur l’authentification. Depuis pas mal de temps maintenant, Apple essaye de contrôler les vendeurs d’accessoires. Si certaines fonctions passent par défaut (audio, série, etc.), d’autres demandent une authentification, comme les sorties vidéo. En clair, si vous n’avez pas la petite puce Apple dans votre câble pour activer (et donc valider que vous payez la dîme) la sortie, vous n’aurez pas d’image. Plus exactement, la sortie vidéo fonctionne en théorie sur les iPod Photos, 4G « couleur » et iPod 5G, mais pas sur les modèles suivants (ou les iPhone). Même chose pour le mode « iPod Out » : sans la puce, ça ne fonctionne tout simplement pas. Il existe visiblement une solution – que je tenterais – qui consiste à récupérer la puce dans un câble.

Sur un iPhone 3GS, quand j’essaye d’obtenir le mode iPod Out

Les commandes

Commander un iPod ou un iPhone passe par une série de commandes, divisées en plusieurs modes. On trouve la description de deux modes sur ce site (ou ) et je me suis basé sur ce que Tibounise propose sur son site pour la création des commandes. En abrégé, on se connecte sur le bus série de l’appareil avant d’envoyer quelques commandes qui le font réagir. La source peut être un Arduino, un microcontrôleur quelconque, un Raspberry Pi ou – dans mon cas – un Mac. Tant qu’il est possible d’utiliser le lien série, ça doit fonctionner. Pour des raisons de facilité, je travaille en Python avec l’outil de Tibounise (un peu modifié) pour les checksum.

Calculer les commandes

Apple propose différents modes, mais seuls le 2 (télécommande simple) et le 4 (télécommande avancée) sont documentés publiquement. Le 3 (télécommande avec écran) nécessite une authentification pour la majorité des fonctions (pas toutes), le 5 est lié à l’énergie, le 6 permet de passer en mode USB Host (sur les appareils iOS compatibles), le 7 permet de proposer des accessoires pour la radio et nécessite une authentification, le 8 gère l’égalisation (authentification obligatoire), le 9 le sport (Nike+ et compagnie), le A (c’est de l’hexadécimal) prend en charge l’audio numérique (avec authetification), le C (pas de B) le stockage et le D le mode iPod Out. Enfin, le E permet de proposer des GPS externes qui envoient des informations à un appareil iOS (3.0 au minimum). La majorité des modes nécessite une authentification avec une puce, ce qui explique l’absence de documentation : sans la puce, ça ne sert strictement à rien.

Je ne sais pas trop si mon (affreux) code Python peut servir, mais en gros j’utilise une librairie série pour envoyer les commandes générées avec l’utilitaire de Tibounise. En mode « télécommande simple » (le 2), on peut contrôler facilement les fonctions d’un iPod ou d’un iPhone/iPad, que ce soit les commandes de base (Play, Pause, etc.), le volume ou même la navigation. Le fonctionnement reste basique : connexion série, passage dans le bon mode, envoi de la commande, envoi d’une commande d’activation. Le plus compliqué reste de calculer les checksum (ce que fait la solution de Tibounise, donc).

Prochaine étape, pour plus tard, essayer au moins d’activer la sortie vidéo et – pourquoi pas – le mode iPod Out.