domodom
Accueil du site > mini2440 > Windows CE > Tutoriaux > Ecrire une application VB.Net pour piloter les GPIOs

Ecrire une application VB.Net pour piloter les GPIOs

lundi 3 mai 2010, par Dom

Ce tutoriel va montrer comment, sous Visual Studio 2008 pro, écrire une application VB.Net qui utilise un driver stream.

Pour ce faire, je vais utiliser le driver GPIO (voir article suivant) que j’ai écrit pour piloter les GPIOs. Si vous voulez tester ce tutoriel, je vous invite donc à commencer par lire cet article et intégrer le driver GPIO dans votre image Windows CE. Votre image devra également contenir le .Net Framework 3.5 et l’installateur de fichiers CAB :

Installation des outils

Le processus d’installation de Visual Studio 2008 pro est facile, je n’ai rien à rajouter. Néanmoins, j’ai installé l’outil sur une machine sur laquelle Visual Studio 2005 pro était déjà installé, ainsi que le SDK de la mini2440. Si cela n’est pas votre cas, il faudra sans doute installer le SDK de la mini2440 après l’installation de VS2008pro.

Création de notre projet

Démarrez VS2008pro, dans le menu File, sélectionnez New, puis Project. La boîte de dialogue suivante doit s’afficher, sélectionnez un projet Visual Basic, Smart Device, dans l’emplacement de votre choix, et cliquez sur le bouton OK :

Dans la boîte de dialogue suivante, sélectionnez la plateforme cible Windows CE , la version 3.5 du .Net Framework, et le type de projet (Device Application) avant de cliquer sur OK :

Visual Studio doit initialiser un projet VB.Net avec une boîte de dialogue nommée Form1. Réduisez la taille de la boîte de dialogue, détruisez le menu (clic droit, delete) et ajoutez les éléments suivants :
- 4 boutons appelés Button1, Button2, Button3 et Button4
- 6 checkbox appelés Checkbox1, Checkbox2, Checkbox3, Checkbox4, Checkbox5, Checkbox6
- un timer avec les propriété suivantes : Enabled = True, Interval = 100

Dans le menu View, sélectionnez Code. Remplacez le contenu du fichier par celui-ci.

Dans le menu Build, sélectionnez Build Solution pour générer l’exécutable. Si tout va bien, la ligne suivante doit s’afficher à la fin de la génération :
========== Build : 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Dans la liste déroulante en haut à gauche, sélectionnez votre cible : Mini2440-CE6-SDK ARMV4I Device

Démarrez votre mini2440, connectez là à votre PC via Activesync, puis, dans le menu Debug, sélectionnez Start Debugging.

Le déploiement et le démarrage de la session de debug est assez longue.

Et voilà, vous venez d’écrire une application VB.Net qui permet d’allumer les leds et afficher l’état des boutons situés sous l’écran.

Pour ceux qui ça intéresse, voici le projet Visual Studio 2008 complet.

Quelques explications sur le code source

Le code est vraiment simple, il utilise les fonctions :
- CreateFile() : pour récupérer un pointeur sur une instance du driver GPIO
- DeviceIoControl() : pour envoyer des requêtes IOCTL au driver GPIO

Pour garder du code lisible, j’ai redéfini les structures C en VB.Net. Problème, la fonction DeviceIoControl prend en entrée un Byte(). Pour transformer un objet structure en Byte(), j’alloue une zone mémoire :
bytePtr = Marshal.AllocHGlobal(12)

puis je recopie la structure dans la zone en question :
Marshal.StructureToPtr(pinConfig, bytePtr, False)

Inversement, lors de la lecture de l’état d’une entrée, il est nécessaire de recopier la zone mémoire dans une structure :
pinValueRead = CType(Marshal.PtrToStructure(bytePtr, GetType(GPIO_GET_PIN_OUTPUT_VALUE)), GPIO_GET_PIN_OUTPUT_VALUE)

Le reste du code est classique et ne mérite pas d’autres explications.

Voilà, j’avoue ne pas être un champion de VB.Net, j’ai plutôt l’habitude d’écrire des applications temps réel en C++. Il est donc possible qu’il y ait des optimisations ou des façons de faire plus efficace. Si c’est le cas, n’hésitez pas à m’envoyer un message via le lien "contact me" en bas de page.

Lire cet article en anglais

SPIP | Contact me | | Plan du site | Suivre la vie du site RSS 2.0      Version Française | English version