Relier un QuickTake 200 en série sur un Mac récent

Quand j’avais testé le QuickTake 200, j’avais eu un problème : ce vieil appareil photo se connecte via un port série et enregistre ses photos sur des cartes SmartMedia 5V. Les cartes posent des soucis car les lecteurs compatibles SmartMedia sont rares, et les modèles compatibles 5V encore plus. Et sur le port série, les programmes que j’avais testé sous macOS ne fonctionnent pas, donc j’ai décidé de faire mon propre programme.

Le QuickTake 200 fonctionne sur une base Fujifilm, avec un protocole série identique. Premièrement, il faut un câble série compatible. L’appareil utilise une prise jack 2,5 mm (j’ai trouvé un adaptateur sur eBay) et le brochage est simple. Ensuite, il faut évidemment un adaptateur série compatible avec macOS. Assez bizarrement, mon programme n’a pas fonctionné avec un modèle à base de Prolific et il n’est pas très stable (et plus lent) avec un modèle à base de FTDI. J’ai utilisé essentiellement un adaptateur Keyspan (USA-28XG) en Mini DIN 8.

J’ai choisi le Python comme langage parce que c’est assez simple à appréhender pour un débutant (je n’ai plus programmé depuis de longues années) et qu’il est possible de se connecter facilement sur un port série. J’ai fait un programme assez simple, avec quelques fonctions. Il se connecte à l’appareil, passe la liaison à 57600 bauds (a priori le maximum), récupère le nombre de photos, récupère les miniatures (en TIFF) et demande s’il faut récupérer les fichiers JPEG, étant donné que c’est un peu lent. Ensuite, il propose d’effacer toutes les photos. En gros, le service minimum.

Attention, il est en Python 2.x, il ne fonctionne donc plus sur les versions récentes de macOS (à partir de Monterey 12.3) qui suppriment Python 2.

Le programme, simple, basique

Le protocole

Je ne vais pas détailler le tout ici (le programme commenté est sur Github), mais voici quand même quelques informations. L’appareil se connecte par défaut à 9600 bauds (8 bits, parity even, 1 stop bit) et une commande permet de passer sur un débit plus rapide (19200, 38400 ou 57600). Mon programme force le 57600, qui semble fonctionner dans tous les cas. Les logiciels Mac OS 9 indiquent un support du 115 et du 230 kb/s, mais ça ne semble pas fonctionner. Chaque commande commence par un 10 en hexadécimal, suivi d’une commande. Petit truc qui m’a un peu bloqué, pour éviter que l’appareil ne détecte une commande quand elle n’existe pas, les valeurs 10 sont doublées quand elles ne servent pas à la signalisation. Chaque série de commandes se termine par un bloc précis (1003) suivi d’une confirmation, calculé en faisant un XOR sur une partie de la commande. Mon code ne vérifie pas ce point, je zappe la vérification pour simplifier le code, en sachant que je n’ai pas eu d’erreurs visibles dans mes tests. On trouve une partie des commandes et des explications sur la façon de calculer le checksum sur cette page, et quelques infos parcellaires , et là. On trouve une liste de commandes pour le Fujitsu MX-700 sur cette page, mais le QuickTake 200 est basée sur une version précédente du protocole et il ne supporte pas toutes les commandes. J’ai réussi à récupérer les miniatures (00), récupérer une image (02), changer la vitesse (07), obtenir le modèle (09), le nom d’une image (0A), le nombre d’images (0B) et l’effacement (19). Les autres ne semblent pas fonctionner. Le programme d’Apple pour Mac OS supporte visiblement l’upload de photos vers l’appareil et le changement de date, mais ça ne semble pas fonctionner avec les commandes standards. Je suppose que la solution passera par l’analyse de la liaison avec mon Mac entre les deux.

Le programme est assez rudimentaire, et il récupère d’abord les miniatures (plus exactement les EXIF des fichiers, en réalité), avec une image en TIFF en 80 x 60. ca permet d’avoir une vague idée de l’image et les miniatures se chargent rapidement en série (1 à 2 secondes). Ensuite, le programme récupère séquentiellement les images JPEG. Ça prend environ 20 secondes par image – nettement plus rapidement qu’avec un vieux Mac d’ailleurs -, en fonction de la qualité choisie. L’appareil enregistre des JPEG en 640 x 480, lisibles directement sur un Mac moderne. Ensuite, le programme propose de tout effacer, même s’il est assez simple de le modifier pour effacer une photo en particulier.

Une miniature


La version complète

Dans l’ensemble, mon petit programme peut suffire pour récupérer des photos si vous n’avez pas de lecteur de cartes SmartMedia, et c’était le but. Je suis content du résultat, même si mon code est largement perfectible. Je m’y attaquerais peut-être un jour, mais pour le moment, je vais m’occuper d’autres choses. Au passage, il fonctionne avec un FujiFilm DX-7 et sûrement avec d’autres modèles de la marque.

Le cas des QuickTake 1×0

Le programme pour le QuickTake 200 est une première étape de mon côté, au moins en théorie. A l’origine je voulais faire la même chose pour les QuickTake de la série 100, mais c’est plus compliqué. Premièrement, ils ne communiquent qu’avec le bus série, sans possibilité de récupérer les images d’une autre manière. Ici, lors de mes tests, j’ai pu utiliser les images lues depuis la carte mémoire pour vérifier et trouver ce que je faisais mal. Ensuite, le protocole ne semble pas documenté, je n’ai pas trouvé d’informations sérieuses sur le protocole en cherchant. Même avec le SDK d’Apple, c’est largement obscure. Enfin, les QuickTake 100, 100 Plus et 150 ont un défaut : ils enregistrent les photos dans un format propriétaire. Il est basé sur le PICT, mais avec une compression qui diffère selon l’appareil (QuickTake 100 ou 150). Donc en plus de devoir tatonner pour le protocole série, je risque de bloquer sur la conversion des images. Quelques programmes peuvent lire le format (comme GraphicConverter) mais le résultat n’est pas identique visuellement à ce que les programmes Apple génèrent par exemple. Bien évidemment, la compression ne semble pas réellement documentée, en tout cas pas en détail.