Les nouvelles API de détection et de localisation de Windows Seven

| LEBRUN Thomas | Louis-Guillaume MORAND |

Cet article a pour but de présenter les nouvelles API d'utilisations de détecteurs de Windows 7. Nous vous présenterons notamment la plateforme sur laquelle ces API sont basées puis nous vous montrerons comment les utiliser au sein de vos logiciels.

- Titre : Les nouvelles API de détection et de localisation de Windows Seven

- Auteurs : LEBRUN Thomas, Louis-Guillaume MORAND

- Parution : 18 février 2009

- Licence : Copyright ® 2009 Louis-Guillaume Morand. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- 0. Introduction

- 1. Présentation de la plateforme

- 1-1. Architecture

- 1-2. Les types de sondes disponibles

- 1-3. Windows 7 Sensor and Location Platform

- 2. Utilisation de l'API

- 2-1. Le gestionnaire de sondes

- 2-2. Récupération de données

- 3. Exemple d'utilisation d'un détecteur de luminosité

- 3-1. Matériel

- 4. Exemple d'utilisation d'un accéléromètre 3D

- 5. Liens et téléchargements

- 6. Conclusion

- 7. Remerciements

0 - Introduction

Chaque nouveau système d'exploitation arrive avec son lot de nouveautés et Windows 7 n'échappe pas à la règle. S'il contient un grand nombre de nouveautés destinés aux utilisateurs finaux, il inclus également de nouvelles API destinés aux développeurs pour que ceux-ci puissent apporter quelque chose de vraiment nouveau aux logiciels qu'ils développent.

Parmi ces nouveautés à destination des développeurs se trouve notamment une nouvelle plateforme à destination des sondes en tout genre, que l'on pourrait être tenté de brancher à un ordinateur. Ces sondes pourraient servir soit à faire de la domotique, soit à récupérer des informations, soit à faire de la domotique. Néanmoins, manipuler ces sondes se révèle bien souvent très complexe à mettre en place à cause de pilotes propriétaires, parfois incomplets, et la nécessité d'une plateforme uniformisée se faisait de plus en plus sentir.

Microsoft décida alors de répondre à ce problème et développa un framework de gestion de sondes permettant d'obtenir une plateforme simple à utiliser. Cette dernière est basée sur une architecture particulière que nous allons découvrir au fil de cet article.

1 - Présentation de la plateforme

1-1 - Architecture

La nouvelle plateforme avait pour premier objectif de répondre aux contraintes des sondes actuelles et surtout éviter les problèmes qui découlaient de leur utilisation. Encore aujourd'hui, en 2009, la majorité des périphériques externes (intéressons-nous ici principalement aux sondes), sont exposés via des ports COM virtuels et donc pas forcément évident à piloter, sont limités en accès concurrentiels, ne sont bien souvent pas sécurisés et surtout ont un format de donnée propriétaire. Même pour un développeur chevronné, de par les spécificités différentes de chaque périphérique, il faut à chaque fois recréer un mécanisme de communication complexe, parfois très coûteux en temps de développement.

L'idée est donc de fournir un point central de communication entre le développeur (et donc les applications) et les différents périphériques, au moyen d'une API simplifiée qui permettrait au développeur de n'avoir pas à se soucier de connaitre le moyen de communication avec la sonde ou tout simplement, de n'avoir à se soucier du modèle de sonde utilisé, seul son type (voir juste après) étant intéressant à connaitre.

En somme une architecture qui ressemblerait à ceci :

Comme le hasard fait bien les choses, c'est exactement ce à quoi ressemble la plateforme de gestion de sondes développé par Microsoft. Nous nous retrouvons donc, sur Windows 7, à pouvoir intérrogé une plateforme unique qui permet un certain nombre de choses :
- API prête et simple d'utilisation
- la plateforme se charge de nous transmettre la liste des sondes connectées et leur type
- utilisation synchrone et asynchrone possible
- permet l'accès concurrentiel aux sondes
- la plateforme est capable de se connecter automatiquement aux sondes les plus sensibles pour une meilleure qualité d'information
- utilise un modèle uniformisé pour utiliser des sondes physiques (GPS, caméra, etc.) ou logiques (système de triangulation wifi, etc.)
- permet de contrôler les informations utilisateurs communiquées (Big Brother est exclu de cette plateforme ;))
- compatible avec un grand nombre de types de sondes

Sur ce dernier point d'ailleurs, nous allons voir que Microsoft a vu relativement large en terme de sondes utilisables.

1-2 - Les types de sondes disponibles

Voici une liste de sondes que Microsoft pensent pouvoir être utilisés avec sa plateforme :

Type de sonde

Utilisation possible

GPS

Localisation et orientation

Accéléromètre

Mouvement, orientation et localisation

Proximité

Surveillance de présence et dans l'espace

Lumière

Luminosité ambiente

RFID

Identification d'éléments physiques, authentification automatique, localisation de personnes

Compas

Orientation

Caméra

Enregistrement, reconnaissance faciale, identification d'objet

Microphone

Bruit ambient

Température

Températeur ambiente, température de cuisson

Humidité

Détection de fuite d'eau

Détecteur de mouvement

Systèmes de sécurité, détection de mouvement près de l'ordinateur

Traffic

Prévision des temps de trajet

Station météo

Conditions et prévisions météorologiques

source : Introducing the Windows Sensor and Location Platform

1-3 - Windows 7 Sensor and Location Platform

"Windows 7 Sensor and Location Platform", il s'agit du nom exact de cette plateforme. Pourquoi avoir ajouté "Location" et pas simplement l'avoir appelé "Sensors Platform"? Tout simplement parce qu'il s'agit au final de deux plateformes dont l'une sert de base et l'autre est simplement une plateforme plus développée et destinée aux périphériques de Localisation, que Microsoft estime être bien plus courant et plus utile que les autres types de sondes.

2 - Utilisation de l'API

2-1 - Le gestionnaire de sondes

Comme nous l'avons vu avant, l'intérêt de la plateforme est de l'utiliser pour obtenir rapidement un lien vers notre sonde. En effet, l'application souhaite lire les informations envoyées par un type de sonde donné (par exemple, un microphone) mais elle ne sait ni si une telle sonde est branchée, ni dans le cas où plusieurs sondes sont branchées, laquelle utiliser.

Nous devons commencer par instancier un gestionnaire, en utilisant la classe SensorManager. Ce gestionnaire, permet donc d'obtenir un lien vers le (ou les) sondes souhaités. Ceux-ci sont sont récupérables via différentes méthodes selon les informations que l'on a en sa possession.

Voici le diagramme de classe :

Ainsi chacune des méthodes a un intérêt particulier :

GetAllSensors() : comme son nom l'indique, retourne une collection contenant toutes les sondes connectées à l'ordinateur

GetSensorByID() : permet de récupérer une sonde particulière à partir du moment où l'on connait son GUID

GetSensorsByCategory() : permet de récupérer une liste de sondes d'une catégorie particulière (lumière, biométrique, environnementale, etc.). Pour obtenir la liste des catégories connues, il faut utiliser la classe SensorCategories.

GetSensorByType<T>() : permet de récupérer une liste de sondes d'un type précis (détécteur de luminosité, microphone, accéléromètre, etc.). Pour connaître la liste complète des types, il faut utiliser la classe SensorTypes.

Exemple d'utilisation :

ISensorCollection ppSensorsFound = null;
this.Manager.GetSensorsByType(SensorTypes.AmbientLight, out ppSensorsFound);

Vous pouvez également créer votre propre Manager, en implémentant l'interface ISensorManager.

Notez également la présence de la méthode RequirePersmissions() qui permet d'afficher la fenêtre du système d'exploitation, demandant à l'utilisateur d'activer ou non la sonde, dans le cas où celle-ci utilisera des informations utilisateurs "privées".

2-2 - Récupération de données

Une fois la sonde connue et accessible, il est possible de récupérer ses informations. Ces données (DataReports), sont utilisables via la classe SensorDataReport.

ISensorDataReport dataReport = null;
_sensor.GetData(out dataReport);

Puis, pour obtenir chaque donnée individuellement, il faut utiliser la méthode GetSensorValue() :

PROPVARIANT pValue = new PROPVARIANT();
dataReport.GetSensorValue(ref pKey, pValue);

Les données ne sont pas toujours en temps réel. Lorsqu'un accéléromètre mettra à jour ses données toutes les millisecondes, un thermomètre ne le ferait par exemple qu'une fois par minute. Il n'est donc pas nécessaire pour le logiciel d'utiliser ces données toutes les secondes s'il est sûr qu'elles n'ont pas changées. Pour connaître la fréquence des mises à jour des données d'une sonde, il suffit d'appeler la méthode GetTimestamp() sur un bloc de données, puis d'adapter la récupération puis l'utilisation des données, en fonction de ce délai.

3 - Exemple d'utilisation d'un détecteur de luminosité

3-1 - Matériel

Bien entendu, ceci ne se fait pas sans posséder du matériel adéquat, matériel que vous pouvez trouver dans certains magasins spécialisés ou sur Internet. Personnellement, nous utiliserons une carte sonde (modèle Freescale JM Badge Board (HID)) possédant à la fois un détecteur de luminosité mais également un accéléromètre 3D et des détecteurs de toucher multiple (mais relativement basiques).

4 - Exemple d'utilisation d'un accéléromètre 3D

5 - Liens et téléchargements

Microsoft Windows SDK for Windows 7 : télécharger
Documentation du Windows SDK Windows 7 : lire
Exemple de code d'utilisation des API : télécharger

6 - Conclusion

7 - Remerciements