jak w temacie... czy pojawiło się coś open sourceowego na temat USB?
- posted
15 years ago
jak w temacie... czy pojawiło się coś open sourceowego na temat USB?
identyfikator: 20040501 schrieb:
a mało jest?
Waldek
identyfikator: 20040501 pisze:
A co byś chciał? Myszkę? ;) Czy raczej z kategorii "open hardware"?
USB jest wystarczająco dobrze rozpracowane w każdym liczącym się systemie open sourcowym.
chodzi mi o coś bardziej zjadliwego niż przykłady na stronach atmel i microchip... bo wymienione przykłady są tak zagmatwane, że nie sposób ich zaadoptować do własnych potrzeb...
to uzyj FTDI, Vinculum? napisz co to ma byc KONKRETNIE
konkretnie to nic, ma być jak najprostsze wysyłanie i odbieranie bajtów po USB...
Ja do tego używam procesorków SiLabs C8051F34x i klasy HID. Działa znakomicie, max. 64kB na sekundę - mi wystarcza w zupełności.
SiLabs daje wzór firmware do klasy HID, od strony Windows po prostu czyta się i pisze do pliku. Na początku było z tym trochę zabawy, ale teraz to prosta sprawa.
Pozdrowienia, MKi
a mógłbyś podać jakieś namiary w internecie na kod źródłowy?
Czyli rozumiem ze USB DEVICE.. czemu nei wezmiesz FTDI ew CP210x z SiLabs to drugie kosztuje kilka zl i nie potrzeba zadnych zewn elementow.. i kilka I/O ma...
identyfikator: 20040501 schrieb:
ja używam FT232R i jestem zadowolony. Jest do tego darmowa biblioteka, parę nóżek na IO ma no i RS232.
Waldek
Waldemar Krzok pisze:
A do prostych rzeczy wystarczy nawet super tanie rozwiązanie:
Użytkownik "identyfikator: 20040501" snipped-for-privacy@onet.eu napisał w wiadomości news:g140ld$oie$ snipped-for-privacy@atlantis.news.neostrada.pl...
Np., żeby wysyłał i odbierał dane z PenDriva ?
właśnie te przykłady na stronach atmela i microchipa bazują na implementacji jakichś dziwnych urządzeń usb jak pendrive... a mi chodzi o zwykłe wysyłanie i odbieranie z endpointu... no niestety ale wiąże sie to z napisaniem sterownika... dlatego pytałem...
identyfikator: 20040501 pisze:
Na tej stronie jest wykaz not aplikacyjnych:
Niestety nie ma prawie nic od strony Windows, tego musiałem poszukać sam (polecam Microsoftowy MSDN). Sztuką jest odnaleźć uchwyt do pliku - urządzenia, potem już po prostu pisze się/czyta z pliku.
Inne noty na temat USB też są pouczające, można tworzyć nie tylko HID. Jedynba ograniczenie, to brak High speed, ale mi nie przeszkadza.
Pozdrowienia, MKi
a nie zdradzisz nam jak uzyskać ten uchwyt? i tak dzięki za odzew.
Użytkownik "identyfikator: 20040501" snipped-for-privacy@onet.eu napisał w wiadomości news:g16p6d$ji6$ snipped-for-privacy@atlantis.news.neostrada.pl...
Witam,
chyba słabo szukałeś na Microchipie. Tu masz wszystko:
Jest również "proste wysyłanie bajtów do endpointu". Znajdziesz też opis jak "złapać uchwyt do urządzenia". Są biblioteki dla Windowsa. Trzeba trochę wysiłku. Inaczej się nie da.
Tu masz gotowy kit:
Pozdrawiam, Mariusz Łacina
To jest tak (ja piszę w Delphi, więc może być trochę dziwności dla tych, co tylko C znają). Podaję tylko nazwy funkcji i kolejności wywołań, resztę (typy i struktury) znajdziesz w MSDN:
Funkcja HidD_GetHidGuid(HidGuid) zwraca GUID dla klasy HID.
Z tym wołasz DevInfo := SetupDiGetClassDevs(@HidGuid,nil,0,DIGCF_PRESENT or DIGCF_DEVICEINTERFACE)
i dostajesz uchwyt do zbioru informacji o urządzeniach (w naszym wypadku klasy HID)
Teraz wołasz po wielokroć
SetupDiEnumDeviceInterfaces(DevInfo,nil,@HidGuid,x,devData)
dla kolejnych wartości x począwszy od zera. Dopóki jest kolejne urządzenie, funkcja zwraca true, jak wyskoczysz poza zakres, zwróci false.
Jeśli zwróci true, w DevData masz kolejny uchwyt, z którym wołasz dwukrotnie SetupDiGetDeviceInterfaceDetail(DevInfo,@devData,nil,0,BytesReturned,nil) SetupDiGetDeviceInterfaceDetail(DevInfo,@devData,DetailData,BytesReturned,BytesReturned,nil)
za pierwszym razem w BytesReturned zwraca potrzebną wielkość pamięci, którą trzeba zaalokować (DetailData) i podać w drugim wywołaniu.
Jednym z elementów struktury DetailData jest DevicePath - nazwa pliku, który można otworzyć przez
hDevice := CreateFile(DetailData.DevicePath,0,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0) ;
Teraz należy wywołać
HidD_GetAttributes(hDevice,attr)
i w strukturze attr masz dwa elementy - VendorId i ProductId i te porównujesz z VID i PID swojego urządzenia. Jeśli są inne, zamykasz plik i wołasz SetupDiEnumDeviceInterfaces dla kolejnego urządzenia, jak takie same, jesteś w domu - trzeba zapamiętać nazwę DetailData.DevicePath.
Możesz odczytać informacje o urządzeniu funkcjami HidD_GetProductString HidD_GetManufacturerString HidD_GetSerialNumberString
Po zakończeniu wszystkiego trzeba jeszcze pozwalniać pamięć i wywołać
SetupDiDestroyDeviceInfoList(DevInfo) ;
Prościutkie, no nie? Może są łatwiejsze sposoby, ja nie znalazłem.
Aby czytać i pisać, plik otwierasz normalnie:
fDevHandle := CreateFile(fDevicePath,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0 );
Uwaga na przedostatni parametr - to jest trudniejsza obsługa czytania/pisania do pliku, ale proces nie wiesza się przy czekaniu na urządzenie. To zresztą osobna bajka :) ja używam CreateEvent i WaitForSingleObject - wyskakuje po okreslonym timeoucie.
Pisać i czytać trzeba w blokach po n+1 bajtów, gdzie n to wielkość pakietu danego endpointa. Pierwszy bajt to (zdaje się) numer endpointa (piszę "zdaje się", bo ja używam tylko po jednym do pisania i czytania i wstawiam tam zawsze zera), a w pozostałych bajtach idą dane.
Uff, mam nadzieję, że wystarczy. Wygląda groźnie, ale jak napisałem bibliotekę eksportującą podstawowe funkcje, to zajrzałem do niej dopiero dziś, odkąd powstała.
Pozdrowienia, MKi
dzięki, trochę mi zajmie przetrawienie tego, a czy te nazwy funkcji są specyficzne dla Delphi czy są to standardowe nazwy API Windowsa? czy Ty albo Ktoś inny mógłby wskazać jeszcze gdzie w MSDN znajdują się opisy tych funkcji? bo ostatnio szukałem czegoś o sterownikach usb, ale nie wiele znalazłem... a jak już coś, to w bardzo skróconej formie... podobno od XP+SP2 można tworzyć sterowniki w user space... szukałem interfejsu, jakby Ktoś widział gdzieś opis to też proszę o cynk.
Wszystko API. Tylko składnia Delphiowa, ale jak znasz C, to lektura msdn-a Cię naprostuje.
Normalnie, wklepujesz nazwę funkcji do wyszukiwarki w msdn-nie. Najczęsciej można też nazwę funkcji zapodać góglowi, wpis z msdn-a wyskoczy zazwyczaj na pierwszym miejscu. Na tyle to nietypowe, że gdzie indziej o tym nie piszą :/
Ja zaczynałem od
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.