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.