in|situ| Lab - Log In

all in|situ| jobs

A framework for implementing HID filters / Analyse et développement d'une librairie pour la programmation de pilotes / filtres HID

Internship proposal at in|situ|

Advisor: Stéphane Huot? (huot@lri.fr)

Description

L'utilisation de dispositifs d'entrée avancés (tablettes, souris 3D, Wiimotes, ...) est de plus en plus courante dans les systèmes interactifs actuels. Ces dispositifs sont souvent plus adaptés à des tâches particulières que les simples clavier et souris standard de part leur facteur de forme spécialement étudié pour certains mouvements et grâce aussi à des canaux d'entrée plus nombreux (degrés de liberté). Par exemple, le stylet d'une tablette graphique est bien mieux adapté à une tâche de dessin que ne l'est une souris, permettant de plus de capter la pression ou l'inclinaison appliquées par l'utilisateur, enrichissant ainsi l'interaction.

Mais bien que ces dispositifs se démocratisent de plus en plus, leur utilisation dans nos applications interactives reste encore anecdotique. Outre le fait que leur configuration et leur association avec des techniques d'interaction avancées n'est pas aussi triviale que pour une souris, l'un des problèmes réside dans le fait que ces dispositifs sont souvent gérés à bas-niveau par des pilotes propriétaires, avec des formats d'échange entre les applications et le dispositif qui peuvent être très différents d'un dispositif à un autre. Donc, pour utiliser les capacités étendues de ces périphériques, il faut encore souvent développer pour chaque application un support ad-hoc de chaque dispositif d'entrée que l'on veut prendre en charge.

Plusieurs applications ou boîtes à outils de développement dites "multi-dispositifs" aident à la prise en charge de ces types de périphériques. On peut citer par exemple l'application GlovePIE [1], la librairie java JInput [2] ou la boîte à outils ICon [3] (maintenue et utilisée au sein de l'équipe in|situ|). Ces outils facilitent donc l'utilisation de dispositifs hétérogènes à haut-niveau, mais ils se heurtent eux-même au problème exposé précédemment: le support bas-niveau d'un grand nombre de dispositifs aux protocoles différents et souvent propriétaires. Pourtant, il a été défini la norme USB HID (pour Human Interface Devices) [4] qui uniformise la description des propriétés des dispositifs d'interaction et leur utilisation. Cette norme permet a un dispositif de se déclarer en tant que dispositif d'interaction et spécifie un format pour qu'il décrive ses propriétés (axes, boutons, etc.). Grâce à ce niveau d'abstraction, il est plus aisé pour une application ou une boîte à outils de découvrir et de prendre en charge un grand nombre de dispositifs d'entrée variés de manière unifiée. Le problème réside dans le fait que cette norme n'est pas ou que partiellement prise en charge par les constructeurs de dispositifs d'entrée.

Une solution est de programmer et d'installer un filtre HID pour chaque dispositif non compatible HID: le filtre, un pilote situé 'entre' la couche de communication avec le dispositif (USB, bluetooth, série, ...) et les applications, va permettre de traduire de manières transparentes les informations reçues du dispositif dans le format de la norme HID afin de le rendre compatible avec tous les programmes prenant en compte cette norme. Ainsi, un dispositif ne respectant pas HID sera tout de même vu par le système et les applications interactives comme un dispositif compatible avec cette norme. Un exemple d'un tel pilote pour une manette de XBOX sous Mac OS X est disponible ici: http://xhd.sourceforge.net/.

L'objectif de ce stage consiste en l'étude et la réalisation d'outils logiciels facilitant le développement de tels filtres HID pour des périphériques divers (tablettes graphiques, souris avancées, surfaces multi-touch, etc.). Ces outils pourront prendre la forme de librairies, de 'templates' de code réutilisables, de documentations, de logiciels d'exploration des possibilités d'un dispositifs (axes, boutons, ...), etc. Ils devront rendre plus aisée la programmation de tels pilotes en en factorisant les parties communes (communication bas niveaux avec les dispositifs, implantation de la norme HID, mécanismes des pilotes matériel, etc.). Ce travail améliorera de manière conséquente la gestion des entrées dans les systèmes interactifs multi-dispositifs conçus au sein de l'équipe in|situ|. Il permettra même, à terme, la 'transformation' de matériel, protocoles ou processus en des dispositifs HID, offrant alors de nouvelles perspectives pour la gestion de l'interaction en entrée.

La plate-forme visée est dans un premier temps Mac OS X, à l'aide des librairies Apple (IOKit [5]). Il sera tout de même envisageable d'étudier la portabilité des outils proposés sur les systèmes Linux et Windows. Divers dispositifs d'entrée non standard seront mis à la disposition du stagiaire afin de prototyper et concevoir les outils demandés.

Prérequis

Ce stage requiert un bon niveau en programmation en général et une connaissance (ou un intérêt) pour la programmation système en particulier (développement de pilotes matériel), ainsi qu'une certaine maîtrise du langage C++. Une connaissance du langage ObjectiveC et des librairies de développement Apple (IOKit en particulier) serait un plus.

[1] http://carl.kenner.googlepages.com/glovepie

[2] https://jinput.dev.java.net/

[3] http://inputconf.sourceforge.net/

[4] http://www.usb.org/developers/hidpage/

[5] http://developer.apple.com/documentation/HardwareDrivers/