M2 SETI B4 / MS SE SE758


TP Interface utilisateur

Introduction

Objectifs

L’objectif de ce TP est de compléter le pilote de périphérique ADXL345 commencé lors du TP précédent et de lui ajouter la possibilité pour l’espace utilisateur d’interagir avec lui via le framework misc.

Pré-requis

Environnement de TP

Nous allons reprendre le répertoire créé lors du TP précédent.

$ export TPROOT=xxx  # À adapter
$ cd $TPROOT
$ cd pilote_i2c

Pensez à adapter les commandes ci-dessus en fonction du nom donné au répertoire lors du premier TP.

Pour rappel, le lien vers la documentation de l’accéléromètre :

Première étape

Dans cette première étape, nous allons nous contenter de s’enregistrer auprès du framework misc.

  1. Déclarez une structure struct adxl345_device contenant pour le moment un unique champ de type struct miscdevice

  2. Dans la fonction probe

  1. Dans la fonction remove
  1. Compilez et testez votre pilote (vérifiez notamment que le fichier spécial apparaît bien dans /dev après avoir chargé votre pilote)

Deuxième étape

Dans cette deuxième étape, nous allons implémenter la fonction de rappel read pour permettre à une application de récupérer des données depuis l’application.

On supposera dans un premier temps que cette fonction renvoie les données de l’axe X de l’accéléromètre. Pour simplifier, si l’application demande un octet, on renverra l’octet de poids fort du dernier échantillon, et si l’application demande plus d’un octet, on renverra la valeur complète d’un échantillon (16 bits) mais pas plus (donc même si l’application demande 6 octets, notre fonction ne lui en fournira que 2).

  1. Écrivez la fonction adxl345_read
  1. Dans la fonction probe, déclarez cette fonction adxl345_read

  2. Compilez et chargez votre pilote

  3. Écrivez une petite application en C pour tester

Troisième étape

On veut maintenant permettre à l’application de choisir l’axe (X, Y ou Z) qu’elle veut récupérer, grâce à l’appel système ioctl.

Pour ce faire, lisez bien la documentation du noyau (fichier Documentation/driver-api/ioctl.rst) afin de respecter les conventions autour d’ioctl.

Dans un premier temps, on acceptera que la modification de l’axe choisi impacte toutes les applications qui utilisent l’accéléromètre en question. On réfléchira ensuite à comment faire en sorte que ce changement n’impacte que l’application qui l’a demandée.

À vous de jouer !


© Copyright 2020 Guillaume Duc. Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International (à l'exception des exemples de code tirés du noyau Linux et qui sont distribués sous leurs licences d'origine).

Licence
Creative Commons