[ jumper2high @ 28.05.2009. 16:58 ] @
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++).
[ kiklop74 @ 28.05.2009. 20:23 ] @
U ovom slucaju DDK nema alternative
[ jumper2high @ 28.05.2009. 21:40 ] @
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"....
[ Mihajlo Cvetanović @ 28.05.2009. 22:31 ] @
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
[ jumper2high @ 28.05.2009. 23:27 ] @
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.
[ Mihajlo Cvetanović @ 29.05.2009. 10:55 ] @
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.
[ jumper2high @ 29.05.2009. 11:10 ] @
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.
[ Mihajlo Cvetanović @ 29.05.2009. 11:24 ] @
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.
[ jumper2high @ 29.05.2009. 11:49 ] @
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.
[ kiklop74 @ 30.05.2009. 00:23 ] @
Ocigledno nisi dobro trazio

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

[ jumper2high @ 30.05.2009. 17:12 ] @
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).


[ Beban @ 01.06.2009. 12:21 ] @
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.