FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Sok futó programok egy USB-eszközt. elveszti hatékonyságát baleset esetén a kommunikáció elvesztését. Például, ha rossz kapcsolat (rossz kapcsolat csatlakozó miniUSB vagy a microUSB, ami elég gyakran előfordul), vagy ha az eszközt véletlenül újracsatlakoztattam az USB portra, akkor újra kell indítani a programot házigazdák. Ahhoz, hogy megfelelően kezelni az ilyen helyzeteket szükséges program szoftver érzékeli kapcsolat események vagy letiltja az USB eszközöket, hogy képes legyen végrehajtani a megfelelő lépéseket - .. alapállapotba állítás az eszközzel történő kommunikáció beállítási paraméterek, stb Van egy fordítást apnouta FTDI AN_152 [1], csak szentelt a fontos témával.

Ez a cikk megmutatja, hogyan kell programozottan érzékeli a kapcsolatot az USB-eszközök a host port és lekapcsolást, ha a fogadó szoftver fut Windows alatt. Egy példa a host nevű D2XXNotify, és szabadon letölthető az FTDI honlapján, lásd a példákat a C ++ programokat. [2] Melléklet a gazda rendszerben figyel WM_DEVICECHANGE üzenetet, amely akkor aktiválódik, az alkalmazás feldolgozzák és egy ablak, ha a felhasználót, hogy valami csatlakozik a számítógéphez vagy ki, például beépül egy USB-port a készülék (például USB-eszközt az FTDI chip). Bármilyen leírt szoftver dokumentum csak tájékoztató jellegű, és nem támogatja a FTDI.

[Hogyan események észlelésére és telepítése USB kiadás]

A Windows operációs rendszer küld egy broadcast bejelentés (sugározza alap értesítések küldése) bármely alkalmazás, hozzon létre egy felső szintű ablak (most mi érdekli az USB host alkalmazás, amely kezeli USB eszköz chipek FTDI, bár lehet bármilyen alkalmazás, amely működik a berendezés), ez a kérelemnek tartalmaznia kell az üzenet feldolgozására WM_DEVICECHANGE. A legfelső szintű ablak alkalmazások (felső szintű ablak) kifejezés egy ablak, hogy lehet feldolgozni szabványos Windows ablakkezelő: pl ablak független lehet a többi ablak mozog a felhasználó az asztalon, és a felhasználó át tudja méretezni az ablakot.

WM_DEVICECHANGE üzenet értesíti az alkalmazási esemény hardver konfigurációs változások között csatlakoztatott eszközök és a számítógépre telepített. Ha az alkalmazás nem rendelkezik egy felső szintű ablak, vagy ha igényli bekövetkező változások bejelentése az eszközökre, az használhatja a Win32 Application Programming Interface (API, a rendszer Application Programming Interface) RegisterDeviceNotification funkciót. amely regisztrálja az alkalmazást a rendszer kap értesítést kapcsolatos események az eszköz (készülék értesítési események). Ehhez a funkcióhoz lesz fogantyúval ellátott (fogantyú), amely jelzi az DEV_BROADCAST_DEVICEINTERFACE szerkezet (ez tartalmazza az összes információt a készülék osztály), és egy zászló, amely lehet DEVICE_NOTIFY_WINDOW_HANDLE (ha az alkalmazás ablak) vagy DEVICE_NOTIFY_SERVICE_HANDLE (ha ez egy olyan rendszer szolgáltatás). Win32 API függvény UnRegisterDeviceNotification függvény bezárja a megadott objektum fogantyút visszaadott függvény által RegisterDeviceNotification. A részleteket lásd. A Microsoft honlapján. [3]

A következő minta C kód azt mutatja, hogyan RegisterDeviceNotification függvény regisztrálja kérelmet a rendszerben, hogy bejelentést kapott a készülék.

Funkciót a paramétereket vesz egy fogantyú GetSafeHwnd (), DEVICE_NOTIFY_WINDOW_HANDLE zászló és mutatót adatstruktúrát DEV_BROADCAST_DEVICEINTERFACE. DEVICE_NOTIFY_WINDOW_HANDLE zászló azt jelzi, hogy a hívó fél tartozik az alkalmazás ablakot, és DEV_BROADCAST_DEVICEINTERFACE adatstruktúra meghatározza a mérete szerkezet típusa DBT_DEVTYP_DEVICEINTERFACE eszköz neve és egyedi készülék azonosítót a készülék interfész (eszköz globálisan egyedi azonosító, GUID). List (array) GuidInterfaceList dekódolja a következő részben.

Megjegyzés: Az érték az adatszerkezetet DEV_BROADCAST_DEVICEINTERFACE kell szerkeszteni összhangban követelményeket az alkalmazás. Ahhoz, hogy a fenti kódot, győződjön meg arról, Dbt.h fejléc csatlakozik a kérelmet. További információkért lásd. A Microsoft honlapján. [3]

[Eszköz globálisan egyedi azonosító (GUID)]

Azonosító eszköz interfész GUID jelzi saját input / output interfész (adott input / output interface). Ez azt jelenti, hogy minden egyes példánya eszköz interfész GUID megtartja ugyanazt az alapvető halmaza bemenet / kimenet. Az azonosító eszköz interfész GUID - az, hogy a vezető regisztráljon, és lehetővé teszi, hogy vagy megtagadja alapján PnP állapotban. Az előző részben egy példa kód azt mutatja, hogyan ciklus többszörös figyelmeztető jelzések regisztrálható GUID.

A következő kód egy listát GUID eszköz interfész osztály.

[Üzenetfeldolgozás WM_DEVICECHANGE a C ++]

Bármilyen változás a készülék állapotát (például egy eszköz csatlakozik, vagy már eltávolították), ez az esemény lesz ismerve, és egy alkalmazás üzenetet küld WM_DEVICECHANGE, és az üzenet szerkezete ad értéket egy múltbeli esemény paraméter wParam üzeneteket. wParam mező elérése sok Dbt.h. fejlécfájlba Például, DBT_DEVICEARRIVAL és DBT_DEVICEREMOVALCOMPLETE mutatják rendre a kapcsolatot, és elszívó berendezésekkel. A részleteket lásd. A Microsoft weboldalán [4].

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Ábra. 2.1. feldolgozó algoritmus WM_DeviceChange üzenetét.

Az alábbi példakód mutatja, hogy a kérelmet lehet feldolgozni WM_DEVICECHANGE üzenetet, amikor egy üzenetet megkapta a kérelmet.

D2XXNotify program biztosítja a felhasználói felület, amely érzékeli behelyezésekor vagy eltávolításakor az USB-eszközt a számítógépen. A forráskód ezen alkalmazás elérhető az FTDI honlapján. [2]

[Run a futtatható fájl]

Ready D2XXNotify.exe futtatható alkalmazás fájl letölthető a FTDI honlapján [2] részeként D2XXNotify.zip fájlt (ez az archívum tartalmaz a forráskód). Az archívum kibontása bármilyen archiváló például a WinZip vagy WinRAR. Duplán kattintva a Windows Intézőben, fuss D2XXNotify.exe alkalmazás. A következő ablak jelenik meg:

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Ábra. 3.1. Futó D2XXNotify alkalmazása a bináris futtatható fájlt.

Ha egy USB-eszköz van csatlakoztatva a számítógép USB portjára, akkor küldünk egy esemény bejelentése interfész USB eszközök, és az alkalmazás egy üzenetet kap WM_DEVICECHANGE. Az alkalmazás meghívja a megfelelő funkciót, mint azt a térképen üzenetet (lásd. Szakasz a cikk alatt a „Message Map”), és az információ jelenik meg az ablakban a kapcsolat, amint az a screenshot 3.2.

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Ábra. 3.2. Az alkalmazás olyan üzenetet kapott DBT_DEVICEARRIVAL (USB eszköz csatlakoztatva).

Ábra. 3.2 azt mutatja, hogy az alkalmazás megjelenítési D2XXNotify DBT_DEVNODES_CHANGED üzenetét, DBT_DEVICEARRIVAL VID és PID és az eszköz, ha adunk a rendszer (operációs rendszer által küldött események DBT_DEVNODES_CHANGED és DBT_DEVICEARRIVAL eszköz).

Ha egy USB-eszköz van távolítva a számítógépről, riasztást fog küldeni az esetben, ha az USB eszköz interfész, és az alkalmazás egy üzenetet kap WM_DEVICECHANGE. A szöveg jelenik meg a képernyőn, ahogy a példában a screenshot 3.3.

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Ábra. 3.3. Az alkalmazás olyan üzenetet kapott DBT_DEVICECOMPLETE (USB-eszközt csatlakoztatva).

Ábra. 3.3 azt mutatja, hogy a kérelem üzenetet jeleníti meg D2XXNotify DBT_DEVNODES_CHANGED, DBT_DEVICEREMOVECOMPLETE VID és PID és az eszköz, amikor eltávolítjuk a rendszerből (operációs rendszer küld események DBT_DEVNODES_CHANGED és DBT_ DEVICEREMOVECOMPLETE eszköz).

Az alkalmazás is futtatható a környezet Microsoft Visual Studio fejlődését. Ehhez indítsa el a Visual Studio, nyitott d2xxnotify.sln a csomagolatlan archív fájlt, hajtsa végre alapvető műveleteket a projekt tisztítása (Clean Solution) és összeszerelési (Rebuild Solution). Akkor az alkalmazás futtatásához (Debug menü -> Indítás hibakeresés vagy a Start Without Debugging).

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Üzenet Térkép - egy eljárás a kérelem feldolgozásának üzenet meghatározott Microsoft Foundation Class Library Classes (MFC). Ez a táblázat, amely megjeleníti a kapcsolat a két esemény között, és a megfelelő funkciókat. Ha az ablak egy üzenetet kap, MFC átvizsgálja az üzenetet térkép az ablak feladata -, hogy van egy felvezető (kezelő) erre az eseményre, a hívni kívánt. A következő minta a C ++ mutatja, hogy az üzenet térképet lehet használni az alkalmazást.

[Üzenetfeldolgozás WM_DEVICECHANGE a C #]

Egy példa a kimutatására a kapcsolat / megszakító eszközt alapul felülírás WndProc az az alkalmazási eljárás. Az eljárás továbbított üzenet paraméter mező üz amelyet feldolgozott megjelenése WM_DEVICECHANGE üzenetét. Ha ezt az üzenetet kapja, a wParam mező dekódolt megérteni, hogy milyen típusú üzenet tartozik. Mert az üzenet típusát DBT_DEVICEARRIVAL tette a további dekódolást, amely lParam üzenet mezőben van kötve a lényeges információk szerkezetét.

FTDI események csatlakoztassa le és az USB-eszközt, pc, programozás

Vegyük észre, hogy ezek a példák, a kód nem használható a könyvtár D2XX cég FTDI - feldolgozó eszközöket csatlakoztassa le és események alapján a Windows API üzenetküldő rendszer.

A forráskód és a futtatható exe-fájl vizsgálati programokat lehet letölteni itt [6].

1. Hogyan érzékeli a kapcsolat és eltávolítását USB eszköz A rendszer site: ftdichip.com.
2. Visual C ++ Példák site: ftdichip.com.
3. RegisterDeviceNotification funkció site: msdn.microsoft.com.
4. WM_DEVICECHANGE üzenet site: msdn.microsoft.com.
5. osztály wrapper az AVR-USB-MEGA16 rendezvények támogatása.
6. 150612D2XXNotify.zip - C ++ forráskód projektek és a C # Visual Studio.