lundi 28 septembre 2009

Création d'un driver (Buzzer)

Nous allons creer un driver pour le buzzer :
Première étape consiste a comprendre à quel patte du CPU, le buzzer est relié. Bon assez facile le port B, la patte GPB0.
On va donc cloner le driver de led pour creer le driver du buzzer.
Pour activer le GPB0 en mode output il faut setter les 2 premiers bit de GPBCON.
s2440IOP->rGPBCON = (s2440IOP->rGPBCON &~(3 << gpb0 ="="">rGPBDAT=s2440IOP->rGPBDAT&~(0x1<<0);>rGPBDAT=s2440IOP->rGPBDAT|(0x1<<0); pour désactiver (ou l'inverse se n'est pas préciser dans la doc).
On va donc crer un thread qui va alterner l'etat du GPB0.

Bon ce driver il faut bien l'inscrire quelque part cela doit ce faire dans mini2440\Files\platform.reg
On rajout donc
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\BUZdriver]
"Prefix"="BUZ"
"Dll"="Buzzer.dll"

Coté applicatif il faut ouvrir le driver :
driverFileHandle = CreateFile(L"BUZ0:",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
0,
NULL
);
Puis appeler les IO contols définis dans le driver :
DeviceIoControl(driverFileHandle,
IO_CTL_BUZ_ON,
NULL,
0,
0,
0,
&returned,
NULL
);
Les drivers sont identifié par 3 lettres ici BUZ, pour savoir quel est le numéro correspondant à l'instance, on va dans la base de registre :
[HKEY_LOCAL_MACHINE\Drivers\Active]
Par exemple pour le driver de LED, on trouve la clef 27 avec Name = LED1:

source du driver : ici
source de l'application de test : ici

Aucun commentaire:

Enregistrer un commentaire