USB Host (a USB multi-device) / USB hub - jak vytvorit

Uživatelský avatar
gilhad
Příspěvky: 162
Registrován: 29 kvě 2015, 00:36

USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od gilhad » 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.

Uživatelský avatar
fulda
Příspěvky: 628
Registrován: 04 led 2016, 17:18

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od fulda » 07 říj 2017, 10:53

Ahoj,

po pravdě - celkem hodně ti to kazí dvě slova: "USB HOST" a "BĚŽNÁ KLÁVESNICE".
To totiž v praxi znamená, že musíš postavit celý stack (včetně podpory USB hubú) a tím pádem můžeš v klidu zapomenout na procesory typu atmega.
Potřebuješ něco minimálně 32bit s náznakem operačního systému (alespoň RTOS).
Dost bych věřil, že se ti povede najít nějaký STM32, který ti umožní USB host + USB device.

Nebo omezíš připojitelná zařízení na několik málo, která pak obsloužíš ne-univerzálním ovladačem (zamysli se nad PS/2 klávesnicí). Pak si užiješ několik pěkných víkendů snifováním komunikace toho USB joysticku. Ale IMHO se s tím stejně těžko vejdeš do osmibitu. Zvlášť pokud si začneš klást podmínky, že Microchip PIC je platforma pro dinosaury.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Uživatelský avatar
gilhad
Příspěvky: 162
Registrován: 29 kvě 2015, 00:36

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od gilhad » 07 říj 2017, 11:42

Zkusim to vylepsit:
USB HOST jsem myslel ve smyslu, ze to ma konektor (tedy dva), kam se daji strcit USB DEVICE.

Ty USB devide budou presne dve, kazda bude mit svuj vlastni port, kam se bude strkat - jedna bude ten Joystick, druha bude klavesnice.
BEZNA KLAVESNICE jsem myslel, ze je to klavesnice, co se strci do USB a proste chodi, v mem pripade to bude jeden konkretni kus (odborne zmrseny vyloupanim nepotrebnych klaves, aby byla prehlednejsi, ze 105 to chci zredukovat asi na 2/3 tim, ze na hlavni casti zustane jakesi V od 1-4 po z-v
(sikmo dolu 4x4) a od n-. po 9-= (sikmo nahoru 4x4), dale pak F1-F12, smerove sipky a numpad. Vse ostatni pujde pryc, protoze ji chci ovladat vetsinou poslepu levou rukou a ty diry bydou slouzit jako zarazky. (zkousel jsem i https://www.czc.cz/c-tech-konabos-cerna/208963/produkt ale tam se pohodlne ovlada jen ten zakladni ctverec 4x4 a cokoli mimo a prerazovace uz jsou na slepo pri hrani spis na obtiz, nez ke skutecnemu uzitku - radsi vetsi pult se specializovanytmi klavesami pro ruzne casti hry, (s tim, ze se par veci bude dublovat))

takze ve skutecnosti to bude jeden konktertni kus joystiku a jeden konkretni kus klavesnice.


PIC sem, PIC tam, pokud je pro to vhodny, klidne ho pouziju.

Problem je ten, ze ta konkretni hra, pro kterou tohle chci (oolite) podporuje pouze jednu konkretne napapovanou klavesnici a joystick, pricemz kazda akce muze mit prirazenu maximalne jednu klavesu + jedno tlacitko na joystiku (nebo osu), coz neumoznuje jednodussi reseni tam dat tech joystiku nekolik (teda ono by to slo, ze by nektery delal jedna tlacitka, a osy a druhy exkluzivne jine, ale nejde aby jednu akci delaly dva joystiky, nebo dve ruzne klavesy)

A ja bych STRASNE POTREBOVAL :) abych mohl krome plynuleho rizeni rychlosti i pouzivat nektere prednastavene hodnoty (dokud se do toho zase nesahne plynulym rizenim), coz hra neumoznuje uz vubec, cili musim tu osu odchytavat a "falsovat" ale potrebuju ji mit zaroven pristupnou na joystiku a klavesnici to nejde plynule menit, natoz nastavit na danou hodnotu (73.5% napr.)
A potreboval bych, aby nektere akce byly spusteny nekolika nezavislymi klavesami, coz hra taky neumoznuje.

Na druhou stranu jakmile ta data budou v nejakem mikrochipu, ktery budu moct programovat, tak udelat, ze 4 klavesy se chovaji jako jedna je trivialni

Kód: Vybrat vše

 vitrtual=up;
 if (kb_A==down) virtual=down;
 if (kb_X==down) virtual=down;
 if (kb_Shift_Z==down) virtual=down;
 predstirej_kb_Shift_C(virtual);
stejne jako skok klavesou na "zarazku" na ose.

Kód: Vybrat vše

  vosa=0;
 if (kb_B==down) vosa=MAX;
 if (kb_C==down) vosa=MAX*3/4;
 if (osa_Speed !=last_osa_Speed) vosa=osa_Speed;
 predstirej_osa_Speed(vosa);
No a potom uz staci pripojit toto zarizeni jako kombinaci klavesnice+joystick a vsechno namapovat z nej, idealne tak, aby pri pripojeni normalni klavesnice a normalniho joystiku to mapovani bylo stejne

Uživatelský avatar
Dex
Administrátor
Příspěvky: 900
Registrován: 16 úno 2013, 14:26

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od Dex » 07 říj 2017, 16:47

Mno a nebude jednodušší vyřešit to přímo na tom PC kde běží ta hra? ;)

Od dob co existují joysticky existují také utility na jejich přemapování ("remap").

Namátkou jsem našel např. https://github.com/evilC/UCR který by to měl umět. Navíc je k němu i zdroják a napsané je to v AutoHotkey, takže nic složitého ;)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
fulda
Příspěvky: 628
Registrován: 04 led 2016, 17:18

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od fulda » 07 říj 2017, 20:21

OK, tak se zamysli nad tím použít PS/2 rozhraní, to je mnohem jednodušší rozhraní. A pokud si ten joystick také vyoperuješ na A/D vstupy, tak už hledáš jen USB device a to už je celkem snadno hratelné i na atmelu. Jednoduchou klávesnici jsem ukazoval na posledním doupěti a doplnit jí o joystick nebude nic těžkého.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Uživatelský avatar
Dex
Administrátor
Příspěvky: 900
Registrován: 16 úno 2013, 14:26

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od Dex » 07 říj 2017, 21:18

Mám takové tušení, že bude chtít použít ten TURBO joystick co má :D

Pokud náhodou ne, tak se dají sehnat (třeba v bazarech) i klasické joysticky s gameportem a tam stačí jen koupit konektor.

Btw cvičně jsem se kouknul jestli by nešlo použít RPi tak, aby emulovalo USB device (třeba s nějakou bižuterií na GPIO), ale kupodivu jsem nic nenašel ;)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
fulda
Příspěvky: 628
Registrován: 04 led 2016, 17:18

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od fulda » 07 říj 2017, 21:31

Dex píše:
07 říj 2017, 21:18
Mám takové tušení, že bude chtít použít ten TURBO joystick co má :D
Jsem si to vygůglil - to je bezva hračka - čtu správně, že to stojí desítku? A k tomu křeslo v setu za 4?
Dex píše:
07 říj 2017, 21:18
Btw cvičně jsem se kouknul jestli by nešlo použít RPi tak, aby emulovalo USB device (třeba s nějakou bižuterií na GPIO), ale kupodivu jsem nic nenašel ;)
Se nedivím, na to není úplně triviální úloha.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.

Uživatelský avatar
Dex
Administrátor
Příspěvky: 900
Registrován: 16 úno 2013, 14:26

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od Dex » 07 říj 2017, 21:39

Prostě TURBO joystick :-)

Jj vypadá to celkem triviálně, ale modří vědí, že to je docela obtížná záležitost ;)
"all your robots are belong to us"
robodoupe.cz | rxd.cz | codetory.cz

Uživatelský avatar
gilhad
Příspěvky: 162
Registrován: 29 kvě 2015, 00:36

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od gilhad » 08 říj 2017, 15:06

Jo TURBO joystick, do ktereho bych fak nerad sahal - halove osy masivni konstrukce mraky tlacitek a dobra ergonomie. za desitku to snad neni, jen za polovic, ale stejne ... https://www.czc.cz/thrustmaster-hotas-w ... 58/produkt

A mozna ho budu chtit pouzit i na jine hry ...

Takze jsem spis chtel udelat neco obecnejsiho, co mi umozni si to namixovat jak potrebuju sam, aniz by system neco vedel.

Navic to samozrejme pouzivam na Linuxu, ten UCR na prvni pohled vypada, ze je pro Windows

pgerla
Příspěvky: 349
Registrován: 11 dub 2013, 00:17

Re: USB Host (a USB multi-device) / USB hub - jak vytvorit

Příspěvek od pgerla » 08 říj 2017, 16:10

do PS/2 dostanete jak analogové hodnoty :D To co požaduje je USB zařízení co bude emulovat joystick rozhraní a co bude mít možnost ovlivnit změřené analogové hodnoty (filtrace šumu, změna externími tlačítky +/-) Jinak to bude odesílat keycode a tvářit se jako USB klávesnice.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host