Läsa av usb gamepad i C#/C++?

Permalänk

Läsa av usb gamepad i C#/C++?

Hej
Jag har byggt en fyrhjulsdriven robot med en raspberry pi + kameramodul.
Kameran sitter på en "pan/tilt" hållare med två servos.
Allt funkar men jag har ett litet problem, jag vill kunna styra den från min laptop mha en usb gampad.
Jag har slängt ihop ett litet program i C# och använder mig av något som kallas sharpdx för att läsa min gamepad, men jag använder mig av polling för att läsa av min gamepad vilket innebär att min stackars laptop segar ned totalt och videoavkodningen laggar som satan.

Så då är frågan hur löser jag detta på bästa sätt?
Jag kan koda i C/C#/C++/Java men jag är rätt så grön på event hantering/callback loopar etc.
Jag vill bara få något som fungerar så att jag kan koncenterar mig på att koda roboten, kör bla FreeRTOS på den och planerar implementera PID för att styra hastigheten på motorerna.
Skulle även vara bra med tips hur man avkodar h.264 videoströmmar, i dagsläget så skickas video (från raspberry pi) med netcat till min laptop där avkodningen sker med mplayer.
Det enda kravet är att det ska gå att köra på en windows 7 maskin.

(Ni får ursäkta om det blev lite svamligt, min flickvän vill att vi testar 5-2 dieten där man ska fasta två dagar i veckan och det är en sådan dag idag och jag känner mig rätt så skakig.)

Permalänk
Inaktiv

USB pollar i princip alltid, även om du använder ett bibliotek som abstraherar det till callbacks i dom högre lagrerna det erbjuder. Jag skulle rekommendera att använda C eller C++ för detta, för att helt bli kvitt overheaden man får av managed språk och all annan tyngre skit C# "erbjuder".

Permalänk
Skrivet av anon214934:

USB pollar i princip alltid, även om du använder ett bibliotek som abstraherar det till callbacks i dom högre lagrerna det erbjuder. Jag skulle rekommendera att använda C eller C++ för detta, för att helt bli kvitt overheaden man får av managed språk och all annan tyngre skit C# "erbjuder".

Så det går inte att få till något som är händelsestyrt?
Jag skapade bara en separat tråd som pollade kontinuerligt, jag kanske borde testa med att lägga till någon form av sleep/delay i botten av loopen?

Permalänk
Inaktiv
Skrivet av Pragmatiker:

Så det går inte att få till något som är händelsestyrt?
Jag skapade bara en separat tråd som pollade kontinuerligt, jag kanske borde testa med att lägga till någon form av sleep/delay i botten av loopen?

Hehe ja alltså jag tog nästan för givet att du hade kodat in en pollrate i skiten. Men dåså. Prova det, cpar det fortarande ner allting så rekommenderar jag dock mer native lowlevel grejjer utan massa onödiga overhead

Permalänk
Avstängd

Antingen lägger du den i samma tråd som videoavkodningen eller så kör du en Thread.Sleep(1) i din pollningstråd. Du får tänka på att klockan in win32 går på 64hz så du kommer hamna på ungefär 16 ms sleep. Är det för segt så kan du använda Thread.Yield istället, detta betyder att din tråd går så snabbt den kan men lämnar CPU-tid till andra trådar och processer

Visa signatur