ruszyło coś w dziedzinie USB?

jak w temacie... czy pojawiło się coś open sourceowego na temat USB?

Reply to
identyfikator: 20040501
Loading thread data ...

identyfikator: 20040501 schrieb:

a mało jest?

Waldek

Reply to
Waldemar Krzok

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.

Reply to
Adam Dybkowski

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...

Reply to
identyfikator: 20040501

to uzyj FTDI, Vinculum? napisz co to ma byc KONKRETNIE

Reply to
Greg(G.Kasprowicz

konkretnie to nic, ma być jak najprostsze wysyłanie i odbieranie bajtów po USB...

Reply to
identyfikator: 20040501

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

Reply to
MKi

a mógłbyś podać jakieś namiary w internecie na kod źródłowy?

Reply to
identyfikator: 20040501

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...

Reply to
Greg(G.Kasprowicz

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

Reply to
Waldemar Krzok

Waldemar Krzok pisze:

A do prostych rzeczy wystarczy nawet super tanie rozwiązanie:

formatting link
żna na tym zrobić dużo:
formatting link

Reply to
Adam Dybkowski

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 ?

Reply to
lwh

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...

Reply to
identyfikator: 20040501

identyfikator: 20040501 pisze:

Na tej stronie jest wykaz not aplikacyjnych:

formatting link
Ja bazowałem na AN249 (Human Interface Device Tutorial) - z kodem źródłowym firmware'u. To jest przegotowane dla Keil'a, ale w Silabsowym forum jest dostępna przeróbka na SDCC. (W zasadzie jedyne, co trzeba zmieniać w Keil->SDCC to zmiana kolejności bajtów w słowach).

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

Reply to
MKi

a nie zdradzisz nam jak uzyskać ten uchwyt? i tak dzięki za odzew.

Reply to
identyfikator: 20040501

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:

formatting link
"MCHPFSUSB Framework "

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:

formatting link
Możesz z marszu zmodyfikować pod własne zastosowania.

Pozdrawiam, Mariusz Łacina

Reply to
invalid unparseable

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

Reply to
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.

Reply to
identyfikator: 20040501

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

formatting link
Pozdrowienia, MKi

Reply to
MKi

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.