// Attention : Le fonctionnement du programme requiert la DLL nommée : mcHID.dll. // N'oubliez pas d'inclure dans le même répertoire de votre programme cette fameuse DLL !!! unit FormMain; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; const // input and out buffer size constants... BufferInSize = 64; BufferOutSize = 64; type // input and output buffers... TBufferIn = array[0..BufferInSize] of byte; TBufferOut = array[0..BufferOutSize] of byte; // main form TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FBufferIn:TBufferIn; // FBufferOut:TBufferOut; function USBEvent(var Msg: TMessage): Boolean; public end; var Form1: TForm1; CODE_IR : Integer; implementation uses cUSBInterface, cUSBInterfaceTypes; const // VENDOR et PRODUCT ID. // Attention, ne pas changer ces 2 constantes sinon l'interface Thermometre / Hygrometre ne sera plus reconnue. VENDOR_ID = 1240; PRODUCT_ID = 0001; {$R *.DFM} { **************************************************************************** * Name : Create * * Purpose : Create the main form * **************************************************************************** } procedure TForm1.FormCreate(Sender: TObject); begin Application.HookMainWindow(USBEvent); Connect(Application.Handle); // ... Votre CODE ... Label1.Caption:='Interface USB non détectée'; // FIn de votre CODE ... end; { **************************************************************************** * Name : Destroy * * Purpose : Free the main form * **************************************************************************** } procedure TForm1.FormDestroy(Sender: TObject); begin Application.UnHookMainWindow(USBEvent); end; { //************************************************************* //* Fonction dédiée à la réception données du PIC vers le PC. * //************************************************************* } function TForm1.USBEvent(var Msg: TMessage): Boolean; var DevHandle:cardinal; // TextBuffer:array[0..255] of char; begin result := False; if Msg.Msg = WM_HID_EVENT then begin case Msg.WParam of // a HID device has been plugged in... NOTIFY_PLUGGED : begin // L'interface IR USB a été connectée au PC... DevHandle := Msg.LParam; // handle of HID device in this message if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then begin //... Votre CODE ... Label1.Caption:='Félicitations, interface USB détectée !!!'; //... Fin de votre CODE... end; result := true; end; // L'interface IR USB a été déconnectée du PC... NOTIFY_UNPLUGGED : begin // is it our HID device... DevHandle := Msg.LParam; // handle of HID device in this message if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then begin //... Votre CODE ... Label1.Caption:='Interface USB déconnectée'; Application.Terminate; // Arrêt du programme. //... Fin de votre CODE... end; result := true; end; //** Ne retirez pas 6 lignes suivantes, elles sont indispensables !!! ** NOTIFY_CHANGED : begin DevHandle := GetHandle(VENDOR_ID,PRODUCT_ID); SetReadNotify(DevHandle,true); result := true; end; //********************************************************************** // L'interface IR USB a envoyé des données... NOTIFY_READ : begin DevHandle := Msg.LParam; // handle of HID device in this message if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then begin // lecture des données. Read(DevHandle,@FBufferIn); //... Votre CODE ... label3.Caption:='Code IR MSB='+inttostr(FBufferIn[1]); // Le poids fort de la trame IR envoyée par le PIC. label4.Caption:='Code IR LSB='+inttostr(FBufferIn[2]); // Le poids faible de la trame IR envoyée par le PIC. CODE_IR:=(256*FBufferIn[1])+FBufferIn[2]; // Reconstitution de la valeur du code IR reçue par le PIC18F2550 et envoyé par USB au PC. label2.Caption:='Le Code IR reçu par le PIC est le : '+IntToStr(CODE_IR); // Affichage de la valeur du code IR. //**** FIN **** end; result := true; end; end; end; end; end.