Noooonnn ? si !
Il s'agit d'une sonde colorimétrique maison, dévelopée par des gars du
forum hcfr (
http://www.homcinema-fr/colorimetre). Cette sonde utilise un
protocole série sur USB. J'arrive sans soucis à dialoguer avec elle sous
Linux en python via le device /dev/ttyACM0 (avec driver cdc-acm).
Maintenant, j'aimerais la faire fonctionner avec la suite de calibration
ArgyllCMS (
http://www.argyllcms.com), dans laquelle le développeur à
ajouté le support (je lui ai donné une sonde pour qu'il fasse les tests).
Argyll utilise non pas /dev/ttyACM0, mais la libusb, pour être portable,
car ce soft tourne sous win32, MacOS et unix (générique). Mais chez moi,
ça ne marche évidemment pas !
Déjà, j'avais blacklisté le driver cdc-acm pour qu'il n'y ait pas de
conflit. Ensuite, j'ai ajouté une règle udev :
SYSFS{idVendor}=="04db",SYSFS{idProduct}=="005b",GROUP="plugdev",MODE="660"
1) lorsque je branche la sonde, j'ai déjà un truc bizarre : la souris est
(re)détectée au même instant !
# tail -f /var/log/messages
...
Sep 12 08:23:13 coruscant kernel: usb 4-1: new low speed USB device using
ohci_hcd and address 50
Sep 12 08:23:13 coruscant kernel: usb 4-1: configuration #1 chosen from 1
choice
Sep 12 08:23:13 coruscant kernel: input: Logitech USB-PS/2 Optical Mouse
as /class/input/input51
Sep 12 08:23:13 coruscant kernel: input: USB HID v1.10 Mouse [Logitech
USB-PS/2 Optical Mouse] on usb-0000:03:00.1-1
Sep 12 08:23:13 coruscant kernel: ohci_hcd 0000:03:00.0: wakeup
Sep 12 08:23:13 coruscant kernel: usb 3-1: new full speed USB device using
ohci_hcd and address 46
Sep 12 08:23:13 coruscant kernel: usb 3-1: configuration #1 chosen from 1
choice
(à noter que même si je débranche la souris, ça ne résoud rien, mais bon,
c'est quand même un signe bizarre...).
lsusb voit bien les 2 distinctement :
$ lsusb
Bus 005 Device 001: ID 0000:0000
Bus 004 Device 050: ID 046d:c03e Logitech, Inc. Premium Optical Wheel Mouse
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 046: ID 04db:005b Hypertec Pty, Ltd
Bus 003 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
2) Lors de l'écriture, un strace me donne :
...
gettimeofday({1189578183, 295467}, NULL) = 0
ioctl(3, USBDEVFS_REAPURBNDELAY, 0xbfc2f648) = -1 EAGAIN (Resource
temporarily unavailable)
select(4, NULL, [], NULL, {0, 1000}) = 0 (Timeout)
gettimeofday({1189578183, 299269}, NULL) = 0
ioctl(3, USBDEVFS_REAPURBNDELAY, 0xbfc2f648) = -1 EAGAIN (Resource
temporarily unavailable)
select(4, NULL, [], NULL, {0, 1000}) = 0 (Timeout)
gettimeofday({1189578183, 303259}, NULL) = 0
ioctl(3, USBDEVFS_REAPURBNDELAY, 0xbfc2f648) = -1 EAGAIN (Resource
temporarily unavailable)
select(4, NULL, [], NULL, {0, 1000}) = 0 (Timeout)
gettimeofday({1189578183, 307264}, NULL) = 0
ioctl(3, USBDEVFS_REAPURBNDELAY, 0xbfc2f648) = -1 EAGAIN (Resource
temporarily unavailable)
...
à l'infini. Mon scanner (que je n'ai pas rebranché depuis un moment), me
donnait les même erreurs : il mettait un temps fou pour s'initialiser,
mais au bout d'un moment, finissait par fonctionner. Là, j'ai augmenté les
timeout dans Argyll, sans succès.
3) dans /var/log/message, lors de l'accès, je vois apparaître :
ttyS3: LSR safety check engaged!
qui semble signifier que le port série physique n'a pas été trouvé.
Les réponses que j'avais eu ici à l'époque du scanner disaient que c'était
probablement un soucis avec udev :o/ Je veux bien le croire, mais je n'y
pige toujours rien ! Pour info, un gars sur la liste Argyll avait ajouté
une règle pour une autre sonde USB :
SYSFS{idVendor}=="04db", SYSFS{idProduct}=="005b",
PROGRAM="/bin/sh -c 'K=%k; K=$${K#usbdev}; printf bus/usb/%%03i/%%03i
$${K%%%%.*} $${K#*.}'", NAME="%c", MODE="666"
J'ai testé avec mes id, mais ça marche encore moins bien ; la sonde n'est
pas du tout accessible.
Si vous avez des idées...
--
Frédéric
http://www.gbiloba.org