USB port programozás. A legegyszerűbb USB-eszközök programozása a Delphiben. Megszervezzük az automatikus eszközcsatlakozást

  • Dátum: 14.05.2021


1. ábra Illusztráció Android munka eszközök USB Host és Accessory módban (kép a http://developer.android.com webhelyről)

Vegye figyelembe, hogy az USB használata nem az egyetlen módja annak, hogy kommunikáljon ugyanazzal a barkácseszközzel. Az Android lehetővé teszi több, NFC, Wi-Fi P2P, SIP és szabványos hálózati kapcsolat használatát. A fejlesztőnek tehát elegendő lehetősége van a fegyvertárában legmerészebb ötletei megvalósítására.

A különféle eszközökkel való kommunikáció másik gyakori lehetősége továbbra is az USB-COM adapter használata. A neten van anyag az USB-COM adapter Androidban való használatáról - lásd például. Az ilyen kapcsolat népszerűsége annak köszönhető, hogy nagyszámú, különféle mikrokontrollerekkel már kifejlesztett eszköz jelenléte van, amelyekkel a kommunikáció COM porton (soros port) keresztül történik, amely 10 évvel ezelőtt az adatátvitel szinte szabványos módja volt. a számítógéptől a házilag készített hardverig.

A COM porthoz képest az USB használata jelentősen megnövelheti az adatátvitel sebességét, és felhasználóbarátabbá teheti ezt a folyamatot. Az átviteli sebesség, ami kis sebességű eszközök (billentyűzet, egér, joystick) esetén is 10-1500 Kbps, a kábelrendszer és csatlakozások egyszerűsége és alacsony költsége, az eszközök önazonosítása automatikus konfigurációval, elrejtve a az elektromos csatlakozás részletei a végfelhasználótól (plusz a kábel leválasztásának lehetősége a készülékek kikapcsolása nélkül), hibaelhárítás és azok helyreállítása protokoll szinten – ezek vitathatatlan előnyei ennek a technológiának (lásd: 12. oldal).

Általánosságban, ha az USB adatátvitelre való használatáról beszélünk, hasznos lenne megemlíteni P. Agurov „USB interfész” című könyvét. Bár gyakran kritizálják az interneten, és utoljára 2006-ban adták ki, ismételten segített megtalálni a megfelelő megoldást a technológia alkalmazásának különféle vonatkozásaira vonatkozó információk keresése során. A könyv a következő kérdéseket tárgyalja: a vezérlő mikroáramkörének és áramkörének kiválasztásától a mikrokontroller program megírásáig és példák a számítógépről USB-n keresztüli adatátvitel programozására. Lehetetlen nem feltüntetni az adatok "elsődleges forrását" ebben a kérdésben - az USB IF (USB Implementers Forum) non-profit szervezet webhelyét, amely ezen interfész specifikációit fejleszti -, bár ez az anyag rajta van angol nyelv... Itt azonban átfogó információkat talál az USB interfész eszközről. Van egy jó fordítás részei a specifikáció -. A szoftveres megoldások iránt érdeklődők mikrokontroller oldalról is láthatják a linket.

Ez a cikk elsősorban azoknak szól, akik rendelkeznek olyan (önállóan vagy más által kifejlesztett) elektronikus eszközzel, amelynek adatcsere protokollja jól ismert (például Windows/Linux alatt már létezik program, amely ezzel az eszközzel működik), ill. szeretné, ha lenne egy program, amely működne vele Androidon.

Egy kicsit az USB-eszközök osztályairól

Megjegyzendő, hogy egy adott eszközzel való adatcserére szolgáló szoftver fejlesztése erősen függ annak mikrokontroller szintű megvalósításától. Nyilvánvaló okokból lehetetlen egy cikk keretein belül példákat adni az összes típusú USB-eszköz kommunikációs programjaira (a különféle típusú eszközök programozására vonatkozó kezdeti információkat lásd). Mindazonáltal korlátozzuk magunkat annak a kódnak a bemutatására, amely megvalósítja az eszköz keresését és a vezérlőpontjaihoz való hozzáférést információcsere céljából. Az adatok küldését is elemezzük az USB-eszközök egyik típusának példáján, nevezetesen a HID eszközosztályon (humán interfész eszköz - egy személlyel való interakciós eszközök osztálya). Ez az osztály magában foglalja a "lassú" eszközöket, például a billentyűzetet, az egeret, a joystick-ot, és elég példa van a megvalósítására a hálózat különféle mikrovezérlőivel (vannak például in).

Miért szereti a HID osztály annyira a különféle házi készítésű eszközök gyártóit? A Wikipédiát idézve: „A klasszikus beviteli eszközök (például billentyűzetek és egerek) részletes specifikációi mellett a HID szabvány az eszközök speciális osztályát határozza meg részletes specifikációk nélkül. Ezt az osztályt USB HID Consumer Control-nak hívják, és lényegében egy ad hoc kommunikációs csatorna egy eszközzel. Ebben az esetben az eszköz ugyanazokat az illesztőprogramokat használja, amelyek az operációs rendszerhez szabványosak, mint egy billentyűzetes egér. Így létrehozhat olyan USB-eszközt, amelyhez nincs szükség speciális illesztőprogramok létrehozására és telepítésére a legtöbb számítógépes operációs rendszerben." Csak annyit kell még hozzátenni, hogy ez a specifikáció Android operációs rendszerben működik (nem zárja ki a CyanogenMod firmware-t).

A HID eszközzel való adatcsere egyik lehetősége a megszakításos átvitel, amelyet akkor használnak, ha kis adatcsomagokat kell továbbítani (a maximális csomagméret az átviteli sebességtől függ, és 64 és 1024 bájt között van) adott időintervallumon keresztül. . Az átvitelre szánt csomagot jelentésnek nevezik (angolul - report, lásd 71., 95. o.). Egy ilyen riporthossz általában bőven elég egy házi készítésű eszközzel való információcseréhez, egy csomagban például 64 bájtnyi információ elég sok egy vezérlőnek, mert 1 bitnyi információ elég ahhoz, hogy átadja a készülék állapotát. LED vagy egyszerű érzékelő.

Szükséges eszközök

Tehát szükségünk van egy táblagépre vagy telefonra Android 3.1 vagy újabb verzióval. Itt meg kell jegyezni, hogy a fenti USB Host API nincs maradéktalanul implementálva minden mobileszközön (erről a developer.android.com oldalon is szó van, lásd a linket). Egyes táblagépek/telefonok csak a töltéshez és a személyi számítógéppel való kommunikációhoz használják az USB-csatlakozót. Még egyszer elküldöm az olvasót a kísérleteinkhez alkalmas vagy alkalmatlan mobileszközök listájára (ld.).

Szükség lesz még valamilyen USB-eszközre (az első kísérletekhez elég egy hagyományos USB flash meghajtó), OTG adapterre (On-The-Go - lásd 2. ábra) és/vagy USB-kábelre a kommunikációhoz eszköz. A Wikipédia ezt írja az OTG-ről: „USB OTG-n keresztül történő csatlakoztatáskor az eszköz rangját (mester vagy slave) az határozza meg, hogy van-e áthidaló a csatlakozókábel dugójában lévő 4. és 5. érintkezők között. Az USB OTG-kábelben egy ilyen jumper csak a két csatlakozó egyikébe van telepítve (lásd). Ennek megfelelően szükségünk van egy ilyen jumperre a mobil eszköz oldalán.


2. ábra: Különbségek a hagyományos USB-kábel és az OTG-kábel sémájában (kép a http://tech.firstpost.com webhelyről)

Ön is forraszthat ilyen OTG kábelt a készülékéhez. Ehhez vásárolnia kell egy megfelelő csatlakozót egy rádióüzletben, és a szerző például egy régi kábelt használt egy hordozható merevlemezről:

A munkában jó segítség lesz a tárolóról telepített USB Device Info program is A Google Play Piac. A program képes észlelni a táblagép / telefon USB-csatlakozójához csatlakoztatott eszközöket Java API és Linux kernel segítségével. Vagyis, ha az eszközödet nem a Java USB Host API segítségével észlelték az USB Device Info-ban, akkor nagy valószínűséggel hiába használsz bármilyen (a saját) Java-val írt Android programot ehhez a mobileszközhöz. és USB Host API.

Néha az operációs rendszer lsusb parancsa által megjelenített információk is nagyon hasznosak. Linux rendszerek... A -v és -d kapcsolókkal az lsusb mindent vagy majdnem mindent megjelenít egy USB-eszközről, amire a szoftverfejlesztőknek szüksége van az ilyen osztályú eszközökhöz (lásd 3. ábra).


3. ábra Példa az lsusb és lsusb -v -d parancsok kimenetére

Ezután egy számítógépre van szüksége telepített Android SDK és egy Eclipse Integrated Development Environment (IDE) az ADT beépülő modullal (bár megúszhatja csak az SDK-t). Az Android-alkalmazások létrehozásának és telepítésének módja például az interneten vagy az interneten található.

És persze legalább annyira kell, mint az eredmény elérésének vágya, anélkül, hogy bármilyen módon! Megjegyzem, a szerzőnek hetekig tartó fáradságos információkeresésbe telt, hogy tisztázzon néhány technikai problémát az USB Android rendszerben való használatával kapcsolatban.

Java osztályok USB-ről Android API-ra

Tehát, ahogy az USB Host API for Android fejlesztői webhelyen mondják (lásd) - "Mielőtt elkezdi, fontos megértenie, milyen osztályokat fog használni a munkájában." Az 1. táblázat az USB Host API-val való munkavégzéshez szükséges legfontosabb osztályok leírását tartalmazza (a http://developer.android.com webhely információinak lefordítására tett kísérlet).

1. táblázat Az USB-vel való munkavégzés osztályainak leírása Androidban

Osztály név Leírás
UsbManager Lehetővé teszi a felsorolást és a csatlakoztatott USB-eszközökkel való kommunikációt.
Lehetővé teszi a csatlakoztatott USB-eszköz észlelését és adatcserét vele.
USB eszköz Egy csatlakoztatott USB-eszközt jelöl, és módszereket tartalmaz az azonosító információk, interfészek és végpontok elérésére.
Egy csatlakoztatott USB-eszközt jelöl, és módszereket tartalmaz a hitelesítési adatok, interfészek és végpontok elérésére.
Usb-interfész Az USB-eszköz interfészét jelöli, amely meghatározza az eszköz funkcióit. Egy eszköz egy vagy több interfésszel rendelkezhet, amelyen kommunikál.
Az USB-eszköz „interfészét” jelöli, amely meghatározza az eszköz működését. Egy eszköz egy vagy több interfésszel rendelkezhet az információcseréhez.
UsbEndpoint Egy interfész végpontot jelöl, amely egy kommunikációs csatorna ennek az interfésznek. Egy interfésznek egy vagy több végpontja lehet, és általában bemeneti és kimeneti végpontjai vannak az eszközzel való kétirányú kommunikációhoz.
Egy interfész „végpontját” jelöli, amely az adott interfész kommunikációs csatornája. Egy interfésznek egy vagy több végpontja lehet, és általában vannak végpontjai az információ fogadására és továbbítására.
UsbDeviceConnection Kapcsolatot jelöl az eszközzel, amely adatokat továbbít a végpontokon. Ez az osztály lehetővé teszi az adatok oda-vissza küldését szinkron vagy aszinkron módon.
„Kapcsolatot” jelent ehhez az eszközhöz. Az adatok végpontra való átviteléhez szükséges. Ez az osztály lehetővé teszi az adatok szinkron vagy aszinkron fogadását vagy továbbítását.
UsbRequest Egy aszinkron kérést jelent az eszközzel való kommunikációhoz egy UsbDeviceConnection-en keresztül.
Egy aszinkron kérést jelent az eszközzel való kommunikációhoz egy UsbDeviceConnection-en keresztül.
UsbConstants USB-konstansokat határoz meg, amelyek megfelelnek a Linux kernel linux / usb / ch9.h fájljában található definícióknak.
Konstansokat határoz meg, amelyek megfelelnek a Linux kernel linux / usb / ch9.h definícióinak.

Az USB Host API használatának szinte minden esetben a programozó ezeket az osztályokat használja munkájában. Alkalmazásuk algoritmusa így néz ki: eszközöket határozunk meg (a cél az UsbDevice osztályhoz való programozott hozzáférés), amelyek a gazdagéphez ( mobil eszköz) az UsbManager használatával. Amikor programozott hozzáférést kap az eszközhöz, meg kell határozni a megfelelő UsbInterface-t és UsbEndpointot a vele való kommunikációhoz. Ha a végpont a rendelkezésére áll, nyisson meg egy UsbDeviceConnection-t az USB-eszközzel való kommunikációhoz. Ha a végpont aszinkron átviteli módban van, használja az UsbRequest osztályt.

Próbáljuk meg kitalálni az egészet egy egyszerű alkalmazás létrehozásával, amely az API segítségével meghatározza, hogy az operációs rendszerrel csatlakozik a gazdagéphez Android készülékés bizonyos információkat jelenít meg a telefon vagy táblagép képernyőjén.

Projektet készítünk

Az Eclipse-ben egy projekt a Fájl-> Új-> Android-alkalmazásprojekt menüpontok segítségével jön létre. Vegye figyelembe azt is, hogy az alábbi kódot az Android SDK-val szállított példaalkalmazásokból kölcsönöztük (az android sdk minták / android-N (API Level) / USB mappa), itt a Missile Launcher USB játékvezérlő programról van szó (lásd az ábrát). 4 ) A mintaalkalmazások az Android SDK Manageren keresztül töltődnek be (ellenőrizze a Samples for SDK elemet). Az alábbi listákban a kódpéldákat olyan megjegyzésekkel látjuk el, amelyek elmagyarázzák, mi történik.


4. ábra Vicces játék "Rakétavető"

Projekt létrehozásakor ne felejtse el megjelölni a szükséges API szintet a Minimum Requared SDK opcióban (API Level 12, megfelelő Android verzió 3.1 / Honeycomb / vagy magasabb). A projektnek egy nagyon egyszerű felhasználói felülete lesz - a főablak (Activity) és egy TextView az információk megjelenítéséhez. Egy hasonló projektet részletesen tárgyalunk.

A projektünk tevékenységéhez automatikusan generált osztályban meg kell határoznia a következő osztálypéldányokat az USB-vel való munkához:

privát TextView lgView;
privát UsbManager mUsbManager;
privát UsbDevice mDevice;
privát UsbDeviceConnection mConnection;
privát UsbEndpoint mEndpointIntr;

LgView = (TextView) findViewById (R.id .logTextView);

és hozzáférést kap az UsbManager osztályhoz

MUsbManager = (UsbManager) getSystemService (Context .USB_SERVICE);

Hozzon létre egy másik kezelőt az onResume () eseményhez. A cél annak biztosítása, hogy a csatlakoztatott eszközökkel kapcsolatos információk frissítésre kerüljenek az alkalmazás ablakunk aktiválásakor (lásd az 1. listát).

Felsorolás 1. Az onResume () eseménykezelő

nyilvános érvénytelen az önéletrajzon () (
szuper .onResume ();

// töltse fel a tartályt az eszközök listájával
HashMap< String , UsbDevice>deviceList = mUsbManager.getDeviceList ();
Iterátor< UsbDevice>deviceIterator = deviceList.values ​​() .iterator ();

lgView.setText ("Eszközök száma:" + deviceList.size ());

while (deviceIterator.hasNext ()) (
UsbDevice device = (UsbDevice) deviceIterator.next ();

// példa az eszköz termékazonosítójának meghatározására
\ n "+ "Eszköz termékazonosító:" + device.getProductId ());
}
// a szűrőben leírt szándék meghatározása
// intent AndroidManifest.xml
Intent intent = getIntent ();
lgView.setText (lgView.getText () + " \ n "+ "szándék:" + szándék);
String action = intent.getAction ();

// ha az eszköz csatlakoztatva van, adja át a hivatkozást
// a setDevice () függvényhez
UsbDevice device = (UsbDevice) intent.getParcelableExtra (UsbManager.EXTRA_DEVICE);
if (UsbManager.ACTION_USB_DEVICE_ATTACHED .equals (action)) (
setDevice (eszköz);
lgView.setText (lgView.getText () + " \ n " + "UsbManager.ACTION_USB_DEVICE_ATTACHED.equals (action) IGAZ") ;
) else if (UsbManager.ACTION_USB_DEVICE_DETACHED .equals (action)) (
if (mDevice! = null && mDevice.equals (device)) (
setDevice (null);
lgView.setText (lgView.getText () + " \ n " + "Az UsbManager.ACTION_USB_DEVICE_DETACHED.equals (action) IGAZ") ;
}
}

Ezután a tevékenységhez létrehozzuk a setDevice () funkciót, amely szükséges ahhoz, hogy a készülékünkkel működjön (lásd a 2. listát). Az onResume () kezelőben és a setDevice () függvényben pontosan követtük az előző részben leírt USB Host API használatára vonatkozó algoritmust.

Lista 2. A setDevice () függvény

private void setDevice (USbDevice eszköz) (
lgView.setText (lgView.getText () + " \ n "+ "setDevice" + eszköz);

// az elérhető eszközinterfészek meghatározása
if (device.getInterfaceCount ()! = 1) (

LgView.setText (lgView.getText () + " \ n "+ "nem található interfész");
Visszatérés;
}
UsbInterface intf = device.getInterface (0);

// eszközvégpontok meghatározása
if (intf.getEndpointCount () == 0) (

LgView.setText (lgView.getText () + " \ n "+ "nem található a végpont");
Visszatérés;
) más (
lgView.setText (lgView.getText () + " \ n "+ "Végpontok száma:" + intf.getEndpointCount ());
}

UsbEndpoint epIN = null;
UsbEndpoint epOUT = null;

// végpontokat keres a megszakításokon való továbbításhoz
for (int i = 0; i< intf.getEndpointCount () ; i++ ) {
if (intf.getEndpoint (i) .getType () == UsbConstants.USB_ENDPOINT_XFER_INT) (
if (intf.getEndpoint (i) .getDirection () == UsbConstants.USB_DIR_IN) (
epIN = intf.getEndpoint (i);
lgView.setText (lgView.getText () + " \ n "+ "IN végpont:" + intf.getEndpoint (i));
}
más (
epOUT = intf.getEndpoint (i);
lgView.setText (lgView.getText () + " \ n "+ "OUT végpont:" + intf.getEndpoint (i));
}
) else (lgView.setText (lgView.getText () + " \ n " + "nincs végpont az INTERRUPT_TRANSFER számára") ; }
}

MDevice = eszköz;
mEndpointIntr = epOUT;

// az eszköz megnyitása adatátvitelhez
if (eszköz! = null) (
UsbDeviceConnection kapcsolat = mUsbManager.openDevice (eszköz);
if (kapcsolat! = null && connection.claimInterface (intf, true)) (

LgView.setText (lgView.getText () + " \ n "+ "Open device SUCCESS!" );
mConnection = kapcsolat;

) más (

LgView.setText (lgView.getText () + " \ n "+ "Open device FAIL!" );
mConnection = null;
}
}
}
}

A fenti kódon kívül, amely – mint azt a figyelmes olvasó valószínűleg már sejtette – adatfogadásra és adatátvitelre nyitja meg a készüléket, már csak az adatcsere protokoll használata marad hátra, amit itt is jól ismernie kell a fejlesztőnek. Itt van, ahogy ígértük, az a kód, amely megszakításos átvitelt használó üzenet adatcsomagot küld a HID eszköznek, az UsbRequest osztályt és a megfelelő végpontot – lásd a 3. listát.

Listázás 3. Mintakód adatok eszközre küldéséhez

// határozza meg a küldendő puffer méretét
//alapú maximális méret csomag
int bufferDataLength = mEndpointIntr.getMaxPacketSize ();

lgView.setText (lgView.getText () + " \ n "+ mEndpointIntr.getMaxPacketSize ());

ByteBuffer puffer = ByteBuffer.allocate (bufferDataLength + 1);

UsbRequest kérés = új UsbRequest ();

puffer.put (üzenet);

request.initialize (mConnection, mEndpointIntr);

request.queue (puffer, bufferDataLength);

if (request.equals (mConnection.requestWait ()))

// a küldés sikeres volt
//lgView.setText (lgView.getText () + "\ n" + "küldés CLEAR !!!");

fogás (kivétel kivétel)

//valami nem stimmel...
//lgView.setText (lgView.getText () + "\ n" + "nem egyértelmű a küldés...");

Eszközök szűrése az AndroidManifest.xml fájlban

Bár alkalmazásunknak nem kell egy adott eszközt keresnie ismert VID (Vendor-ID) és PID (Product-ID) azonosítóval, a Google mérnökei nem adnak példákat olyan alkalmazásokra, amelyeknél nincs szándékszűrő szakasz a jegyzékfájlban, és a szerző nem tudta működésre bírni a programot az eszközök szűrése nélkül az AndroidManifest.xml fájlban.

Hadd emlékeztesselek arra, hogy a szállítóazonosító és a termékazonosító egyedi azonosítók az USB-eszközök számára. Vagyis a szűrés segítségével olyan alkalmazást hozhat létre, amely csak egy adott eszközzel vagy bizonyos eszközosztályokkal működik együtt. Vegye figyelembe, hogy az eszközök gyártóinak meg kell állapodniuk ezekben a számokban az USB IF szervezettel.

Például egy olyan alkalmazás, amelynek jegyzékfájlja a 4. listában és a szűrőfeltételfájl az 5. listában található, sikeresen felismeri a mobileszközhöz csatlakoztatott USB flash meghajtókat, de nem ismeri fel a szerző billentyűzetét és egereit. Ez az alkalmazás a forráskóddal együtt letölthető a linkről.

4. lista. Az AndroidManifest.xml fájl


" > http://schemas.android.com/apk/res/android "
> package = "ru.learn2prog.usbhostexample"
android: versionCode = "1"
android: versionName = "1.0">


android: minSdkVersion = "12"
android: targetSdkVersion = "14" />


android: allowBackup = "igaz"
android: icon = "@ drawable / ic_launcher"
android: label = "@ string / app_name"
android: theme = "@ style / AppTheme">

android: név = "ru.learn2prog.usbhostexample.MainActivity"
android: label = "@ string / app_name">
>

"android.intent.category.DEFAULT" />

"android.intent.category.LAUNCHER" />

>

>

>
"android.hardware.usb.action.USB_DEVICE_ATTACHED"
android: resource = "@ xml / device_filter" />
>
>

>

Lista 5. A device_filter.xml szűrőfájl (/res / xml könyvtár)

>

>

Alkalmazásunk felépítésének és telepítésének műveletei nem különböznek a szokásostól (lásd a példákat a,-ben). Szeretném felhívni a figyelmet az intent filter működésére - amikor az eszköz csatlakozik a gazdagéphez, az OS megkéri a felhasználót, hogy indítsa el az alkalmazásunkat.

Irodalom / Linkek: 11.
12.
13.http: //developer.android.com/guide/topics/connectivity/usb/host.html – Az Androidon USB-vel való munkavégzéshez szükséges osztályok áttekintése
14.hivatkozás az alkalmazás forráskódjára

USB programozás

Az eszköz programozása az SF-50 műholdantennák USB-porton keresztüli hangolására az RS-232 porton keresztül történő programozástól csak az eszközről a számítógépre, illetve a számítógépről a készülékre történő adatátvitel módjában tér el. Az USB programozás a hordozható eszközt használja USB kulcs(cserélhető eszköz). Ez akkor kényelmes, ha például a számítógépe vagy gyakrabban egy laptop (netbook) nem rendelkezik soros RS-232 porttal a házán.
Az eszköz USB-meghajtó segítségével történő programozásához a következőkre lesz szüksége:
- FAT-32 fájlrendszerben formázott USB-tárolóeszköz (flash drive);
- AliEditor szerkesztő program, amely az OPENBOX SF-50 szoftverrész Database_editor_new mappájában található.

A programozás megkezdése előtt át kell vinni az adatbázist a készülékről a számítógépre. Ehhez kapcsolja be a készüléket, csatlakoztasson egy USB flash meghajtót az USB porthoz. Futtassa a MENU - Rendszer - Mentés USB-re,

Lépjen ki a menüből a MENU gomb megnyomásával, amíg az aktuális csatorna meg nem jelenik, vagy a főmenü képéig, ha még nincs csatorna, és távolítsa el az USB flash meghajtót. Helyezze be az USB flash meghajtót a számítógépbe.
Futtassa az Editor.exe programot a Database_editor_new mappából, és nyissa meg a benne lévő USB flash meghajtón lévő képet.

Amikor a rendszer kéri, hogy válasszon adatbázist, válassza a Felhasználói adatbázis lehetőséget.

Kattintson az OK gombra. Válassza az Összes szolgáltatás lehetőséget, megnyílik az adatbázisban elérhető összes beolvasott és mentett TV-, rádió- és szolgáltatási csatorna listája.

Szerkessze a csatornákat tetszés szerint, például hagyjon csak nyitott csatornákat.
A számítógép billentyűzetén tartsa lenyomva a Shift gombot, nyomja meg a "lefelé mutató nyilat", és válassza ki a törölni kívánt csatornákat. A kijelölés törléséhez nyomja meg a Delete gombot.

A műhold beállításainak szerkesztéséhez válassza az Összes szolgáltatás – Műholdinformáció – EUTELSAT W4, W7 menüpontot, majd nyomja meg az ENTER gombot.

Szükség esetén szerkessze az Antenna 1 értékeit.
Transponder törléséhez lépjen a szükségtelenre, és nyomja meg a Törlés gombot a számítógép billentyűzetén, és erősítse meg a kiválasztott műveletet.

Transponder hozzáadásához álljon a műhold nevére, nyomja meg a jobb egérgombot, és válassza az Információ hozzáadása lehetőséget (vagy a műhold kiemelésével nyomja meg a billentyűzet Beszúrás gombját).

Írja be az új transzponder adatait, például a lyngsat.com webhelyen.

Kattintson az OK gombra, és ellenőrizze, hogy a transzponder regisztrálva van-e.

Műhold hozzáadásához lépjen a Műhold információ sorra, nyomja meg a Beszúrás gombot a billentyűzeten, és adja meg az új műhold paramétereit.

zárja be a szerkesztő programot, távolítsa el a meghajtót.
Helyezze be a meghajtót az OPENBOX SF-50 eszközbe, kövesse a MENÜ - Rendszer - Frissítés USB-ről sorrendet, válassza ki a "SAT & TP List" módot.

Válassza a Start lehetőséget. Erősítse meg szándékait.

Az eszköz frissíti az alapot, és újraindul. Újraindítás után a beállításokban új módon kell beállítania az orosz menü nyelvét. Állítsa vissza a készüléket a gyári beállításokra.
Lépjen ki a beállítások menüből a MENU gomb kétszeri megnyomásával. Nyomja meg az OK gombot az aktuális csatornán, és győződjön meg arról, hogy a csatornalista szerkesztve van.

Győződjön meg arról is, hogy a transzponderek és műholdak listája is szerkesztve van.
A programozás befejeződött.

De nem elég csak fizikailag csatlakoztatni az eszközt a számítógéphez, meg kell teremteni az adatcserét is. Hogyan válasszunk portot és szervezzünk kapcsolatot? Néhány éve átlagos megoldás COM portot használt. Különböző szakemberek egyébként továbbra is 8, 16, de akár 32 COM portot is telepítenek az ipari számítógépekre (egy egész kategória létezik a különféle PCI bővítőkártyák soros portokhoz, vezérlőkhöz stb.). Így ha több külső eszközt kell csatlakoztatni RS-232 interfésszel, akkor drága adapterekre és egzotikus bővítőkártyákra lehet szükség, amelyek a régi hagyomány szerint hetekig hajókon járnak Oroszországba. Mellesleg, a szokásos "DB9m / DB25f adapter" adapter neve egy számítógépes bolt vezetőjénél csak irritációt okozhat.

Mi az a HID eszköz

Mostanra szinte minden eszköz USB-interfészen keresztül csatlakozik a számítógéphez. Ezért sok új PC egyáltalán nem rendelkezik COM-porttal.

Az USB interfész tipikus megoldás egy új külső eszköz számítógéppel párosítására, pontosabban egy USB 1.1 protokollon alapuló HID interfész.

Bár sokan úgy gondolják, hogy a HID (Human Interface Device) interfész kizárólag a billentyűzet, az egér és a joystick számára készült, számos külső eszköz és számítógép párosításával kapcsolatos megoldásra alkalmas.

Ha a felhasználónak kis sebességű adatcserét kell végrehajtania (legfeljebb 64 kbps), és ugyanakkor kívánatos csökkenteni a saját illesztőprogramjainak unalmas fejlesztésére fordított időt, akkor a HID nagyon megfelelő neki. A kimenet egy egyszerű és meglehetősen modern megoldás lesz, amely szabványos szoftveres USB interfészen alapul, garantált támogatással minden elterjedt szoftverplatformon.

HID eszköz tulajdonságai

A HID-eszköz szoftvertámogatásának megszervezése szempontjából minden meglehetősen vonzónak tűnik: a Windows alatti munkához gyorsan létrehozhat érthető, kompakt kódot kész bevált algoritmusok alapján. Ebben az esetben a fejlesztőnek sok ideje lesz saját legfelső szintű adatcsere protokolljának megvalósítására, hiszen a HID protokoll miatt már meg van szervezve a szükséges absztrakciós szint (lásd táblázat). Ezenkívül a programozó könnyen hibakereshet egy írott csereprotokoll (persze, ha van működő HID eszköz) - magának a protokollnak a viszonylagos merevsége miatt meglehetősen könnyű olyan programot fejleszteni, amely támogatja az eszközt. számítógéppel. Még mindig lenne! A munka nagy részét már át is vette a HID készülék megalkotója.

HID eszköz és számítógép közötti adatcsere szervezése

A HID-eszköz és a számítógép közötti interakció leírására a „gazdagép” kifejezést használjuk. Ebben az esetben az USB protokollt használó interakció általános fizikai architektúrájában lévő vezérlőeszközként értendő. Tehát a számítógép minden portja gazdagép. Különféle USB-eszközöket (flash meghajtók, egerek, webkamerák, kamerák stb.) csatlakoztathat hozzájuk, amelyek nem rendelkeznek gazdagéppel. A gazdagép felderítést, csatlakozást, leválasztást, eszközkonfigurációt, statisztikai gyűjtést és energiagazdálkodást biztosít.

A HID eszköz maga állíthatja be a lekérdezési arányt, amely során kiderül, hogy van-e benne új adat. Ez azt jelenti, hogy a programozó még ilyen alacsony szinten is megbízhat a rendszerben, hiszen a HID eszközvezérlő programban előre meg kell adni a lekérdezési gyakoriságot és az egyéb kommunikációs paramétereket. Ez eltér a HID protokolltól az USB 1.1 vagy USB 2.0 általános leírásától, amelyek nem támasztanak szigorú követelményeket a protokoll szervezésére vonatkozóan. A fokozott biztonságot igénylő konkrét feladatoknál azonban meglehetősen nehéz lehet megszabadulni a ciklikus lekérdezésektől, amikor szinte ugyanazokat az adatblokkokat továbbítják folyamatosan.

A HID eszközök programozásának jellemzői

A HID eszközöknek speciális leírásai vannak. Amikor a gazdagép megállapítja, hogy az eszköz a HID osztályba tartozik, átadja a vezérlést a megfelelő illesztőprogramnak. Feltételezhető, hogy a további adatcsere az ő vezetésével történik.

Windows rendszeren a HidServ rendszerszolgáltatás felelős a HID eszközök eléréséért. A HID-eszközök lekérdezésének funkcióiról és a HID-illesztőprogrammal való munka egyéb jellemzőiről P. V. Agurov „USB interfész” című munkájában olvashat bővebben. Használati és programozási gyakorlat "(Szentpétervár: BHV-Petersburg, 2005).

HID eszköz programozás a "legfelső szinten"

Az "alkalmazásos" Pascal programozók kemény életét megkönnyíti a bevált HID modul. PAS, a hid frontendje. dll (Rejtett felhasználói könyvtár - a fájl tulajdonságainál megadottak szerint). A fájl megjegyzései azt jelzik, hogy a Microsoft hidsdi.h és hidpi.h moduljain alapul. És maga a HID fájl. A PAS a JEDI () csomag része.

A Delphi for win32 környezetben való HID-eszközzel való munkához a TJvHidDeviceController komponenst használják, amely egy kényelmes globális kezelő a HID-eszközök elérésére. És már ennek alapján is beszerezhet egy objektumpéldányt egy adott eszközzel való munkavégzéshez.

A TJvHidDeviceController összetevő alapvető tulajdonságai és eseményei

Nézzük meg közelebbről a TJvHidDeviceController komponenst. Az OnArrival esemény akkor aktiválódik, amikor egy HID eszköz érkezik (csatlakozik) a rendszerhez, az eszközhöz való hozzáférést az esemény kezelője biztosítja a TJvHidDevice osztály egy példányán keresztül. Az OnDeviceChange egyszerű esemény az eszköz állapotának változására reagál, csak a rendszer változásait jelzi. Az OnDeviceData esemény akkor aktiválódik, amikor az adatok valamelyik HID-eszközről származnak, és a következőket küldik a kezelőnek: HidDev: TJvHidDevice; - az eszköz, amelyről az adatokat fogadták;

Az OnDeviceDataError esemény adatátviteli hibáról értesít a HidDev paraméterek átadásával a feldolgozási eljárásnak: TJvHidDevice; - HID eszköz és hiba: DWORD; - hibakód. Az OnDeviceUnplug esemény azt jelzi, hogy egy eszközt eltávolítottak a rendszerre telepített eszközök listájáról. A Plug and Unplug eseménykezelőinek típusai megegyeznek (a forrásszövegben: TJvHidUnplugEvent = TJvHidPlugEvent). A HID eszköznek megfelelő TJvHidDevice osztály objektuma átadásra kerül a kezelőnek.

Az OnEnumerate esemény a rendszerben elérhető HID eszközök szekvenciális felsorolására szolgál az Enumerate metódus meghívásával, vagyis az eseménykezelőben a talált eszközök szekvenciálisan objektumként kerülnek továbbításra. Ezt az eseményt az Enumerate metódus kényszeríti ki, amely a meglévő HID-eszközök "elvezetésére" szolgál a kezelőn keresztül, például amikor a HID-eszközök állapotát a gazdagép (számítógép) kezdeményezésére felülvizsgálják.

Az OnRemoval esemény akkor aktiválódik, amikor egy eszközt fizikailag eltávolítanak a rendszerből, és ugyanazzal a TJvHidUnplugEvent kezelőtípussal rendelkezik, mint az OnDeviceUnplug esetében. A CountByProductName függvény az argumentumban megadott terméknévnek megfelelő eszközök számát, a CountByVendorName pedig az argumentumban megadott gyártó nevét adja vissza.

A TJvHidDevice osztály alapvető tulajdonságai és eseményei

A TJvHidDevice osztály egyetlen HID eszköz virtuális reprezentációja. Ennek az osztálynak az új objektuma beszerezhető, mint már említettük, az OnArrival vagy az OnEnumerate eseményből. A TJvHidDeviceController és a TJvHidDevice osztályok funkcionalitása részben megkettőződik, mivel az első egy közös eszközkészletet tartalmaz a rendszerben elérhető HID-eszközökkel való munkavégzéshez, és egy mechanizmust az egyik elérésére. Egy eszköz egyedileg azonosítható a SerialNumber, ProductName és VendorName tulajdonságai alapján. Az OnData esemény segítségével információt kaphat az adatok érkezéséről egy ilyen objektum használatával. Az adatokat a WriteFile metóduson keresztül küldik el (a szoros értelemben vett függvényen keresztül). A WriteFile a WriteFile (kernel32) rendszerfüggvény körüli burkolóanyag.

Az eszköz eltávolításának ellenőrzéséhez hozzá kell rendelnie a kezelőjét az OnUnplug eseményhez. Mielőtt elkezdené az adatcserét a HID eszközzel, meg kell győződnie arról, hogy az ilyen csere lehetséges a HasReadWriteAccess segítségével. Ennek az osztálynak még külön OnDataError eseménye is van kommunikációs hibához.

És most nézzük meg egy "élő" projekt kódrészleteit, amely tesztkliens alkalmazást valósít meg az adatcsere megszervezésére egy nem szabványos eszközzel - HID alapú műanyag chipkártyákkal. A realizmusért folytatott küzdelemben a szerző vállalta a bátorságot, hogy ne dobjon ki "felesleges" technológiai kódkapcsolatokat a listákból.

A ScanDevices metódus (1. lista) arra szolgál, hogy elindítsa a rendszerben a kívánt HID-eszköz keresésének folyamatát. A kód nagy része, az Enumerate metódus hívása kivételével, opcionális, és rugalmasságot biztosít az alkalmazás számára, így például ugyanahhoz a tesztprogramhoz hozzáadható a nem HID felületen való munkavégzés képessége. Az AddError metódus hibakeresési információkat bocsát ki az ablakba, miközben a program fut.

A 2. lista az OneEnumerate esemény kezelőjét mutatja a szükséges külső eszköz megtalálásához. Az egyszerűség kedvéért feltételezzük, hogy a program csak egy olyan típusú eszközzel tud működni, amelyre szüksége van.

A projekt további megvalósításának mérlegelése előtt szükséges egy kicsit szólni a felső szintű adatcsere elfogadott formátumáról, vagyis arról a struktúráról, amely közvetítő szerepet tölt be az adatfogadási és -továbbítási módok és a konkrét alkalmazott megoldandó feladat. A helyzet az, hogy itt a fejlesztő lehetőséget kap kreatív képességeinek megvalósítására. Inkább a fejlesztőknek, mert egy új protokoll létrehozásának folyamata nagyon gyakran kétirányú, és az első hegedűn az játszik, akinek nehezebben tudja megvalósítani a cserealgoritmust. Általánosságban elmondható, hogy bármilyen csereprotokollról is legyen szó, mindig jó minden szoftverentitást a lehető legvizuálisabbá és önellátóvá tenni, még néhány általánosan elfogadott hagyomány rovására is. A legjobb megoldás az, amelyik rövid időn belül megvalósul, minimális kötődéssel a szoftverkörnyezethez, és nagyszerű további fejlesztési lehetőségeket kínál. Ezen elvek alapján készült egy felső szintű csereprotokoll, ahol a fő fogalom a „parancs”. A 3. lista azt mutatja, hogy a szerző mennyire szereti a karakterlánc-adatokat, amelyek többszörösen megmentették a programmodulok hibakeresése során. Milyen csodálatos, hogy egyáltalán van String típusunk! Minden protokoll parancs kategóriákra (osztályokra) van felosztva, amelyeken belül van egy parancskód, amely egyedileg jellemzi a célját. Az edParam paraméter az eszközre való adatküldésre szolgál, az edAnswerData paraméter pedig az eszközről kapott adatokat tartalmazza. A rekord leírt tagjainak karakterlánc típusa lehetővé teszi az adatok szabad és vizuális kezelését HEX-karakterlánc formátumban. És ami a legkellemesebb, a leírt lemez formátuma ideológiailag valahol a középmezőnyben áll közvetlen célja és megjelenítési formái (INI, HEX, XML stb.) között.

A parancsvégrehajtás, azaz az adatok küldése az eszközre, 8 bájt hosszúságú adatcsomagok segítségével valósul meg (4. lista). Ez a hosszúság nem az egyetlen megoldás, az ilyen választást a felső szintű protokoll követelményei határozzák meg, és minden esetben eltérő lehet. Ez, ahogy mondani szokás, ízlés dolga. A furcsa IsUSBMode jelző az ExecuteCommand metódusban (5. lista a PC-Disk World-en) emlékeztet arra, hogy az USB helyett esetleg COM portot vagy más interfészt kell használnunk. Az elküldött adatcsoport elején egy véletlenszerűen kiválasztott formátumú (például 3E3E3E2B) szinkronsorozat kerül továbbításra az eszközre, amely tájékoztatja az eszközt, hogy a bemenetén teljesen legális adatok vannak. Hadd emlékeztessem önöket, hogy ebben az esetben nem annyira HID-ről beszélünk, mint inkább egy speciális, a hardvertől ideológiailag elválasztott felső szintű protokollról, amely speciális alkalmazott problémák megoldására szolgál.

A GetDataExecutor kezelőben egy speciálisan létrehozott OnNewInputData eseményt használnak az eszközről kapott adatokhoz (8 bájtos csomag) az eredetileg feldolgozott adatok további feldolgozásra történő átviteléhez, a régi és új értékek feltüntetésével (6. lista a " PC-Disk World"). Így a nyers adatok érkezésének eseményei és a további feldolgozásra utaló jelzések szétválnak, lehetővé téve bizonyos figyelmeztető algoritmusok hozzáadását a hibás, ismétlődő vagy szükségtelen beviteli információk korai szakaszában.

Az itt bemutatott példák a HID-eszközzel való munkavégzésre illusztrálják a cikk általános gondolatát - a nem szabványos HID-eszközök Delphi segítségével történő programozásának viszonylagos egyszerűségét.

Bevezetés
Kinek szól ez a könyv?
Mit találsz a könyvben
Szoftverkövetelmények
Hardverkövetelmények
A programkódról
A fejezetek összefoglalása
Megnevezések
Köszönetnyilvánítás
Visszacsatolás
I. rész. Bevezetés az USB-be
1. fejezet USB specifikáció
1.1. Mi az az USB és miért van rá szükség
1.1.1. Általános USB architektúra
1.1.2. USB fizikai és logikai architektúra
1.1.3. USB alkatrészek
1.1.4. USB-eszköz tulajdonságai
1.1.5. Adatátviteli elvek
1.1.6. Megszakítási mechanizmus
1.1.7. Adatátviteli módok
1.1.8. Az adatcsere logikai szintjei
1.1.8.1. Kliens szoftver szintje
1.1.8.2. USB rendszer meghajtó szintje
1.1.8.3. Gazdavezérlő réteg interfész
1.1.8.4. USB periféria busz szint
1.1.8.5. USB logikai eszközszint
1.1.8.6. Az USB-eszköz funkcionális szintje
1.1.9. Adatátvitel rétegenként
1.1.10. Az adatátvitel típusai
1.1.11. Személyzet
1.1.12. Végpontok
1.1.13. Csatornák
1.1.14. Csomagok
1.1.14.1. A token csomagok formátuma IN, OUT, SETUP és PING
1.1.14.2. SOF csomag formátum
1.1.14.3. Adatcsomag formátum
1.1.14.4. Megerősítő csomag formátuma
1.1.14.5. SPLIT csomagformátum
1.1.15. Ellenőrző összeg
1.1.15.1. CRC számítási algoritmus
1.1.15.2. Szoftver CRC számítás
1.1.16. Tranzakciók
1.1.16.1. Tranzakciótípusok
1.1.16.2. Tranzakció megerősítése és folyamatszabályozás
1.1.16.3. Tranzakciós protokollok
1.2. Kérések USB-eszközökhöz
1.2.1. Konfigurációs csomag
1.2.2. Normál kérések USB-eszközökhöz
1.2.2.1. A GET_STATUS állapot lekérése
1.2.2.2. A CLEAR_FEATURE tulajdonság visszaállítása
1.2.2.3. SET_FEATURE tulajdonság felbontása
1.2.2.4. A cím beállítása a SET_ADDRESS buszon
1.2.2.5. A GET_DESCRIPTOR leíró letöltése
1.2.2.6. A SET_DESCRIPTOR leíró átadása
1.2.2.7. A GET_CONFIGURATION konfigurációs kód lekérése
1.2.2.8. A SET_CONFIGURATION konfigurációs kód beállítása
1.2.2.9. A GET_INTERFACE interfész konfigurálásához szükséges kód lekérése
1.2.2.10. A SET_INTERFACE interfész beállítási kódjának beállítása
1.2.2.11. A szinkronizálási keretszám beállítása SYNC_FRAME
1.2.2.12. Normál kérések feldolgozása
1.2.3. Eszközleíró
1.2.3.1. Eszközleíró
1.2.3.2. Minősítő eszközleíró
1.2.3.3. Konfiguráció leíró
1.2.3.4. Interfész leíró
1.2.3.5. Végpont leíró
1.2.3.6. Karakterlánc leíró
1.2.3.7. Konkrét leírók
1.2.3.8. A leírók megszerzésének sorrendje
1.3. Plug and Play (PnP) rendszer
1.3.1. USB-eszközök konfigurálása
1.3.2. USB-eszközök számozása
1.3.3. PnP azonosítók USB-eszközökhöz
1.3.4. Szimbolikus eszköznevek
1.4. WDM modell
2. fejezet C Mikrokontroller programozása
2.1. Általános információk a mikrovezérlők C nyelvéről
2.2. Szabványos könyvtárak használata
2.3. Programozás az AT89C5131-hez
2.3.1. Inicializáló fájl
2.3.2. Leíró struktúrák
2.3.3. Projekt felépítése
3. fejezet Eszközök
3.1. Programozók
3.1.1. Flip programozó
3.1.2. ER-Tronik programozó
3.2. Illesztőprogram-készítő eszközök
3.2.1. NuMega Driver Studio
3.2.2. Jungo windriver
3.2.3. Jungo KernelDriver
3.3. Microsoft Visual Studio eszközök
3.3.1. Attól függ (Dependency Walker)
3.3.2. Hibakeresés
3.3.3. GuidGen
3.4. Microsoft DDK eszközök
3.4.1. DeviceTree
3.4.2. DevCon
3.4.2.1. Az osztályok kulcsa
3.4.2.2. Illesztőprogram-fájlok kulcsa
3.4.2.3. Hwids kulcs
3.4.2.4. Újrakeresési kulcs
3.4.2.5. Stack kulcs
3.4.2.6. Állapot gomb
3.4.3. Chklnf és Genlnf
3.5. CompuWare Corporation eszközök
3.5.1. Monitor
3.5.2. SymLink
3.5.3. EzDriverlninstaller
3.5.4. WdmSniff
3.6. Syslnternals eszközök
3.6.1. WinObj
3.7. USB fórumeszközök
3.7.1. HID Leíró eszköz
3.8. USB parancsellenőrző
3.9. HDD szoftvereszközök
3.10. Sourceforge eszközök
3.11. Bus Hound Monitoring Program
4. fejezet A Win32 függvények használatának elvei .NET-ben
4.1. Általános információ
4.2. Win32 függvények importálása
4.3. Struktúrák
4.3.1. StructLayout attribútum
4.3.2. Marsall, mint attribútum
4.4. Közvetlen adathozzáférés
4.5. Windows üzenetkezelés
4.6. A WMI megértése
4.7. Online források ehhez a fejezethez
rész II. USB osztályok
5. fejezet CDC osztály
5.1. Módszerek az USB / RS-232 interfészek átalakítására
5.2. Általános információk az RS-232 interfészről
5.2.1. Cserevonalak
5.2.1.1. Továbbított adatok (BA / TxD / TD)
5.2.1.2. Fogadott adatok (BB / RxD / RD)
5.2.1.3. Küldési kérelem (CA / RTS)
5.2.1.4. Küldésre kész (CB / CTS)
5.2.1.5. DCE készenlét (CC / DSR)
5.2.1.6. DTE kész (CD / DTR)
5.2.1.7. Hívásjelző (CE / RI)
5.2.1.8. Carrier Detect (CF / DCD)
5.2.1.9. Fogadásra készség (CJ)
5.3. CDC specifikáció
5.3.1. Szabványos leírók
5.3.2. Funkcionális leírók
5.3.2.1. Fejléc funkcióleíró
5.3.2.2. Parancsmód-leíró
5.3.2.3. Absztrakt eszközleíró
5.3.2.4. Csoportosítási leíró
5.3.3. Speciális kérések
5.3.3.1. SET_LINE_CODING lekérdezés
5.3.3.2. GET_LINE_CODING kérés
5.3.3.3. SET_CONTROL_LINE_STATE lekérdezés
5.3.3.4. SEND_BREAK kérés
5.3.4. Értesítések
5.3.4.1. RING ^ ÉSZLELÉS értesítés
5.3.4.2. SERIAL_STATE értesítés
5.4. Windows CDC támogatás
5.4.1. A Windows soros port szolgáltatásainak áttekintése
5.4.1.1. Alapvető port műveletek
5.4.1.2. Port beállítási funkciók
5.4.1.3. Egyedi port beállítás
5.4.1.4. A modemvonalak állapotának lekérdezése
5.4.1.5. Együttműködés a CDC-vel a platformon. HÁLÓ
5.4.2. A Windows-funkciók és az USB-kérések közötti megfelelés
6. fejezet HID osztály
6.1. HID-eszköz specifikáció
6.2. A HID eszközzel való adatcsere eljárása
6.3. A HID eszközillesztő telepítése
6.4. HID eszköz azonosítás
6.4.1. Boot eszköz azonosítása
6.4.2. HID eszköz konfigurációs leíró
6.4.3. HID leíró
6.4.4. Jelentésleíró
6.5. Jelentésleíró szerkezet
6.5.1. Jelentés elemei
6.5.1.1. Rövid típusú elemek
6.5.1.2. Hosszú típusú elemek
6.5.2. Jelentéstételi típusok
6.5.2.1. Alapvető elemek
6.5.2.2. Globális elemek
6.5.2.3. Helyi elemek
6.5.3. Példák a leírókra
6.6. Kérések a HID eszközhöz
6.6.1. GET_REPORT kérés
6.6.2. SET_REPORT kérés
6.6.3. GET_IDLE kérés
6.6.4. SET_IDLE lekérdezés
6.6.5. GET_PROTOCOL kérés
6.6.6. SET_PROTOCOL lekérdezés
6.7. Eszközök
6.8. Illesztőprogramok HID-eszközökhöz a Windows rendszerben
7. fejezet Egyéb USB-osztályok
rész III. USB programozási gyakorlat
8. fejezet USB-eszköz létrehozása AT89C5131 alapján
8.1. Általános információk az AT89C5131-ről
8.2. Az AT89S5131 szerkezeti diagramja
8.3. Az USB AT89C5131-et regisztrál
8.3.1. USBCON regiszter
8.3.2. USBADDR regiszter
8.3.3. USBINT regiszter
8.3.4. USBIEN regiszter
8.3.5. UEPNUM regiszter
8.3.6. UEPCONX regiszter
8.3.7. UEPSTAX nyilvántartás
8.3.8. UEPRST nyilvántartás
8.3.9. UEPINT nyilvántartás
8.3.10. UEPIEN nyilvántartás
8.3.11. UEPDATX regiszter
8.3.12. UBYCTLX nyilvántartás
8.3.13. UFNUML regiszter
8.3.14. UFNUMH nyilvántartás
8.4. AT89S5131 áramkör
8.5. Alapkivitel az AT89C5131-hez
8.5.1. A program első verziója az AT89C5131-hez
8.5.2. Karakterlánc-leírók hozzáadása
8.5.3. Végpontok hozzáadása
8.6. Töltse le a programot
9. fejezet A CDC osztály megvalósítása
9.1. CDC megvalósítás
9.2. Eszközleírók
9.2.1. Végpont inicializálás
9.2.2. CDC kérések feldolgozása
9.2.3. RS-port és CDC-vonal konfigurálása
9.2.4. Adatok fogadása és továbbítása
9.3. Illesztőprogram telepítése
9.4. Adatcsere programozása CDC eszközzel Delphiben
9.5. Csere programozása CDC eszközzel C # nyelven
9.5.1. Az MSCOMM komponens használata
9.5.2. Win32 függvények használata
9.6. CDC problémák
10. fejezet A HID osztály megvalósítása
10.1. A HID megvalósítása az AT89C5131-en
10.2. Több bájt átvitel
10.3. Funkciójelentések
10.4. Adatátvitel a gazdagépről (SET_REPORT)
10.5. HID eszköz telepítése
10.6. Kommunikáció HID eszközzel
10.6.1. A HID eszköz nevének lekérése
10.6.2. Eszközattribútumok lekérése és jelentések olvasása
10.6.3. Host to HID adatátvitel
10.7. Példák HID eszközökre
10.7.1. Egér eszköz megvalósítás
10.7.2. A billentyűzet eszköz megvalósítása
10.8. A HID protokoll használata
10.8.1. Adatok értelmezése
10.8.2. Gyűjtemények
10.8.3. Tömbök és gombok
10.9. HID eszköz több jelentéssel
11. fejezet Különleges Windows-szolgáltatások
11.1. Az API funkciók beállítása
11.1.1. USB-eszközök felsorolása
11.1.2. Az USB-eszköz állapotának lekérése
11.2. USB-eszközök felsorolása WMI használatával
11.3. A Windows XP speciális szolgáltatásai
11.3.1. HidD_GetInputReport – HID jelentések olvasása
11.3.2. Nyers bemeneti adatok fogadása
11.4. DirectX funkciók
11.5. Párbeszéd az új berendezések hozzáadásával kapcsolatban
11.6. Szimbolikus eszköznevek használata
11.7. Biztonságosan távolítsa el a flash meghajtókat
11.8. Eszközök hozzáadásának és eltávolításának észlelése
11.9. Internetes források
12. fejezet Illesztőprogram-fejlesztés
12.1. Alapvető WDM illesztőprogram-eljárások
12.1.1. DriverEntry eljárás
12.1.2. AddDevice eljárás
12.1.3. Letöltési eljárás
12.1.4. A járművezető működési eljárásai
12.1.4.1. Csomag fejléce
12.1.4.2. I/O veremcellák
12.4.1.3. A járművezető működési eljárásai
12.1.5. IOCTL-kérések kiszolgálása
12.2. Az illesztőprogram betöltése és az illesztőprogram elérése
12.2.1. Vezetői eljárás
12.2.2. Driver regisztrálása
12.2.2.1. Regisztráció az SCM-managernél
12.2.2.2. Az illesztőprogram paraméterei a rendszerleíró adatbázisban
12.2.3. A működési eljárásokra hivatkozva
12.2.4. Az illesztőprogram tárolása a végrehajtható fájlban
12.3. Illesztőprogram létrehozása a Driver Studio segítségével
12.3.1. Néhány szó a Driver Studio könyvtáráról
12.3.1.1. KDriver osztály
12.3.1.2. KDevice osztály
12.3.1.3. Klrp osztály
12.3.1.4. KRegistryKey osztály
12.3.1.5. KLowerDevice osztály
12.3.1.6. USB osztályok
12.3.2. Egyéb Driver Studio osztályok
12.3.3. Illesztőprogram-sablon létrehozása a Driver Studio segítségével
12.3.3.1. 1. lépés: A projekt nevének és elérési útjának beállítása
12.3.3.2. 2. lépés: Az illesztőprogram-architektúra kiválasztása
12.3.3.3. 3. lépés: gumiabroncs kiválasztása
12.3.3.4. 4. lépés: A végpontok halmazának beállítása
12.3.3.5. 5. lépés: Az osztály és a fájlnév beállítása
12.3.3.6. 6. lépés Válassza ki az illesztőprogram funkcióit
12.3.3.7. 7. lépés: A kérések feldolgozásának módjának kiválasztása
12.3.3.8. 8. lépés: Hozzon létre mentett illesztőprogram-beállításokat
12.3.3.9. 9. lépés: Illesztőprogram tulajdonságai
12.3.3.10. 10. lépés: Az IOCTL kódok beállítása
12.3.3.11. 11. lépés: További beállítások
12.3.4. Az illesztőprogram-sablon módosítása
12.3.5. Alapvető eszközosztály-módszerek
12.3.6. Adatolvasás megvalósítása
12.3.7. Illesztőprogram telepítése
12.3.8. Adatolvasó
12.3.9. Adatok olvasása más típusú végpontokból
12.3.10. Tisztítsa meg az USB-eszköz illesztőprogramját
IV. rész. Könyvtár
13. fejezet INF fájlformátum
13.1. INF fájl szerkezet
13.1.1. Verzió szakasz
13.1.2. Gyártói rész
13.1.3. DestinationDirs szakaszt
13.1.3.1. DefaultDescDir kulcs
13.1.3.2. Fájllista-szakasz gombjai
13.1.3.3. Dirid kulcs
13.1.3.4. Subdir kulcs
13.1.4. Modelleíró rész
13.1.5. szakasz xxx. AddRegw xxx. DelReg
13.1.6. szakasz xxx. LogConfig
13.1.7. szakasz xxx. CopyFiles
13.1.8. Vonós rész
13.1.9. Szakasz hivatkozások
13.2. INF fájlok létrehozása és tesztelése
13.3. Eszközök telepítése az INF fájl használatával
13.4. USB rendszerleíró ágak
14. fejezet: Alapvető Windows-funkciók
14.1. CreateFile és CloseHandle funkciók: Objektum megnyitása és bezárása
14.1.1. további információ
14.1.2. Visszatérési érték
14.1.3. Hívjon példát
14.2. ReadFile funkció: adatok olvasása
14.2.1. további információ
14.2.2. Visszatérési érték
14.2.3. Hívjon példát
14.3. Write File funkció: adatátvitel
14.3.1. további információ
14.3.2. Visszatérési érték
14.3.3. Hívjon példát
14.4. ReadFileEx funkció. Az APC beolvasott adatok
14.4.1. Visszatérési érték
14.4.2. további információ
14.4.3. Hívjon példát
14.5. WriteFiieEx funkció: APC adatátvitel
14.5.1. Visszatérési érték
14.5.2. Hívjon példát
14.6. WaitForSingieObject függvény várja az objektum jelállapotát
14.6.1. Visszatérési érték
14.7. WaitForMultipleObjects Funkció: Várakozás az objektumok jelállapotára
14.7.1. Visszatérési érték
14.8. GetOverlapped Result függvény: aszinkron művelet eredménye
14.8.1. Visszatérési érték
14.9. DeviceloControl funkció: közvetlen vezetővezérlés
14.9.1. Visszatérési érték
14.10. Mégse / o funkció: a művelet megszakítása
14.10.1. Visszatérési érték
14.11. Dos Device funkció lekérdezése, az eszköznév lekérése a DOS-név alapján
14.11.1. Visszatérési érték
14.11.2. Hívjon példát
14.12. Define Dos Device funkció: műveletek DOS eszköznévvel
14.12.1. Visszatérési érték
14.12.2. Hívjon példát
15. fejezet: Windows-struktúrák és -funkciók soros portokhoz
15.1. COMMCONFIG port beállítási struktúra
15.2. COMMPROP port tulajdonságok szerkezete
15.3. COMMTIMEOUTS időtúllépési struktúra
15.4. COMSTAT portállapot-struktúra
15.5. DCB szerkezet
15.6. BuildCommDCB függvény: DCB struktúra felépítése karakterláncból
15.6.1. további információ
15.6.2. Visszatérési érték
15.6.3. Hívjon példát
15.7. BuildCommDCBAndTimeouts funkció: DCB struktúrát és időtúllépéseket hoz létre karakterláncból
15.8. SetCommBreak és ClearCommBreak funkciók: Adatkimenet vezérlése
15.8.1. Visszatérési érték
15.9. ClearCommError funkció: Porthibák lekérése és visszaállítása
15.9.1. Visszatérési érték
15.10. EscapeCommFunction: portvezérlés
15.10.1. Visszatérési érték
15.11. GetCommMask és SetCommMask funkciók: eseményhívási maszk
15.11.1. Visszatérési érték
15.12. A WaitCommEvent függvény COM port eseményre vár
15.12.1. Visszatérési érték
15.12.2. további információ
15.12.3. Hívjon példát
15.13. GetCommConfig és SetCommConfig funkciók: Port paraméterek konfigurálása
15.13.1. Visszatérési érték
15.13.2. Hívjon példát
15.14. CommConfigDialog Funkció: Port konfigurációs párbeszédpanel
15.14.1. Visszatérési érték
15.14.2. további információ
15.14.3. Hívjon példát
15.15. GetCommProperties funkció: beolvassa a port tulajdonságait
15.15.1. Visszatérési érték
15.15.2. Hívjon példát
15.16. GetCommState és SetCommState funkciók: Port State
15.16.1. Visszatérési érték
15.16.2. Hívjon példát
15.17. GetCommTimeouts és SetComniTimeouts funkciók: Port időtúllépések
15.17.1. Visszatérési érték
15.17.2. Hívjon példát
15.18. PurgeComm funkció: Port pufferek öblítése
15.18.1. Visszatérési érték
15.18.2. Hívjon példát
15.19. SetupComm: Pufferméretek konfigurálása
15.19.1. Visszatérési érték
15.20. GetDefaultCommConfig és SetDefaitltCommConfig funkciók: Alapértelmezett portbeállítások
15.20.1. Visszatérési érték
15.21. TransmitCommChar funkció. speciális karakterek átvitele
15.21.1. Visszatérési érték
15.22. GetCommModemStatus funkció: modem állapota
15.22.1. Visszatérési érték
15.22.2. Hívjon példát
15.23. EnumPorts funkció: portok felsorolása
15.23.1. további információ
15.23.2. Visszatérési érték
15.23.3. Hívjon példát
16. fejezet A Windows telepítő API struktúrái és funkciói
16.1. A DiGetCiassDevs beállítása: Eszközök felsorolása
16.1.1. Visszatérési érték
16.2. SetupDiDestroyDevicelnfoList funkció, amely felszabadítja az eszközleíró blokkot
16.2.1. Visszatérési érték
16.3. SetupDiEnumDevicelnterfaces funkció: eszközinformáció
16.3.1. Visszatérési érték
16.4. SetupDiGetDevicelnterfaceDetaii funkció: az eszköz adatai
16.5. SetupDiEnumDevicelnfo funkció: eszközinformáció
16.6. SetupDiGetDeviceRegistryProperty funkció: A Plug and Play eszköz tulajdonságainak lekérése
16.7. CM_Get_DevNode_Status függvény: eszköz állapota
16.8. CM_Request_Device_Eject funkció az eszköz biztonságos eltávolításához
17. fejezet: Windows HID API struktúrák és funkciók
17.1. HidD_Hello függvény: a könyvtár ellenőrzése
17.2. HidD_JetHidGuid függvény: a GUID lekérése
17.3. HidD_GetPreparsedData funkció: eszközleíró létrehozása
17.4. HidD_EreePreparsedData funkció: eszköz fogantyújának felszabadítása
17.5. HidD_Get Feature funkció: Funkciójelentés lekérése
17.6. HidD_SetFeature funkció: Feature-report átvitele
17.7. HidD_GetNumlnputBuffers függvény: a pufferek számának lekérdezése
17.8. HidD_SetNumlnputBuffers függvény: a pufferek számának beállítása
17.9. HidD_GetAttributes funkció: eszközattribútumok lekérése
17.10. HidD_GetManufacturerString függvény. szerezze be a gyártó karakterláncát
17.11. HidD_GetProductString függvény lekéri a termék karakterláncát
17.12. HidD_GetSerialNumberString függvény. húr szerzés sorozatszám
17.13. HidD_GetIndexedString függvény. karakterlánc beszerzése index szerint
17.14. HidD_Jetlnput Jelentés funkció bemeneti jelentés lekérése
17.15. HidD_SetOutputReport függvény. kimeneti jelentés továbbítása
17.16. HidP_GetCaps függvény: eszköztulajdonságok lekérése
17.17. HidP_MaxDataListLength függvény: jelentésméretek lekérése
17.18. HidD_FIushQueue függvény: pufferek kiöblítése
17.19. HidP_GetLinkColiectionNodes függvény: gyűjteményfa
17.20. Funkciók HidP_GetScaledUsageValue u HidP_SetScaledUsage Érték: Az átalakított értékek lekérése és beállítása
17.21. HidF_MaxUsageListLength függvény: a kulcskódok puffermérete
17.22. HidP_UsageListDifference függvény: különbség a tömbök között
Alkalmazások
1. függelék További funkciók
2. függelék. Példák összeállítása más Delphi-verziókban
3. függelék Nyelvi azonosítók táblázata (LangID)
4. függelék. Gyártói kódok táblázata (szállító azonosító, eszközazonosító)
Függelék 5. Eszközkezelő parancsikon létrehozása
6. melléklet Gyakran ismételt kérdések
7. melléklet A CD leírása
Irodalom
Tárgymutató

Mint említettük, a Windows operációs rendszerek szoftvertámogatást biztosítanak az USB-eszközökhöz. Az USB-eszközök adatfolyamainak feldolgozását az operációs rendszer szintjén szabványos illesztőprogramok kötege végzi, amelyek ellátják az összes USB-eszköz kezelésének, valamint a köztük és a rendszer közötti adatcserének alapvető funkcióit.

Ha írnod ​​kell szoftver bármely USB-eszköz esetében, amely bővítené adatfeldolgozási képességeit, három lehetséges mód közül választhat:

írjon saját eszközillesztőt, amely az összes szükséges vezérlési és adatcsere funkciót biztosítaná, és egy programot, amely felhasználói módban együttműködik ezzel az illesztőprogrammal. Ebben az esetben teljesen nélkülözheti a szabványos rendszer-illesztőprogramokat;

írjon egy szűrő-illesztőprogramot, amely biztosítja a szükséges funkciókat, de az illesztőprogram-veremben található a rendszer-illesztőprogramok felett. Így az összes szabványos feldolgozási funkciót a rendszer által telepített USB-illesztőprogramok látnák el, a további funkciókat pedig az Ön szűrő-illesztőprogramja biztosítaná, amellyel a felhasználói program együttműködne;

ingyenes függvény- és illesztőprogram-könyvtárak használata

az USB-eszköz eléréséhez.

A legtöbb esetben szükség lehet szoftveres hozzáférésre az USB-eszközhöz, ha az eszköz nagyon specifikus funkciót lát el. Például USB alapú "elektronikus oszcilloszkópokat" vagy adatgyűjtő rendszereket fejlesztettek ki, amelyek működéséhez hozzá kell férni az eszközhöz. A legtöbb ilyen esetben ingyenes függvénykönyvtárakat használhat, amelyek szinte minden népszerű programozási környezetben működnek. Például a GNU égisze alatt kifejlesztették a LibUsb néven ismert szoftvert, amely tartalmazza a Windows és Linux operációs rendszereken való futtatáshoz szükséges illesztőprogramokat és függvénykönyvtárakat. Ezek a funkciókönyvtárak nagyon népszerűek, és lehetővé teszik olyan programok gyors fejlesztését, amelyek kölcsönhatásba lépnek az eszközzel szabványos funkciók segítségével. Így nem kell saját eszközillesztőt írnia, ami jelentősen időt takarít meg.

Ezenkívül a legtöbb felhasználó nem ismeri az illesztőprogram-fejlesztési módszertant,

és ez egy nagyon összetett programozási terület, így az ilyen szabadon terjeszthető szoftverek elérhetősége felbecsülhetetlen segítséget jelent a felhasználók széles körében. A LibUsb projekt alapján wrappereket fejlesztettek ki a Visual Basic .NET-tel és C # .NET-tel való munkavégzéshez, melyek közül a legnépszerűbb a szintén ingyenes szoftverek égisze alatt fejlesztett LibUsbDotNet. Az USB-eszközök programozásának látszólagos bonyolultsága ellenére a felsorolt ​​szoftver olyan egyszerűvé teszi ezt a feladatot, hogy kezdők is meg tudják csinálni. megnézzük gyakorlati példák hogyan dolgozz a te USB-eszközök mi, és kezdje a LibUsb szoftvercsomaggal. A fenti szoftver egyébként ingyenesen letölthető a www.sourceforge.net oldalról vagy számos másodlagos oldalról.

Hogyan dolgozhatok a LibUsb USB funkciókönyvtárakkal? A könyvtár így épül fel

zom, hogy elvégezhesse az USB-eszközzel kapcsolatos alapvető műveleteket:

azonosítás vagy más szóval felsorolás. Ennek a műveletnek a végrehajtásakor a rendszer észleli az USB-buszra csatlakoztatott eszközöket, ami a libusb könyvtár megfelelő funkcióival történik;

eszközparaméterek (eszközazonosítók, gyártói adatok és készülékjellemzők) beszerzése, amelyhez számos funkció található a könyvtárban;

nyitás, zárás, adatok olvasása és írása, parancsok küldése. Az USB-eszközre és más tárgyakra fájlrendszer, olvasás írásával érhető el, ami a megfelelő könyvtári funkciók segítségével történik.

A fenti szolgáltatások mindegyike megvalósítható a megfelelő libusb függvények meghívásával, de ezek itt nem kerülnek felsorolásra, mivel ez túl sok helyet foglalna el; meglátjuk, hogyan használhatunk néhány funkciót.

Rizs. 6.10

A libusb0.sys illesztőprogram helye az eszközillesztő-veremben

gyakorlati példákon. Az olvasók minden funkció leírását megtalálják a megfelelő dokumentációban. Hadd emlékeztesselek arra, hogy a libusb függvények Windows operációs rendszerekben való használatát vizsgáljuk.

Libusb bemenettel rendelkező disztribúció telepítésekor operációs rendszer A Windows rendszer telepíti a libusb0.sys szűrő-illesztőprogramot. Ez az illesztőprogram a rendszer-illesztőprogram-verem tetején helyezkedik el, ami könnyen látható például bármely USB-eszköz illesztőprogram-információiból (6.10. ábra).

Ezenkívül az illesztőprogram felhasználói programokból való eléréséhez a rendszerbe telepítve van a libusb0.dll könyvtár, amelynek segítségével felhasználói programokat fejleszthet.

Rizs. 6.17

Alkalmazás ablak nézet az eltávolítás során

USB-eszközök a rendszerből