RTV forum PL | NewsGroups PL

Jak przyspieszyć komunikację z klawiaturą USB w Arduino DUE bez blokowania?

Klawiatura USB i jej obsługa

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak przyspieszyć komunikację z klawiaturą USB w Arduino DUE bez blokowania?

Akond ze skwak
Guest

Wed Feb 26, 2014 11:33 pm   



Jest problem ...
Mianowicie klawiatura USB podłączona do procesora SAM3X przez port native
( płyta Arduino DUE).

Wiem ... Arduino - kupa szmelcu weź się człowieku za coś innego ...

Ale może ktoś jednak się z tym bawił.
W bibliotekach i dostępnych przykładach do obsługi owej klawiatury
użyta zostaje klasa HostUSB i KeyboardController w taki sposób, że w pętli
głównej programu
wywołuje się metodę HostUSB.Task() która odpowiada za komunikację i ruch na
USB.

Wszystko działa pięknie ( w przykładach) , pod warunkiem, że się za bardzo
nie skomplikuje projektu.

Problem polega na tym, że po podłączeniu klawiatury do układu i jej
zidentyfikowaniu przez system
wspomniana metoda Task() czeka na naciśniecie klawisza i blokuje proces.
Istnieje stała czasowa TIME_LIMIT 5 sekund ... czyli co 5 sek dostaję
informację, że nic się nie dzieje.
Jeżeli nacisnę klawisz to oczywiście od razu jest reakcja.

Patrząc do środka procedury widzę moment zatrzymania w pętli ograniczonej
przez timeout 5sek
w której jest funkcja UHD_Pipe_Is_Transfer_Complete odbierająca dane z
klawiatury.

Zmniejszenie limitu timeout poniżej 100 ms powoduje błąd inicjowania
urządzenia.
A i tak to jest jak dla mnie za duża strata czasu.

Próbowałem metodę Task uruchamiać z przerwania albo innego wątku Shedulera
ale nic to nie daje.
Po prostu - gdy z klawiaturą nic się nie dzieje Task czeka 5 sekund
obojętnie gdzie by jej nie wsadzić.

Jedynie co mi przychodzi do głowy to rozpisanie tej klasy na drobne i
włączenie po kawałku do pętli głównej programu.

.... albo poszukanie sposobu aby mój program uruchamiany był z wnętrza klasy
HostUSB ... to może być rozwiązanie .
Coś podobnego jak USB na ATmega8.

Pozdr.

Akond ze skwak
Guest

Thu Feb 27, 2014 7:19 pm   



No i udało się ...

Do najbardziej zagnieżdżonej pętli wstawiłem procedurę
UsbUserCalback, wyprowadziłem ją na zewnątrz.
W pętli głównej uruchamiam HustUSB.Task, a to co tam miałem
przeniosłem do UsbUserCalback.
Klawiatura działa i cała reszta również.

Pozdr. AzS


PS.
Im dłużej się tym bawię (Ardiuno DUE) tym bardziej mi się podoba.
I nie jest to kryptoreklama ...

tusk, donald tusk
Guest

Thu Feb 27, 2014 8:03 pm   



skąd zassałeś biblioteki?

Akond ze skwak
Guest

Thu Feb 27, 2014 8:14 pm   



Quote:
skąd zassałeś biblioteki?

Z linków na forum Arduino.

np :

http://arduino.cc/en/Reference/USBHost#.Uw-OTWeYa70

Akond ze skwak
Guest

Thu Feb 27, 2014 8:26 pm   



Quote:
skąd zassałeś biblioteki?

Sorry ... akurat HostUsb ( i wiele innych) instaluje się razem z IDE

http://arduino.cc/en/Main/Software#.Uw-PemeYa70

elektroda NewsGroups Forum Index - Elektronika Polska - Jak przyspieszyć komunikację z klawiaturą USB w Arduino DUE bez blokowania?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map