[BCB] USB i Win32

0

Gdzie mogę znaleźć informacje na temat transmisji danych przez USB? Chodzi mi o taką fukcjonajność: 1. otwarcie/zamknięcie portu USB, 2. wysłanie bajtu/ciągu bajtów na port USB, 3. odebranie bajtu/ciągu bajtów z USB. Wszystko w oparciu o DirectX. Przyznam się że z DirectX jeszcze nie miałem do czynienia ;P . Informacje na temat obsługi USB z Win32 też mile widziane. [diabel]

0

http://szczawik.psq.fm.interia.pl/winhid%20(masm32).zip

Zrobione w asemblerze (samymi funkcjami Winapi) i tylko dla USB HID, ale dla zwykłych USB robi się analogicznie. DirectX nie ma nic do robienia transmisji na USB. Jedynie potrafi obsługiwać funkcjonalność urządzeń USB, ale tylko określonego typu - nie traktuje ich bezpośrednio jako urządzenie USB, ale po prostu jako urządzenie udostępniające określoną funkcjonalność.

0

Ok. W takim razie jak z Win32 wysyłać i odbierać bajty przez USB? Gdzie znajdę jakąkolwiek dokumentację?

0

USB to nie port COM

sterownik generic jest na

libusb.sourceforge.net

i wystarczy do prostych zastosowan.

aby wysylac i odbierac przez USB to druga strona tez musi rozumiec ta transmisje (najczesciej mikroprocesor, tu za bardzo nie da sie wpakowac LED'a, dopasowanie napiec 3.3v czy 5v etc.).

polecam
usb.org
i windows DDK

ostatnio pojawila sie ksiazka (helion albo pwn ?) na temat transmisji USB (nie wiem jak z jej jakoscia - nie czytalem)

0
reichel napisał(a)

aby wysylac i odbierac przez USB to druga strona tez musi rozumiec ta transmisje (najczesciej mikroprocesor, tu za bardzo nie da sie wpakowac LED'a, dopasowanie napiec 3.3v czy 5v etc.).

mam urządzenia które mają swoje protokoły komunikacji tak więc to nie jest problem. potrzebuję tylko wiedzieć jak znaleźć ten port, otworzyć go, wysłać dane, pobrać dane, zamknąć port, wszystko w win32

0

I nie ma do tego sprzetu sterownikow ?

jesli tak to libusb.sourceforge.net

jest wersja win32 libusb

http://libusb-win32.sourceforge.net

w internecie mozna odnalezc przyklady (najczesciej kamer internetowych dla ktorych zabraklo sterow dla linuxa)

0
reichel napisał(a)

I nie ma do tego sprzetu sterownikow ?

nie ma sterowników bo ten sprzęt zrobił kolega z działu elektroniki, no i właśnie ja mam zrobić te sterowniki :D

0

A czy kolega umiescil obsluge USB w swoim sprzecie ? Jesli tak to bedzie to proste za pomoca podanych linkow. Moze uzyl jakies kostki do ktorej sa juz sterowniki.

0
reichel napisał(a)

A czy kolega umiescil obsluge USB w swoim sprzecie ? Jesli tak to bedzie to proste za pomoca podanych linkow. Moze uzyl jakies kostki do ktorej sa juz sterowniki.

Kolega zrobił tylko tyle że teraz urządzenie zamiast przez RS232 gada przez USB, żadnego plug&play, tylko prosta komunikacja na zasadzie wymiany ramek naszego protokołu. Tak więc o użyciu gotowych sterowników nie może być mowy. Ale już spoko, gdzieś tam wyczytałem z USB gada się identycznie jak z RS232, znaczy przez CreateFile. ;)

0

Tak samo jak RS nie sadze chociazby

http://www.lvr.com/usbfaq.htm (i nie tylko tu)

Ten sterownik co podalem wlasnie do tego sluzy aby miec juz jakies stery (nie wazne do czego) i wlasnie dzieki niemu mozna rozmawiac z czyms co jest podpiete do USB. Jestem ciekawy jakie jest rozwiazanie z CreateFile, ktore Ty odnalazles ?

0

Ze wszystkimi urządzeniami w systemie można się komunikować przez CreateFile. Pytanie tylko, ile kroków trzeba zrobić, aby pozyskać nazwę urządzenia i je poprawnie zainicjować. (Polecam rzut okiem na ten mój kod do HIDa).

0

Nie potrzeba inicjalizacji, urządzenie może z powodzeniem pracować samo, ma swój wyświetlacz LCD, klawisze itd. Całe sterowanie urządzeniem odbywać się będzie za pomocą ramek protokołu, ramki wyglądają mniej-wiecej tak:

0xaa - nagłowek
0x01 - adres urzadzenia
0x5f - grupa urzadzenia
0xfe - grupa logiczna urzadzenia
0x78 - adres sterownika (softwareowego w kompie)
0x55 - kod fukcji
0x00
0x00
0x00
0x00 - pole danych
0x43 - CRC

po otrzymaniu takiej ramki, urządzenie daje odpowiedź takim samym protokołem i to wszystko, system nawet nie bedzie wiedział że ma coś podłączone ;P .

Całe zrobienie komunikacji z tym urządzeniem sprowadza się do:

  1. zrobienie klasy sterownika urządzenia, w tym przypadku będzie to TPVCMADevice
  2. dodanie do naszego serwera komunikacji klasy TPVUSBPort która obsłuży komunikację po USB, nasz serwer już ma klasę TPVPort która obsługuje RS232
  3. lekka przeróbka klasy TPVCommSettings tak żeby przechowywała info o tym że komunikacja ma odbywać się przez USB, serwer już sam będzie wiedział co z tym zrobić.

i to wsio, c++ jest piękny :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1