USB Host (a USB multi-device) / USB hub - jak vytvorit
Napsal: 07 říj 2017, 10:06
Zdravim
nevim, kde se vubec zacit ptat, tak to zkusim tady:
Chtel bych pozstavit zarizeni, ktere by na jedne strane fungovalo jako USB host (tedy se do nej pripojil USB Joystick, USB klavesnice ...) a na druhe jako USB device (cili by se pripojilo do PC a tvarilo jako joystick s klavesnici), pricemz by po ceste odchytavalo udalosti z tech USB zarizeni, midifikovalo je a pridavalo vlastni.
Ideal je chytry ovladac s mnoha tlacitky a analogovymi joystiky/potenciometry, do ktereho se pripoji chytry USB Joystick (konkretne Thrustmaster HOTAS Warthog) a USB klavesnice (bezna).
na druhe strane se to pripoji do PC a bude se to tvarit jako Joystick s mnoha osama, tlacitky a Klavesnice.
Mezi tim to pomoci vlastnich tlacitek a potenciometru (ktere bude to cist na klasickych digitalnich/analogovych pinech) a toho USB joystiku a USB klavesnice (a spousty prevodnich tabulek a vzzorcu a jine magie) vypocte stavitrualniho joystiku s mnoha osami a tlacitky a virtualni klavesnice a to bude posilat dal.
Tento modul by umoznoval (napriklad) mit vystupni osu Rychlost, ktera by primarne kopirovala osu Speed z joystiku (pokud by se tato vyrazneji menila (o vic nez nahodny sum), ale zaroven sla pomoci tlacitek nastavit na min/max/predefinovanou hodnotu, nebo meniti o danou hodnotu (zrychleni/zpomaleni o rekneme 20) a tuto hodnotu by drzela, dokud by bud nekdo nestisknul nejakou klavesu, nebo nezatocit ovladacem na joystiku, nebo neposunul potenciometr na zarizeni.
Nebo by umoznoval namapovat na "stisknuti/pusteni klavesy velke C" udalost stisknuti pusteni klavesy male g z USB klavesnice, stistnuti/pusteni buttonu 10 z USB joystiku a stisknuti/pusteni tlacitka pripojeneho k digitalniho pinu 3. (ve smyslu prechod libovolneho z tehto do stavu stisknuto zpusobi, ze virtualni (a pocitaci hlasena) klavesa velke C bude stisknuta, prechod vsech do stavu pusteno bude vyhodnocen jako pusteni virtualni klavesy velke C a takto nahlasen pocitaci). Takze sekvence stisknuti "USB klavesy male g" zpusobi udalost stisknuti virtualni "velke C", nasledne stisknuti USB buttonu 10, pusteni maleho g, stisknuti tlacitka na pinu 3, pusteni buttonu 10 nehlasi nic, protoze porad je "virtualni velke C" nejak drzenu a teprve pusteni i toho pinu zpusobi nahlaseni pocitaci "velke C " bylo pusteno.
Tuto vnitrni logiku si dokazu programove osetrit, ale nevim jak osetrit tu vnejsi HW komunikaci.
Arduino se pomoci LUFA umi tvarit jako USB joystik s mnoha osama a tlacitkama - to by mohl byt vystup, cteni digitalnich a analogovych pinu je trivialni. Ale cteni USB klavesnice a USB joystiku je pro me zatim jednou velkou zahadou.
nevim, kde se vubec zacit ptat, tak to zkusim tady:
Chtel bych pozstavit zarizeni, ktere by na jedne strane fungovalo jako USB host (tedy se do nej pripojil USB Joystick, USB klavesnice ...) a na druhe jako USB device (cili by se pripojilo do PC a tvarilo jako joystick s klavesnici), pricemz by po ceste odchytavalo udalosti z tech USB zarizeni, midifikovalo je a pridavalo vlastni.
Ideal je chytry ovladac s mnoha tlacitky a analogovymi joystiky/potenciometry, do ktereho se pripoji chytry USB Joystick (konkretne Thrustmaster HOTAS Warthog) a USB klavesnice (bezna).
na druhe strane se to pripoji do PC a bude se to tvarit jako Joystick s mnoha osama, tlacitky a Klavesnice.
Mezi tim to pomoci vlastnich tlacitek a potenciometru (ktere bude to cist na klasickych digitalnich/analogovych pinech) a toho USB joystiku a USB klavesnice (a spousty prevodnich tabulek a vzzorcu a jine magie) vypocte stavitrualniho joystiku s mnoha osami a tlacitky a virtualni klavesnice a to bude posilat dal.
Tento modul by umoznoval (napriklad) mit vystupni osu Rychlost, ktera by primarne kopirovala osu Speed z joystiku (pokud by se tato vyrazneji menila (o vic nez nahodny sum), ale zaroven sla pomoci tlacitek nastavit na min/max/predefinovanou hodnotu, nebo meniti o danou hodnotu (zrychleni/zpomaleni o rekneme 20) a tuto hodnotu by drzela, dokud by bud nekdo nestisknul nejakou klavesu, nebo nezatocit ovladacem na joystiku, nebo neposunul potenciometr na zarizeni.
Nebo by umoznoval namapovat na "stisknuti/pusteni klavesy velke C" udalost stisknuti pusteni klavesy male g z USB klavesnice, stistnuti/pusteni buttonu 10 z USB joystiku a stisknuti/pusteni tlacitka pripojeneho k digitalniho pinu 3. (ve smyslu prechod libovolneho z tehto do stavu stisknuto zpusobi, ze virtualni (a pocitaci hlasena) klavesa velke C bude stisknuta, prechod vsech do stavu pusteno bude vyhodnocen jako pusteni virtualni klavesy velke C a takto nahlasen pocitaci). Takze sekvence stisknuti "USB klavesy male g" zpusobi udalost stisknuti virtualni "velke C", nasledne stisknuti USB buttonu 10, pusteni maleho g, stisknuti tlacitka na pinu 3, pusteni buttonu 10 nehlasi nic, protoze porad je "virtualni velke C" nejak drzenu a teprve pusteni i toho pinu zpusobi nahlaseni pocitaci "velke C " bylo pusteno.
Tuto vnitrni logiku si dokazu programove osetrit, ale nevim jak osetrit tu vnejsi HW komunikaci.
Arduino se pomoci LUFA umi tvarit jako USB joystik s mnoha osama a tlacitkama - to by mohl byt vystup, cteni digitalnich a analogovych pinu je trivialni. Ale cteni USB klavesnice a USB joystiku je pro me zatim jednou velkou zahadou.