identyfikator: 20040501
Guest
Wed May 21, 2008 4:53 pm
jak w temacie... czy pojawiło się coś open sourceowego
na temat USB?
Waldemar Krzok
Guest
Wed May 21, 2008 5:27 pm
identyfikator: 20040501 schrieb:
Quote:
jak w temacie... czy pojawiło się coś open sourceowego na temat USB?
a mało jest?
Waldek
Adam Dybkowski
Guest
Wed May 21, 2008 8:50 pm
identyfikator: 20040501
Guest
Thu May 22, 2008 8:59 am
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...
identyfikator: 20040501
Guest
Thu May 22, 2008 3:39 pm
Quote:
napisz co to ma byc KONKRETNIE
konkretnie to nic, ma być jak najprostsze wysyłanie i
odbieranie bajtów po USB...
MKi
Guest
Thu May 22, 2008 5:18 pm
Quote:
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
identyfikator: 20040501
Guest
Thu May 22, 2008 5:52 pm
a mógłbyś podać jakieś namiary w internecie na kod
źródłowy?
Waldemar Krzok
Guest
Thu May 22, 2008 6:58 pm
identyfikator: 20040501 schrieb:
Quote:
napisz co to ma byc KONKRETNIE
konkretnie to nic, ma być jak najprostsze wysyłanie i odbieranie bajtów
po USB...
ja używam FT232R i jestem zadowolony. Jest do tego darmowa biblioteka,
parę nóżek na IO ma no i RS232.
Waldek
Adam Dybkowski
Guest
Thu May 22, 2008 8:45 pm
Waldemar Krzok pisze:
Quote:
konkretnie to nic, ma być jak najprostsze wysyłanie i odbieranie
bajtów po USB...
ja używam FT232R i jestem zadowolony. Jest do tego darmowa biblioteka,
parę nóżek na IO ma no i RS232.
A do prostych rzeczy wystarczy nawet super tanie rozwiązanie:
http://www.obdev.at/products/avrusb/index.html
Można na tym zrobić dużo:
http://www.obdev.at/products/avrusb/prjobdev.html
http://www.obdev.at/products/avrusb/projects.html
--
Adam Dybkowski
http://dybkowski.net/
Uwaga: przed wysłaniem do mnie maila usuń cyfry z adresu.
identyfikator: 20040501
Guest
Fri May 23, 2008 4:50 pm
Quote:
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...
MKi
Guest
Sun May 25, 2008 7:54 pm
identyfikator: 20040501 pisze:
Quote:
a mógłbyś podać jakieś namiary w internecie na kod źródłowy?
Na tej stronie jest wykaz not aplikacyjnych:
http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/en/mcu_applications_appnotes.htm
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
identyfikator: 20040501
Guest
Sun May 25, 2008 8:36 pm
a nie zdradzisz nam jak uzyskać ten uchwyt? i tak
dzięki za odzew.
MKi
Guest
Mon May 26, 2008 6:16 pm
Quote:
a nie zdradzisz nam jak uzyskać ten uchwyt? i tak dzięki za odzew.
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
identyfikator: 20040501
Guest
Thu May 29, 2008 1:27 pm
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.
MKi
Guest
Thu May 29, 2008 5:07 pm
Quote:
dzięki, trochę mi zajmie przetrawienie tego, a czy te nazwy funkcji są
specyficzne dla Delphi czy są to standardowe nazwy API Windowsa?
Wszystko API. Tylko składnia Delphiowa, ale jak znasz C, to lektura
msdn-a Cię naprostuje.
Quote:
czy Ty
albo Ktoś inny mógłby wskazać jeszcze gdzie w MSDN znajdują się opisy
tych funkcji?
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ą :/
Quote:
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.
Ja zaczynałem od
http://www.lvr.com/hidpage.htm
Pozdrowienia,
MKi