Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Multe programe care funcționează cu un dispozitiv USB. Ei își pierd eficiența în cazul pierderii accidentale a comunicării. De exemplu, în cazul în care o conexiune slabă (conector de contact săraci miniUSB sau microUSB, care este destul de des cazul), sau în cazul în care dispozitivul a fost reconectat accidental la portul USB, este necesar pentru a reporni programul de gazde. Pentru a gestiona în mod corespunzător astfel de situații într-un software necesar pentru a detecta program de evenimente de conectare sau dezactiva dispozitivele USB pentru a fi în măsură să pună în aplicare măsuri adecvate - .. comunicare reînceperea cu dispozitivul setarea parametrilor etc. Există o traducere apnouta FTDI AN_152 [1], doar dedicat acestui subiect important.







Acest articol vă arată cum să detecteze programatică conectarea dispozitivelor USB în portul gazdă și închidere, atunci când software-ul gazdă rulează sub Windows. Un exemplu de o gazdă numit D2XXNotify, și poate fi descărcat gratuit de pe site-ul FTDI, a se vedea exemple în programe C ++. [2] Anexa privind sistemul gazdă ascultă mesajul WM_DEVICECHANGE, care este activat, aplicația este procesat și trimis într-o fereastră atunci când utilizatorul că ceva se conectează la calculator pornit sau oprit, de exemplu, introduce într-un port USB pentru un dispozitiv (cum ar fi un dispozitiv USB la cip FTDI). Orice software descris în acest document este dat numai cu titlu informativ și nu este susținută de FTDI.

[Cum se detectează evenimentele de instalare și de ștergere ale unui dispozitiv USB]

Sistemul de operare Windows trimite o notificare de difuzare (transmite notificări de bază de mesaje) pentru orice aplicație, de a crea o fereastra de nivel superior (chiar acum suntem interesați prin intermediul aplicației gazdă USB care gestionează dispozitivele USB de pe cipuri FTDI, deși poate fi orice aplicație care funcționează cu echipamentul), acest lucru Aplicația trebuie să proceseze mesajul WM_DEVICECHANGE. În conformitate cu cererile de ferestre de nivel superior (fereastră de nivel superior) se referă la o fereastră care poate fi procesat de către managerul standard de ferestre pentru Windows: de exemplu, fereastra poate fi independent de alte ferestre pentru a muta un utilizator de pe desktop, iar utilizatorul poate redimensiona fereastra.

Mesajul WM_DEVICECHANGE notifică de evenimente de aplicație se modifică configurația hardware între dispozitivele care sunt conectate și instalate pe computer. În cazul în care cererea nu are o fereastră de nivel superior, sau în cazul în care este nevoie de notificarea modificărilor printre alte dispozitive, aplicația poate utiliza interfața de programare a aplicațiilor Win32 (API, sistem de aplicație de interfață de programare) funcția RegisterDeviceNotification. care înregistrează o aplicație din sistem pentru a primi evenimente de notificare a dispozitivului. Pentru această funcție va fi prevăzută cu un mâner (mâner), ceea ce indică structura DEV_BROADCAST_DEVICEINTERFACE (conține toate informațiile cu privire la clasa dispozitivului), și un steag, care poate fi DEVICE_NOTIFY_WINDOW_HANDLE (în cazul în care fereastra aplicației) sau DEVICE_NOTIFY_SERVICE_HANDLE (în cazul în care acesta este un serviciu de sistem). Win32 funcția API funcție UnRegisterDeviceNotification închide mânerul obiect specificat că a fost returnat de funcția RegisterDeviceNotification. Pentru detalii, consultați site-ul Microsoft [3].

Următorul exemplu de cod C arată modul în care funcția RegisterDeviceNotification înregistrează o aplicație pe sistem astfel încât să primească notificări despre dispozitive.

Funcția în parametrii ia o GetSafeHwnd mâner (), pavilion DEVICE_NOTIFY_WINDOW_HANDLE și pointer la o structură de date DEV_BROADCAST_DEVICEINTERFACE. pavilion DEVICE_NOTIFY_WINDOW_HANDLE indică faptul că apelantul aparține fereastra aplicației, și structura de date DEV_BROADCAST_DEVICEINTERFACE specifică dimensiunea acestui tip de structură numele dispozitivului DBT_DEVTYP_DEVICEINTERFACE și identificatorul dispozitivului unic al interfeței dispozitivului (dispozitiv identificatorul unic global, GUID). Listă (matrice) GuidInterfaceList va fi decriptate în secțiunea următoare.

Notă: valorile structurii de date DEV_BROADCAST_DEVICEINTERFACE trebuie editate în conformitate cu cerințele aplicației. Pentru a utiliza codul de mai sus, asigurați-vă că antetul Dbt.h este conectat la aplicație. Pentru mai multe informații, consultați site-ul Microsoft [3].

[Device Global Identifier Unic (GUID)]

Interfața dispozitivului GUID specifică o anumită interfață de intrare / ieșire. Se presupune că fiecare instanță a interfeței dispozitiv GUID acceptă același set de bază de intrări / ieșiri. Interfața dispozitivului GUID este ceea ce conducătorul auto se va înregistra și va permite sau nega pe baza stării PnP. În secțiunea anterioară, codul eșantionului arată cum în buclă for, se înregistrează mai multe notificări pentru fiecare GUID.

Următorul cod dă o listă cu GUID-uri pentru clasele interfeței dispozitivului.

[Prelucrarea mesajului WM_DEVICECHANGE în C ++]

Orice modificare a stării dispozitivului (de exemplu, un dispozitiv a fost conectat sau a fost eliminat), acest eveniment va fi detectat și un mesaj de cerere este trimis WM_DEVICECHANGE, iar structura mesajului va da o valoare a unui eveniment trecut mesaje parametru wParam. Câmpul wParam poate obține diferite valori din fișierul antet Dbt.h. De exemplu, DBT_DEVICEARRIVAL și DBT_DEVICEREMOVALCOMPLETE prezintă respectiv dispozitivele de conectare și de extracție. Pentru detalii, consultați site-ul Microsoft [4].







Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Fig. 2.1. Algoritm pentru procesarea mesajului WM_DeviceChange.

Codul de probă de mai jos arată modul în care mesajul WM_DEVICECHANGE poate fi procesat în aplicație atunci când acest mesaj este primit de către aplicație.

Programul D2XXNotify oferă utilizatorului o interfață în care este detectată instalarea sau eliminarea dispozitivelor USB de pe computer. Codul sursă pentru această aplicație este disponibil pe site-ul FTDI [2].

[Rularea fișierului executabil]

Gata fișier executabil aplicație D2XXNotify.exe poate fi descărcat de pe site-ul FTDI [2], ca parte a fișierului D2XXNotify.zip (aceasta este, de asemenea, arhiva conține codul sursă). Dezarhivați arhiva utilizând orice arhivator, de exemplu WinZIP sau WinRAR. Faceți dublu clic pe Explorer și porniți aplicația D2XXNotify.exe. Apare următoarea fereastră:

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Fig. 3.1. Rulați aplicația D2XXNotify dintr-un executabil binar.

Când un dispozitiv USB este conectat la portul USB al computerului, la interfața dispozitivului USB va fi trimis un eveniment de alertă și aplicația va primi un mesaj WM_DEVICECHANGE. Aplicația va apela funcția corespunzătoare specificată în harta mesajelor (vedeți secțiunea "Mesajele de mai jos"), iar informațiile de conectare vor apărea în fereastră, după cum se arată în captura de ecran 3.2.

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Fig. 3.2. Aplicația a primit un mesaj DBT_DEVICEARRIVAL (a fost conectat un dispozitiv USB).

În Fig. 3.2 arată că afișajul aplicației posturi D2XXNotify DBT_DEVNODES_CHANGED, DBT_DEVICEARRIVAL VID și PID și dispozitivul, când a fost adăugat la sistem (sistem de operare trimite evenimente DBT_DEVNODES_CHANGED și dispozitiv DBT_DEVICEARRIVAL).

Când dispozitivul USB este eliminat de pe computer, va fi trimisă o notificare de eveniment a evenimentului interfeței dispozitivului USB, iar aplicația va primi un mesaj WM_DEVICECHANGE. Textul va apărea pe ecran, așa cum se arată în exemplul din captura de ecran 3.3.

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Fig. 3.3. Aplicația a primit un mesaj DBT_DEVICECOMPLETE (dispozitivul USB a fost dezactivat).

În Fig. 3.3 arată că aplicația afișează mesajul D2XXNotify DBT_DEVNODES_CHANGED, DBT_DEVICEREMOVECOMPLETE VID și PID și dispozitiv, când a fost eliminat din sistem (sistem de operare trimite evenimente DBT_DEVNODES_CHANGED și dispozitiv DBT_ DEVICEREMOVECOMPLETE).

De asemenea, puteți porni aplicația din mediul de dezvoltare Microsoft Visual Studio. Pentru a face acest lucru, începe Visual Studio, d2xxnotify.sln deschis din fișierul arhivă neambalat, efectua operații standard asupra proiectului de curățare (Clean Solution) și ansamblul (Rebuild Solution). Apoi, puteți rula aplicația (Debug Menu -> Start Debugging sau Start Fără Debugging).

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Hărți de mesaje este o modalitate de a procesa mesajele aplicațiilor definite în biblioteca de clasă Microsoft Foundation Class (MFC). Acesta este un tabel în care este afișată relația dintre evenimente și funcțiile conexe. Când o fereastră primește un mesaj, MFC scanează harta mesajului ferestrei pentru a determina dacă există un handler pentru acest eveniment care trebuie apelat. Următorul exemplu de cod din C ++ arată modul în care harta de mesaje poate fi utilizată într-o aplicație.

[Prelucrarea mesajului WM_DEVICECHANGE în C #]

Un exemplu de detectare a conexiunii / deconectării dispozitivului se bazează pe o suprascriere în aplicarea procedurii WndProc. Parametrul Mesaj este trimis procedurii, câmpul Msg al căruia este procesat pentru apariția mesajului WM_DEVICECHANGE. Dacă un astfel de mesaj este primit, câmpul wParam este decodificat pentru a înțelege ce tip aparține mesajul. Pentru tipul de mesaj DBT_DEVICEARRIVAL, este efectuată o decodificare suplimentară, pentru care câmpul LParam al mesajului este atașat la structura de informații corespunzătoare.

Evenimentele Ftdi care conectează și deconectează dispozitivul USB, PC, programare

Rețineți că aceste exemple de cod nu au utilizat deloc biblioteca D2XX a FTDI - evenimentele de conectare și de deconectare sunt gestionate de sistemul de mesaje Windows API.

Codul sursă și fișierele executabile exe ale programelor de testare pot fi descărcate de pe linkul [6].

1. Cum se detectează conexiunea și scoaterea dispozitivelor USB pe un site de sistem: ftdichip.com.
2. Site-uri Visual C ++ Exemple: ftdichip.com.
3. Site-ul funcției RegisterDeviceNotification: msdn.microsoft.com.
4. Site-ul mesajului WM_DEVICECHANGE: msdn.microsoft.com.
5. Wrap-class pentru AVR-USB-MEGA16 cu suport pentru evenimente.
6. 150612D2XXNotify.zip - cod sursă pentru proiectele C ++ și C # pentru Visual Studio.







Trimiteți-le prietenilor: