🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.os.linux.programowanie
6 messages
6 total messages Started by Sebastian Biały Sat, 27 Sep 2014 12:30
Wirtualny joystick
#72711
Author: Sebastian Biały
Date: Sat, 27 Sep 2014 12:30
17 lines
1552 bytes
Mam takie zgadnienie:

a) jest aplikacja której kodu źrodlowego nie chce ruszać. Odbiera ona 
sterowanie ze standardowego urządzenia "joystick" dostepnego w kernelu, 
np /dev/input/js0.

b) chciałbym zamiast fizycznego joysticka wystawić joystick wirtualny. 
Taki joystick standardowo zgłasza zahardkodowaną ilośc osi i przycisków 
i nie generuje żadnych eventów.

c) z *userspace* z innego procesu chciałbym wkladac eventy joysticka do 
tego wirtualnego urzadzenia tak aby program z a) mógł je odbierać.

Czy znajdę gotowe rozwiązanie tego problemu czy też będe zmuszony do 
napisania modułu kernela implementujacego taki joystick? Sytuacje 
komplikuje nieco fakt że może byc na raz kilka procesów a) czytających 
wirtualny joystick.
Re: Wirtualny joystick
#72712
Author: grapeli23
Date: Sat, 27 Sep 2014 13:28
21 lines
2047 bytes
Dnia 27.09.2014 Sebastian Biały <heby@poczta.onet.pl> napisał/a:
> Mam takie zgadnienie:
>
> a) jest aplikacja której kodu źrodlowego nie chce ruszać. Odbiera ona 
> sterowanie ze standardowego urządzenia "joystick" dostepnego w kernelu, 
> np /dev/input/js0.
>
> b) chciałbym zamiast fizycznego joysticka wystawić joystick wirtualny. 
> Taki joystick standardowo zgłasza zahardkodowaną ilośc osi i przycisków 
> i nie generuje żadnych eventów.
>
> c) z *userspace* z innego procesu chciałbym wkladac eventy joysticka do 
> tego wirtualnego urzadzenia tak aby program z a) mógł je odbierać.
>
> Czy znajdę gotowe rozwiązanie tego problemu czy też będe zmuszony do 
> napisania modułu kernela implementujacego taki joystick? Sytuacje 
> komplikuje nieco fakt że może byc na raz kilka procesów a) czytających 
> wirtualny joystick.

Może evemu (Kernel device emulation) w jakiś sposób będzie pomocny.
http://www.freedesktop.org/wiki/Evemu/
Re: Wirtualny joystick
#72713
Author: Sebastian Biały
Date: Sat, 27 Sep 2014 15:52
5 lines
1097 bytes
On 2014-09-27 15:28, grapeli23 wrote:
> Może evemu (Kernel device emulation) w jakiś sposób będzie pomocny.

Na pierwszy rzut oka raczej nie. Ale może będzie pomocny jako example 
drivera.
Re: Wirtualny joystick
#72714
Author: Gof
Date: Mon, 20 Oct 2014 05:03
17 lines
1483 bytes
Sebastian Biały <heby@poczta.onet.pl> wrote:

> a) jest aplikacja której kodu źrodlowego nie chce ruszać. Odbiera ona 
> sterowanie ze standardowego urządzenia "joystick" dostepnego w kernelu, 
> np /dev/input/js0.

Może pójdzie, gdy stworzysz named pipe (man mkfifo) i będziesz wrzucał 
do tego pipe jakieś eventy? Nie wiem czy joystick ma jakieś ioctle, czy 
jedynie czyta się z niego podobnie do /dev/input/event*, ale jeśli tylko 
się czyta, to może się udać...

Jeśli jednak ioctle, to zawsze możesz napisać userlandowy wrapper na libc 
i ładować go przez LD_PRELOAD do tej zamkniętej aplikacji.

-- 
SELECT finger FROM hand WHERE id = 3;
http://www.chmurka.net/
Re: Wirtualny joystick
#72715
Author: Sebastian Biały
Date: Mon, 20 Oct 2014 18:00
13 lines
1355 bytes
On 2014-10-20 07:03, Gof wrote:
> Może pójdzie, gdy stworzysz named pipe

Tu jest taki znowu problem że kilka apliakcji chciało by to otworzyć na raz.

> Nie wiem czy joystick ma jakieś ioctle

Ma.

> Jeśli jednak ioctle, to zawsze możesz napisać userlandowy wrapper na libc
> i ładować go przez LD_PRELOAD do tej zamkniętej aplikacji.

nie to już przegięcie, znacznie łatwiejszy będzie normalny modulik.
Re: Wirtualny joystick
#72716
Author: Gof
Date: Tue, 21 Oct 2014 09:15
33 lines
1859 bytes
Sebastian Biały <heby@poczta.onet.pl> wrote:

>> Może pójdzie, gdy stworzysz named pipe
> 
> Tu jest taki znowu problem że kilka apliakcji chciało by to otworzyć na raz.

No to fakt - będzie problem z named pipe. Chyba żeby każda aplikacja 
otwierała inny named pipe (np. symlinkować jej to przed uruchomieniem 
i potem usuwać symlinka).

>> Nie wiem czy joystick ma jakieś ioctle
> 
> Ma.

Czyli pomysł z fifo odpada...

>> Jeśli jednak ioctle, to zawsze możesz napisać userlandowy wrapper na libc
>> i ładować go przez LD_PRELOAD do tej zamkniętej aplikacji.
> 
> nie to już przegięcie, znacznie łatwiejszy będzie normalny modulik.

Z modułem kernela na pewno będzie najbardziej elegancko, wrapper to hack.

A może spróbuj z inputattach?

http://man.he.net/man1/inputattach

Może dałoby się to podpiąć pod jakieś serialowe urządzenie, które 
emulowałoby ten joystick...

-- 
SELECT finger FROM hand WHERE id = 3;
http://www.chmurka.net/
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads