Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Inicializace USB v C#

Zdravím,
před několika týdny jsem začal programovat pod Windowsem v NET Frameworku. Použitý jazyk je C# - mám poměrně dobrý znalosti klasického Cčka z mikrokontrolérů. Pro programování ve Windows používám IDE studio SharpDevelop, který je téměř identické s Microsoft Visual Studiem, ale je zdarma.

Můj problém tkví v použití a komunikaci se zařízením pomocí USB, kde nechápu jak zařízení v PC nají a jak s ním navázat spojení. Mé zařízení je ve třídě HID (nepotřebuji další ovladače). Na internetu jsem o tom nenašel moc informací, tak se chci zeptat tady, jestli někdo nedělá něco podobného a nepodělil se o své zkušenosti.
Děkuji za jakoukoliv reakci.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Aplikacia moze komunikovat len s ovladacom, ne so zariadenim. Ked chces komunikovat priamo so zariad…
MM.. 02.10.2015 15:15
MM..
Právě že to chci udělat ve třídě HID, kde ovladač netřeba, protože napsat si vlastní ovladač, na to…
antibalda 02.10.2015 15:19
antibalda
Najjednoduchsie je urobit to USB zariadenie tak, aby sa hlasilo trebars ako com port, musi v nom byt…
MM.. 02.10.2015 15:28
MM..
To s tebou souhlasím, že je nejjednodušší, problém je v tom, že bych musel mít v zařízení převodník…
antibalda 02.10.2015 15:31
antibalda
Hlavne, že sem dáš odkaz (ktorý si zrejme ani sám nečítal)... Odkazy a download -> Automator :i:
pme 02.10.2015 15:58
pme
Ten článek jsem samozřejmě četl. Automator jsem si stáhl také, pro inspiraci dobrý - je psaný v C++.…
antibalda 02.10.2015 19:20
antibalda
To si potom musis zistit komunikaciu so zariadenim. Ovladac pozna len VID a PID resp len to co ti ta…
MM.. 02.10.2015 19:26
MM..
Teď mě ještě napadl možný způsob jak to hledat. Nejdříve to najít podle VID a PID a následně se zaří… nový
antibalda 02.10.2015 19:29
antibalda
Ak to su uplne stejne zariadenia tak programy zvycajne maju v nastaveniach alebo rovno v dialogu vyb… nový
MM.. 02.10.2015 19:34
MM..
Samozrejme, že zo C# ide volať WinAPI, viď DllImportAttribute Class. poslední
los 02.10.2015 20:17
los
Ta fcia vracia toto https://msdn.microsoft.com/en-us/library/windows/h ardware/ff538868%28v=vs.85%29… nový
MM.. 02.10.2015 19:40
MM..
Jasně, že nejlepší by bylo dát každému zařízení svoje PID, ale je to nějaké omezené, co jsem četl, n… nový
antibalda 02.10.2015 19:54
antibalda
Ano ta library moze byt tiez dobra. VID je vendor ID, malo by byt jedinecne vyrobca si to ma kdesi… nový
MM.. 02.10.2015 20:04
MM..
http://www.developerfusion.com/article/84338/makin g-usb-c-friendly/ nový
pme 02.10.2015 20:12
pme

Aplikacia moze komunikovat len s ovladacom, ne so zariadenim. Ked chces komunikovat priamo so zariadenim, musis si napisat ovladac.

Ked ma zariadenie standardnu fcionalitu a teda aj standardny ovladac, napr. klavesnica, tak sa o vsetko stara Win, a aplikaciam dava len spravy o stlacenych klavesach, pricom je uplne jedno ci ta klavesnica je na USB alebo na mimozemskom interface, to je starost ovladaca.
Ak ovladac vytvara nejake standardne zariadenie, napr. UART, tak normalne otvoris UART pomocou CreateFile, zasa ta nezaujima ci ten UART je na PCI alebo USB alebo mimozemskom interface, to je problem ovladaca. Na strane aplikacie ten ovladac vytvoril standardne UART device.

Ak mas nejaky speci ovladac ktory nema standardnu fcionalitu, tak je treba najst si popis k danemu ovladacu a komunikovat s nim pomocou DeviceIoControl fcie a spravnych IOCTL_ kodov (ich definicia zavisi od ovladaca).

Právě že to chci udělat ve třídě HID, kde ovladač netřeba, protože napsat si vlastní ovladač, na to si opravdu netroufnu (zatím). Mě jde spíš o to, jak si v softu nalézt připojené USB zařízení a začít do něj odesílat data nebo je od něj přijímat. Nebude se jednat o závratný velikosti dat (na to ani není HID třída specifikovaná), komunikace bude jen s několika málo bity.

Ten článek jsem samozřejmě četl. Automator jsem si stáhl také, pro inspiraci dobrý - je psaný v C++. Problém bych viděl spíš v hledání USB zařízení podle VID a PID, protože pokud budu mít k počítači ppřipojené dvě zařízení se stejným VID a PID, tak mi to jednoduše nerozpozná. Hledání podle VID a PID ano, ale hledat ještě podle nějakého dalšího parametru, třeba podle jména.

Ak to su uplne stejne zariadenia tak programy zvycajne maju v nastaveniach alebo rovno v dialogu vyber ze s ktorym sa ma pracovat (priklad program co daco robi s diskom - vyberes si najprv v programe ze ktory disk zo zdetekovanych).
Ak su to odlisne zariadenia (odlisna fcia) tak je lepsie dat im odlisne PID. Pripadne este za tym mozno je nejake subdevice ID ale neviem zhlavy co tam ma HID device jake moznosti.

To s tym C# a WinAPI som asi tresol blbost, z C# asi nemozes volat rovno WinAPI, nepouzivaj C# hovadinu ale rob to v C++

Ta fcia vracia toto
https://msdn.microsoft.com/en-us/library/windows/h ardware/ff538868%28v=vs.85%29.aspx
VendorID
Specifies a HID device's vendor ID.
ProductID
Specifies a HID device's product ID.
VersionNumber
Specifies the manufacturer's revision number for a HIDClass device.
t.j. mozes si v roznych zariadeniach drbnut trebars roznu verziu, ak maju odlisnu funkcnost.

BTW. ta fcia neni nic ine ako poslatie kodu IOCTL_HID_GET_COLLECTION_INFORMATION ovladacu hidneco.sys, o tom som pisal na zaciatku, aby si mal predstavu ze kam to leze :) Tie IOCTL_ kody su specialne pre kazdy ovladac. hid ovladac pozna tieto (nalavo je zoznam) https://msdn.microsoft.com/en-us/library/windows/h ardware/ff541092%28v=vs.85%29.aspx

Co sa tyka C#, pozri si ten link na kniznicu C# co som daval vyssie, ak to musi byt v C# (ja s C# nerobim je to podla mna totalna kravina co potrebuje 500MB framework, podla mna aplikacia ma mat 100kB a nepotrebovat nic viac :)

Ano ta library moze byt tiez dobra.

VID je vendor ID, malo by byt jedinecne vyrobca si to ma kdesi asi registrovat u nejakej organizacie, PID si voli vyrobca sam (product ID). Za normalnych okolnosti sa uz nacitavanie ovladaca (.sys) riadi tymito dvomi vecami, ku kazdemu ovladacu (.sys) je aj .inf subor, v ktorom je napisane ze pre ktore VID a PID ten ovladac patri, a Win ked zdetekuje nove device hlada spravny ovladac ktory ma v .inf tieto hodnoty. Plati aj pre PCI zariadenia atd.

V pripade HID device neviem zhlavy jak Win zisti to, ze ma nacitat HID ovladac, zrejme aj u USB existuje nejake classID podobne jak u PCI, a podla toho Win vie ze to je HID device a ze staci nacitat univerzalny hid ovladac. A nemalo by to byt zavisle na VID a PID. Akurat by si nemal pouzivat nejake VID nejakeho intelu, aby win nenacitaval nejake divne ovladace :-D Principialne ale myslim ze PID mozes menit.
Dalsia vec ktoru urcite mozes menit je ta verzia, podla toho si mozes tiez odlisovat zariadenia, aj ked maju stejne VID a PID. Ta fcia HidD_GetAttributes ti vrati aj verziu (som ti daval link na tu strukturu teraz vyssie). Verziu a aj VID a PID si definujes v tom atmeli v USB stack kode kdesi bude urcite definicia na to. Tieto vsetky 3 jpodnoty vidis aj v spravci zariadeni, obrazok napr tu http://stackoverflow.com/questions/12567023/how-to -know-usb-device-hid-and-pid, si to mozes skontrolovat ze jak sa hlasi ten atmel aj bez aplikacie.

Zpět do poradny Odpovědět na původní otázku Nahoru