RTV forum PL | NewsGroups PL

Nowe projekty open source w dziedzinie USB - co nowego na horyzoncie?

ruszyło coś w dziedzinie USB?

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Nowe projekty open source w dziedzinie USB - co nowego na horyzoncie?

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

elektroda NewsGroups Forum Index - Elektronika Polska - Nowe projekty open source w dziedzinie USB - co nowego na horyzoncie?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map