Otázka:
Potřebujete pomoc s herní myší USB
user1475122
2017-09-23 15:46:50 UTC
view on stackexchange narkive permalink

Mám čínskou herní myš USB ( 04d9: a070 ), která má 4 barevné režimy a 4 úrovně světla. Skutečně vím, že tato myš dokáže zobrazovat alespoň 5 různých barev, takže to musí být RGB led (4 nohy). Software je nejhorší, jaký jsem kdy viděl, a je neuvěřitelně těžké změnit barvu, jas a režim, aby fungoval a nejen se vypínal. Nyní plánuji výrobu vlastního ovládacího softwaru (nejprve pro Linux).

Začal jsem s jednoduchým průvodcem „Reverse Engineering a USB mouse (aktualizováno 3. května 2017)“ v Bytepunk (nelze přidejte odkaz, ale Google nebo DuckDuckGo by měli tuto příručku najít)

Už jsem čichal k většině věcí, které potřebuji. Použil jsem USBlyzer na Windows s hrozným ovládacím softwarem a dostal jsem několik hexadecimálních řetězců a přišel na to, jak změnit barvu, jas a režim v hexadecimálních řetězcích. Vložil jsem data, která jsem objevil zde (Pastebin)

  Kliknutím zapnete světla z ovládacího softwaru Windows out: 07 07 01 00 00 00 00 00 < - Je to „Příkazy přicházející ve volání“? out: 07 09 01 02 00 00 00 00 <-- 07 09 01 0X, kde X je barevný odstín: 07 0C 01 04 00 00 00 00 <-- 07 0Y 01 0Z, kde Y je jas a Z je režim mimo: 07 13 04 00 00 00 00 00 < - Je to „Příkaz odeslán hovor“? X - VYPNUTO: 0 ČERVENÁ: 1 MODRÁ: 2 ZELENÁ: 3 RŮŽOVÁ: 4Y - NÍZKÁ: B MED: 9 VYSOKÁ: CZ - STATICKÁ: 1 POMALÁ PULZA: 2 MED PULZNÍ: 3 FAST PULSE: 4  

Můj problém spočívá v tom, že když se pokusím na zařízení „napsat“ cokoli, prostě visí a zobrazí se chyba „[Errno2] Entita nebyla nalezena“ a myš potřebuje aby bylo možné znovu fungovat. Neodpojuje se, ale zůstává v lsusb a v dmesg se nic zvláštního neobjevuje.

Upravený skript v Pythonu jsem vložil do Pastebin

Také jsem použil vlastní udev pravidlo

SUBSYSTEM == "usb", ATTR {idVendor} == "04d9", ATTR {idProduct} == "a070", GROUP: = "plugdev", MODE = "0666"

Jsem v oblasti sériové komunikace a reverzního inženýrství nováčkem, takže nevím, co hledat. Myslím, že mohu do komentářů zveřejnit obrázky a další data z USBlyzeru. Toto je můj první příspěvek, takže nemám pověst dávat více odkazů.

Zdravím, Santeri

Jeden odpovědět:
Spektre
2017-09-24 12:56:30 UTC
view on stackexchange narkive permalink

Moje chápání USB je přinejlepším velmi nízké (i když vyvíjím nějaká jednoduchá USB zařízení pro život), tak si to přečtěte s velkými předsudky ...

  1. Vaše třída ovladače a konfigurace musí odpovídat zařízení USB (myš)

    Nevím, jak vaše USB myš je naprogramována, ale rozhraní musí být stejné (třída CDC může mít více rozhraní) a pokud se neshoduje, pak USB nebude fungovat správně.

    Takže potřebujete vědět, které kanály se používají a které jsou vstupní a výstupní, pokud používají hromadné nebo přerušují přenosy.

    Moje sázka je, že vaše myš bude HID třída s využitím pouze přerušení přenosu. Ale pokud je to nějaká šílená multimediální ergonomická multifunkční hloupost, může to být dokonce i CDC….

  2. Přenos dat

    Předpokládejme, že máte HID , takže zařízení komunikuje pomocí řídicího kanálu0 nebo přerušením kanálu (1,2 ...).

    Nyní v závislosti na myši firmware, může vyžadovat konkrétní pořadí příkazů pro čtení / zápis, jinak firmware zamrzne nebo zavěsí až do vypršení časového limitu.

    Například některé příkazy nevracejí žádná data a lze je odeslat kdykoli ...

    Některé příkazy vracejí data v konkrétním kanálu a pokud nebudou načteny zpět hostitelem v době, kdy může dojít k havárii / zmrazení firmwaru.

    Další problém, který může být myš konfigurovatelná a vyžaduje nějakou inicializační sekvenci kódů / příkazy určující účel myši / specifikace / cokoli. Pokud to firmware očekává jako první, odeslání jakéhokoli jiného příkazu může vaši myš zmrazit.

    Také některé firmwarové verze očekávají příkazy s časováním a v takovém případě je nesprávné odesílání příliš často nebo příliš zřídka.

    Vaše čichací data nic z toho nezohledňují. Zkuste čichat i ostatní kanály (možná s časovými razítky) a přihlásit se k něčemu jako je toto:

    Až budete hotovi, měli byste vidět, co zařízení posílá zpět. Je důležité zjistit, kolik bajtů a v jakém kanálu. Poté můžete aktualizovat svůj skript a po odeslání příkazu přečíst příslušný počet bajtů zpět na hostitele, aby váš firmware na myši nezmrzl.

1. do značné míry vyřešil můj problém. Měl jsem špatnou hodnotu _bmRequestType_. Nejsem si jistý proč, ale dostal jsem neplatnou hodnotu z _USBlyzer_. Tentokrát jsem použil _Wireshark_ a dostal správnou hodnotu (0x21). Nyní jsem schopen ovládat LED diody a další nastavení. Děkuji za vysvětlení!
@user1475122 rád pomůže.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...