Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

C++ i USB - potrebna pomoc

[es] :: C/C++ programiranje :: C++ i USB - potrebna pomoc

[ Pregleda: 2302 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon C++ i USB - potrebna pomoc28.05.2009. u 16:58 - pre 181 meseci
Potrebna mi je pomoc oko pravljenja aplikacije za interakciju sa namenskim HID-om spojenim na USB port.

Program bi trebao da salje par bajtova ka HID-u, i da "cita" par poslatih bajtova od istog HID-a. Trazio sam odgovore svuda po netu, i uglavnom zavrsavao na Microsoft-ovom sajtu gde se nalazi WDK/DDK za Visual C++. Ima li neko predlog kako bih mogao da ovo uradim, po mogucstvu bez upotrebe microsoft-ovog DDK-a jer je on sam po sebi kabast i komplikovan, a i nemam iskustva sa Visual C++. (Koristio sam eclipse i CodeBlocks za programiranje u C-u i C++).
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
200.49.157.*

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: C++ i USB - potrebna pomoc28.05.2009. u 20:23 - pre 181 meseci
U ovom slucaju DDK nema alternative
Tko leti vrijedi
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ i USB - potrebna pomoc28.05.2009. u 21:40 - pre 181 meseci
Ok, a mozes li me posavetovati oko toga sta tacno (i odakle) da nabavim, posto DDK zapravo vise ne postoji. Jedino sto sam uspeo da nadjem je "Windows 7 WDK"....
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: C++ i USB - potrebna pomoc28.05.2009. u 22:31 - pre 181 meseci
Ako ti već imaš neki uređaj koji podržava HID, i sve što treba je da komuniciraš s njim preko HID interfejsa onda ti ne treba DDK. Windows ima ugrađen HID drajver. Manji problem je komunikacija (koliko se sećam komuniciraš kao s pajpom, i samo čitaš blokove od po recimo 63 bajta). Veći problem je doći do imena tog fajla. Ime tog fajla sadrži u sebi VID (vendor ID), i PID (product ID), i još nešto, i nalazi se negde u registru, ali ne sećam se sad kako se enumerišu uređaji. Pogledaj na ovoj stranici, možda ima nešto interesantno:

http://www.lvr.com/hidpage.htm
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ i USB - potrebna pomoc28.05.2009. u 23:27 - pre 181 meseci
Mihajlo,
U pitanju je "custom built" HID uredjaj, odnosno PIC mikrokontroler koji se ponasa kao HID.
Sve sto mi treba je da par bajtova - celih 8-bitnih brojeva, posaljem ka Mikrokontroleru, i isto tako nekoliko drugih bajtova "procitam" sa njega.

Zaista mi nije bitno kako, preko cega, samo bi idealno bilo da bude CPP, jer pomenute brojeve preuzimam iz druge aplikacije kroz IPC, pa mi nije svejedno, jer sa time imam iskustva u CPP-u, a sa ostalim nemam.


Inace, kroz LVR.com sam prosao jedno milion puta dok nisam namestio Mikrokontroler da radi kako treba. Zaista bi mi pomoglo ako bi mogao malo da pojasnis (ili uputis ka nekim dobrim izvorima) oko toga.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: C++ i USB - potrebna pomoc29.05.2009. u 10:55 - pre 181 meseci
Ja sam softveraš, ne diram ti ja te mikrokontrolere. Kad sam pravio kod koji prima podatke od bar-kod čitača onda sam pošao od HClient demo projekta, (http://msdn.microsoft.com/en-us/library/dd163258.aspx). Bio mi je poznat VID i PID, enumerisao sam sve HID uređaje, i radio sa onim čije sam VID i PID imao.

Ako se tvoj uređaj pridržava HID standarda (ima neko posebno ime za to, ne znam sad) onda ti sledeće funkcije pomažu da ga pronađeš u sistemu: SetupDiGetClassDevs, SetupDiEnumDeviceInterfaces, SetupDiGetDeviceInterfaceDetail. U strukturi SP_DEVICE_INTERFACE_DETAIL_DATA koja se tu negde koristi imaš putanju do HID uređaja koju koristiš s običnim CreateFile.

Ako se tvoj uređaj ne pridržava HID standarda onda zaista moraš da napraviš drajver za njega, i onda ti treba WDK.
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ i USB - potrebna pomoc29.05.2009. u 11:10 - pre 181 meseci
Hvala na odgovoru!
Posto sam tek u fazi pravljenja uredjaja, kao i firmware-a za njega i softvera za PC, sve opcije su moguce. Nije mi problem da malo prilagodim jedan deo da bi lakse i bolje radio drugi. Jedini manji problem je sto je sam uredjaj dosta specifican (nije joystick, mis ili tako nesto sto ima vrlo standardne funkcije). U pitanju je CDU (Control and Display Unit) koji ima ~16 dugmica, nekoliko rotacionih prekidaca i 13 7-segmentnih LED displeja koji treba da prikazuju nesto.

E, sad - ideja je bila da jednostavno u mikrokontroleru generisem "kod" instrukcije zavisno od pritisnutog dugmeta, ili pozicije rotacionog prekidaca. Znaci, jedino sto bi uredjaj slao je par "brojeva". To nisu neke genericke funkcije kao sto je Throttle na dzojstiku ili dugme na misu.

Na slican nacin bi trebalo i displej da funkcionise. Znaci da prima seriju cifara od racunara i da ih prikazuje. Sve dok se ove operacije odvijaju najmanje 10 puta u sekundi, sve bi trebalo da izgleda dobro. Ne znam da li se to smatra kao specificni uredjaj koji bi zahtevao sopstveni drajver ili ne.
 
Odgovor na temu

Mihajlo Cvetanović
Beograd

Moderator
Član broj: 37636
Poruke: 1249



+96 Profil

icon Re: C++ i USB - potrebna pomoc29.05.2009. u 11:24 - pre 181 meseci
Mislim da tvoj uređaj može lepo da se uklopi u HID ideologiju, i da dodatno drajverisanje nije neophodno. Možda ćeš imati poteškoća dok ga ne napraviš da podržava HID protokol, a tu ti ne mogu pomoći.
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ i USB - potrebna pomoc29.05.2009. u 11:49 - pre 181 meseci
To je ono sto ni meni nije 100% jasno. Sta se tacno smatra "HID Protokolom" odnosno sta bih morao da uradim da, odnosno koje uslove da ispunim, da bi se on smatrao HID Kompatibilnim. :)

Za sada sam se samo zezao sa malim primerima uz HIDTerminal ili nesto slicno gde mali program salje brojeve ka uredjaju, a ovaj ih vraca uvecane za jedan. To radi kako treba, samo ti programi (za PC) nemaju open source, pa ne mogu ni pogledati kako oni rade odnosno na sta se oslanjaju.
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.fibertel.com.ar.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: C++ i USB - potrebna pomoc30.05.2009. u 00:23 - pre 181 meseci
Ocigledno nisi dobro trazio

Windows 2003 SP1 DDK
http://www.microsoft.com/whdc/devtools/ddk/default.mspx


Tko leti vrijedi
 
Odgovor na temu

jumper2high
2High Jumper

Član broj: 39396
Poruke: 27
*.dynamic.sbb.rs.



+1 Profil

icon Re: C++ i USB - potrebna pomoc30.05.2009. u 17:12 - pre 181 meseci
Sakupio sam jos malo informacija o HID Deskriptorima i "Usage tabelama" koje se cesto vezuju za HID Uredjaje.
Koliko sam ja imao prilike da primetim, deskriptori zapravo samo daju fizicko znacenje (interpretaciju) nekim od brojcanih vrednosti koje razmenjuju HID i racunar, odnosno - recimo ako napravim HID uredjaj sa jednim malim prekidacem, i detaljno definisem tacno cemu sluzi taj prekidac, Windows ce prepoznati njegovu upotrebu, i uredjaj ce raditi bez dodatnog programiranja?

S' druge strane, ako nameravam da pravim neki namenski softver za interakciju (a moram ga praviti), zapravo nije od vitalnog znacaja praviti deskriptore za svaku od vrednosti? (16 dugmica, 13 displeja, nekoliko LED dioda (promenljivi intenzitet) i slicno).


 
Odgovor na temu

Beban
Beograd

Član broj: 6351
Poruke: 39
*.dynamic.sbb.rs.



Profil

icon Re: C++ i USB - potrebna pomoc01.06.2009. u 12:21 - pre 181 meseci
Ovako...

DDK je "malo" promijenjen i sada se zove WDK (Windows Driver Kit). Od njega ne možeš pobjeći da bi uradio to što te interesuje, ali nije strašno; ne moraš se spuštati na nivo kernel drajvera. Možeš "opametiti" i Visual Studio (setuješ putanje) i napraviti exe ili dll za ono što ti treba. Prosto, koristićeš nekoliko funkcija, kao što koristiš i funkcije iz SDK.

Teoretski - sve se radi u 5 koraka - pogledaj ovaj link, to je ono što ti treba:

http://msdn.microsoft.com/en-us/library/ms789877.aspx

Imaš tačno opisano kako dolaziš do DevicePath, a to je ona "budževina" koju ćeš zadati kao argument u CreateFile da bi dobio HANDLE na uređaj. Dalje radiš kao što bi sa nekim fajlom, COM portom ili slično - dakle ReadFile, WriteFile. Potrebno ti je i da znaš veličine buffer-a. Kada dođeš do HANDLE-a na uređaj (kao što ti je opisano u onih 5 koraka), pogledaj funkciju GetDeviceCapabilities kojoj kao argumente predaješ pomenuti HANDLE i pointer na strukturu HIDP_CAPS. Ona će ti strukturu "napuniti" svim i svačim, između ostalog i veličinama input i output report-a, pa ćeš tako znati koliki ti bafer treba.

Moj savjet je da prvo pročitaš nešto o svemu tome, pa da se onda baciš na programiranje. U suprotnom, rizikuješ da kreneš u izmišljanje tople vode.
Dobar izvor informacija je knjiga USB complete, a posebno prateći source code koji je napisan blago rečeno čudno (puca u nekim situacijama, a i sve je strpano u dlg klasu), ali ipak će ti mnogo, ali baš mnogo skratiti lutanje.

 
Odgovor na temu

[es] :: C/C++ programiranje :: C++ i USB - potrebna pomoc

[ Pregleda: 2302 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.