Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programowanie urządzenia via USB

26 Paź 2006 09:29 2633 7
  • Poziom 22  
    Witam,
    Sytuacja wygląda tak:
    -mam aparat foto współpracujący z komputerem via usb
    -aparat obsługiwany jest przez program do obróbki i ściągania zdjęć przy ustawieniach mass storage
    -jest również obsługiwany przez program sterujący robieniem zdjęć (zdalne sterowanie) przez usb na ustawieniach PTP.
    -oba programy korzystają w komunikacji ze swoich dedykowanych sterowników
    chciałbym:
    w delphi zacząć pisać program do obsługi aparatu i szczerze mówiąc nie wiem jak się do tego zabrać.
    Czy mógłby mi ktoś poradzić jakąś stronę, publikacje, gdzie w miarę łopatologiczny sposób opisana jest współpraca Delphi<->sterowniki usb??
    Jak się do tego zabrać?
  • Poziom 31  
    Witam

    Problem zasadniczy czy chcesz napisać sterownik do USB czy program do sterowania aparatu. Co do USB to, o ile się nie mylę, jest widziany jak jeden z portów szeregowych i chyba nie ma co tam kopać natomiast co do pisania samego oprogramowania do obsługi to pojawia się problem innego typu mianowicie nie znasz komend sterujących.
    Tak na logikę czy to będzie RS232 czy 485, USB czy GPIB bez znajomości komend w danym systemie nic nie zrobisz. Jak się mylę to mnie poprawcie.

    --
    pozdrawiam
  • Poziom 22  
    Jest urządzenie, sterownik, program. Ja chcę spróbować napisać własny program i zastąpić oryginalny. Wszystko po to żeby właśnie przetrenować protokół transmisji.
    Urządzenie jest wykrywane przez system, ma określone własne identyfikatory VID i PID i chyba można się do tego dobrać z poziomu Delphi poprzez funkcje api biblioteki setupapi.dll. Ale to tylko jeśli chodzi o identyfikację i wykrycie urządzenia, a co potem??
  • Poziom 15  
    Program komunikuje się z aparatem za pomocą odpowiedniego protokołu (zestawu komend) i nie znając go raczej nic nie zrobisz.
    Można spróbować przechwycić dane wysyłane/odbierane przez port do/z aparatu i spróbować rozgryźć protokół. Istnieją programy do "pdsłuchiwania" transmisji po konkretnym porcie. Dla RS temat był wałkowany, sam musiałem kiedyś używać czegoś podobnego.
    http://www.serial-port-communication.com/sniffer-activex/
    https://www.elektroda.pl/rtvforum/topic141643.html.
    Dla usb znalazłem w googlach m.in. coś takiego
    http://sourceforge.net/projects/usbsnoop/
    http://benoit.papillault.free.fr/usbsnoop/doc.php.en
    Pozdrawiam
  • Poziom 22  
    Dzięki za rady, ale z rozpracowaniem protokołu transmisji mam nadzieję sobie poradzić (własnie też przez znalezione przeze mnie monitory usb). W tym momencie trudniejsze jest nie zapisanie samej ramki własciwych danych/komend, ale odkrycie gdzie i jak zapisać cokolwiek, jak wysłać to do urządzenia, jakiej funkcji API (bo podejrzewam, ze przez API to się będzie odbywać) użyć. Nie mam na razie pojęcia, jak odwołać się do urządzenia, a to nie jest takie proste jak prze rs :(
  • Poziom 18  
    Witaj

    Proponowałbym takie podejście:
    Zbierz maksymalną ilość informacji o protokole transmisji między aparatem i kompem. Potem odinstaluj oryginalne sterowniki. Zainstaluj jakiś Generic Driver (np. LibUSB-Win32 - opensource albo WinDriver - komercyjny ale dostępny jako trial) i przy wykrywaniu nowego sprzętu wskaż mu ten Generic Driver. Będziesz miał wygodny dostęp do wszystkich zasobów USB aparatu : deskrytprów, konfiguracji, end-pointów itd. przez dobrze udokumentowanego DLL-a. I wtedy rozwijać swój sofcik aż okaże się lepszy od oryginału :D

    powodzenia
  • Poziom 22  
    Jeszcze takie małe pytanko przed startem z próbami - po podłączeniu urządzenia do portu usb system wykrywa je i żąda zainstalowania sterownika. Nie wiem jak to wygląda przed zainstalowaniem sterownika (bo już miałem zainstalowany zanim zacząłem sniffować usb), ale po podłączzeniu urządzenia następuje seria transmisji do i z urządzenia. Lecą sobie pakiety identyfikacyjno/konfiguracyjne.
    Czy widział ktoś opisaną gdzieś strukturę takich pakietów konfiguracyjnych? Czy pakiety te mają jakiś standard? Nie sądzę żeby były indywidualne dla każdego rodzaju urządzenia i podejrzewam, że rozpoznanie podłączonego urządzenia, sprawdzenie czy jest już do niego sterownik, czy urządzenie pracuje np. na własnym zasilani, czy nie - dokonywane jest chyba raczej z poziomu systemu. Dopiero potem obsługa, czyli własciwa transmisja pakietów danych, rozkazów, komend przekazywana jest przez system do dedykowanego sterownika. Czy tak jest? Dobrze kombinuję?

    Witek