[Howto] Joystick-tasten am Linvdr

  • Hallo!


    Nachdem ich nun endlich zum Ziel gekommen bin und LINVDR beigebracht habe, meine
    Tasten an der Frontblende zu benutzen, möchte ich euch nicht vorenthalten, wie es geht. ;)


    An dieser Stelle möchte ich mich bei allen bedanken, die mir geholfen haben mit Tipps und Ideen.
    Besonders MarcTwain, der das Joystick Plugin in seinem neuen Patch mit eingespielt hat.


    Warum Joystick Plugin?
    Der Gameport ist meist neben Com und Parport der einzige Freie Port, den
    man zum Abfragen von Tasten benutzen kann. In der Version 0.0.3 kann man mit dem Plugin
    4 Taster abfragen (4 mal Feuerknöpfe) und 4 Achsenbewegungen. Somit ist ohne Multiplexen eine Abfrage von 8 Knöpfen
    problemlos möglich. Wer mehr braucht sollte mal bei powarman(Entwickler) vorbeischauen.
    Mir gehts um die 6 Knöpfe an der Frontblende meines Lintec-Gehäuses.
    Ein paar kleine Änderungen waren an der Hardware nötig, um dem System einen Joystick vorzugaukeln.
    Man braucht also keinen Joystick auszuschlachten.


    LINVDR 0.7 fehlt es in der Grundkonfiguration an folgenden Modulen, die benötigt werden:
    ns558 (Modul für den gameport der Soundkarte) und analog (Modul für Analog Joysticks)
    Es gibt noch eine Reihe anderer Module für diverse Joysticks z.B Sidewinder.
    Die benötigen wir aber nicht für die Abfrage der Tasten.
    ns558 ist das passende Modul für den gameport der Soundkarte und funktioniert mit den gängigsten Typen.
    Allerdings gibst es auch Ausnahmen, z.B ältere Isa-Boards und einige Soundblaster-Karten.
    Bei meiner On-Board AC97 kompatiblen Soundkarte gabs keine Probleme.
    Wie kommen wir zu den Modulen?
    Leider führt der Weg dorthin nur über das Neukompilieren des Kernels mit den aktivierten Modulen.
    Falls jemand eine einfachere Idee hat, möchte er sie bitte mitteilen.


    Jetzt mein Weg, der funktioniert hat:



    Zuerst brauchen wir einen Compiler, welchen wir am besten nach der Anleitung von LINVDR.org installieren.
    Q: Wie kann ich VDR neu Kompilieren ohne eine seperate Entwicklungsumgebung zu installieren?


    Ein Compiler kann wie folgt installiert werden.


    1)
    debtool -u
    debtool -i gcc-2.95 make libc6-dev cpp-2.95 libjpeg62-dev binutils libstdc++2.10-dev g++-2.95


    ln -s /usr/bin/gcc-2.95 /usr/bin/gcc
    ln -s /usr/bin/gcc /usr/bin/cc
    ln -s /usr/bin/g++-2.95 /usr/bin/g++


    2)
    debtool -u
    debtool -i debootstrap
    debootstrap woody /opt/woody
    cp -a /etc/resolv.conf /opt/woody/etc
    Hier nicht vergessen sources.list nach /opt/woody/etc/apt

    Hier die passende sources.list:


    deb http://ftp.de.debian.org/debian/ stable main non-free contrib
    deb-src http://ftp.de.debian.org/debian/ stable main non-free contrib
    deb-src http://ftp.de.debian.org/debian/ testing main non-free contrib
    deb http://ftp.de.debian.org/debian-non-US stable/non-US main contrib non-free
    deb-src http://ftp.de.debian.org/debian-non-US stable/non-US main contrib non-fr
    ee
    deb http://security.debian.org/ stable/updates main contrib non-free



    Dann:


    chroot /opt/woody
    apt-get update
    apt-get upgrade
    apt-get install g++ less make bzip2 wget


    Kernelsourcen von http://kernel.org holen, nach /usr/src entpacken.


    Symlink setzen


    ln -s /usr/src/linux.2.6.9 /usr/src/ linux


    Jetzt benötigen wir die "alte" config Datei, in denen die Einstellungen für den Kernel
    von LINVDR hinterlegt sind. Die Datei legt in /proc und heisst config.gz.
    Die Datei auspacken und nach /usr/src/linux-2.6.9/ kopieren. Die Datei muss .config heissen!!!
    Nun editieren wir die .config
    Leichter tun wir uns mit dem Midnight Commander, den wir wie unter Linvdr.org beschrieben installieren.
    In der .config ändern wir:


    #
    # Input I/O drivers
    #
    CONFIG_GAMEPORT=m
    CONFIG_SOUND_GAMEPORT=m

    CONFIG_GAMEPORT_NS558=m # ns558 als Modul
    # CONFIG_GAMEPORT_L4 is not set
    # CONFIG_GAMEPORT_EMU10K1 is not set
    # CONFIG_GAMEPORT_VORTEX is not set
    # CONFIG_GAMEPORT_FM801 is not set
    # CONFIG_GAMEPORT_CS461x is not set
    CONFIG_SERIO=y
    CONFIG_SERIO_I8042=y
    CONFIG_SERIO_SERPORT=m
    # CONFIG_SERIO_CT82C710 is not set
    # CONFIG_SERIO_PARKBD is not set
    # CONFIG_SERIO_PCIPS2 is not set
    # CONFIG_SERIO_RAW is not set


    #
    # Input Device Drivers
    #
    CONFIG_INPUT_KEYBOARD=y
    CONFIG_KEYBOARD_ATKBD=y
    # CONFIG_KEYBOARD_SUNKBD is not set
    # CONFIG_KEYBOARD_LKKBD is not set
    # CONFIG_KEYBOARD_XTKBD is not set
    # CONFIG_KEYBOARD_NEWTON is not set
    # CONFIG_INPUT_MOUSE is not set
    CONFIG_INPUT_JOYSTICK=y # bei Y werden wir bei make oldconfig nach dem Joystick befragt
    CONFIG_JOYSTICK_ANALOG=m # analog als Modul
    CONFIG_JOYSTICK_A3D=m
    CONFIG_JOYSTICK_ADI=m
    CONFIG_JOYSTICK_COBRA=m
    CONFIG_JOYSTICK_GF2K=m
    CONFIG_JOYSTICK_GRIP=m
    CONFIG_JOYSTICK_GRIP_MP=m
    CONFIG_JOYSTICK_GUILLEMOT=m
    CONFIG_JOYSTICK_INTERACT=m
    CONFIG_JOYSTICK_SIDEWINDER=m
    CONFIG_JOYSTICK_TMDC=m
    CONFIG_JOYSTICK_IFORCE=m
    # CONFIG_JOYSTICK_IFORCE_USB is not set
    # CONFIG_JOYSTICK_IFORCE_232 is not set
    # CONFIG_JOYSTICK_WARRIOR is not set
    # CONFIG_JOYSTICK_MAGELLAN is not set
    # CONFIG_JOYSTICK_SPACEORB is not set
    # CONFIG_JOYSTICK_SPACEBALL is not set
    # CONFIG_JOYSTICK_STINGER is not set
    # CONFIG_JOYSTICK_TWIDDLER is not set
    # CONFIG_JOYSTICK_DB9 is not set
    # CONFIG_JOYSTICK_GAMECON is not set
    # CONFIG_JOYSTICK_TURBOGRAFX is not set
    # CONFIG_JOYSTICK_JOYDUMP is not set
    # CONFIG_INPUT_TOUCHSCREEN is not set
    # CONFIG_INPUT_MISC is not set


    Ich habe hier mehrere Joysticktypen probiert.
    Nun die geänderte DAtei speichern und mit make oldconfig gehts los!
    Sind noch Einstellungen unklar, kommt eine Abfrage.
    Bitte genau lesen.


    Nun compilieren wir mit make den Kernel. (Kaffepause...)
    Dann die Module: make modules
    Ist soweit alles durchgelaufen, können wir die Module installieren:
    make modules_install


    Das wars eigentlich schon. Das Kernelimage brauchen wir in diesem Fall nicht,
    da wir ja sonst nichts geändert haben. (Schlagt mich, wenns nicht stimmt, aber bei mir läufst stabil!)
    Jetzt haben wir die Module.
    Leider fehlt auch das Testprogramm jstest und die devices js0 bis js3.
    Wo kriegen wir die her?
    Devices:
    Anlegen wie in der Kernel Doku beschrieben:


    cd /dev
    rm js*
    mkdir input
    mknod input/js0 c 13 0
    mknod input/js1 c 13 1
    mknod input/js2 c 13 2
    mknod input/js3 c 13 3
    ln -s input/js0 js0
    ln -s input/js1 js1
    ln -s input/js2 js2
    ln -s input/js3 js3


    Das Programm jstest habe ich aus dem Joystick-Paket joystick-1.2.15, welches man hier
    joystick-1.2.15 downloaden kann.
    Nach /usr/src/ entpacken.
    Im Verzeichnis /usr/src/joystick-1.2.15 kompilieren wir jstest:
    make jstest (mehr brauchen wir aus diesem Paket nicht)
    mit install -c jstest /usr/bin installieren wir das Programm.


    So, nun wird ernst. Jetzt sollte der Joystick angeschlossen sein.
    Wir laden die Module testweise von Hand:
    modprobe gameport
    modprobe ns558
    modprobe analog
    modprobe joydev


    Gabs bis hier keine Fehlermeldung - alles ok.
    Mit dmesg kann man jetzt überprüfen, ob ein Joystick gefunden wurde.


    z.B:
    gameport: NS558 ISA at 0x201 speed 1084 kHz
    input: Analog 4-axis 4-button joystick at isa0201/gameport0 [TSC timer, 1294 MHz clock, 934 ns res]


    Nun kommt das Programm jstest zum Einsatz:
    jstest /dev/js0


    Nun sollte die Ausgabe wie folgt aussehen:
    Joystick (Analog 4-axis 4-button joystick) has 4 axes and 4 buttons. Driver version is 2.1.0.
    Testing ... (interrupt to exit)


    Axes: 0: 0 1: 0 2: 0 3: 0 Buttons: 0:off 1:off 2:off 3:on


    Jeder Tastendruck oder Axenbewegung des Joysticks wird angezeigt.
    Mit STRG-C beenden wir das Programm.
    Alles ok? Prima! :]
    Jetzt bringen wir LINVDR bei, die Module bei jedem Start automatisch zu laden:
    Die Datei /etc/init.d/boot.local editieren oder neu anlegen, wenn nicht vorhannden.
    Am Ende tragen wir ein:


    #joystick driver
    execute modprobe gameport
    execute modprobe joydev
    execute modprobe ns558
    execute modprobe analog

    somit werden die Module automatisch geladen.



    So, nun muss man nur noch VDR beibringen, mit dem Joystick zu sprechen.
    Dazu brauchen wir das Joystick Plugin, welches MarcTwain in seinem Patch
    vom 14.04.2005 eingebaut hat: http://www.vdr-portal.de/board/thread.php?threadid=32838&sid=
    Jetzt nur noch Anlernen, wie gewohnt und los gehts!


    Noch ein Tipp wegen dem anlernen: Bei nur 6 Tasten hat man die ersten bereist mit Auf Ab und Menu belegt, die das Anlernprogramm für die Bedienung braucht. Die ändern wir einfach hinterher von Hand ab in der /etc/vdr/remote.conf. Dabei kann man sich die benötigte Funktion bei Keyboard oder LIRC abgucken. meine remote.conf (Joystick-teil):


    Joystick.User1 Axis0Button0
    Joystick.Down Axis1Button0
    Joystick.Left Button0
    Joystick.Pause Button1
    Joystick.Right Button2
    Joystick.Up Button3


    (Ich habe hier die erste Taste über die keymacros.conf mit command 2 verknüpft, um damit die CD auszuwerfen)


    Jene, welche den Kernel von DarkAngel verwenden müssen natürlich die entsprechenden Sourcen verwenden
    und evt. DarkAngel um das config-file bitten!


    Schön wäre es natürlich, wenn DarKAngel diese Module in seinem nächsten Kernel mit einbaut.



    Wenns nicht klappt, fragen Sie Ihren Arzt oder Apotheker... :rolleyes:


    Falls jemand speziell zum Lintec Fragen hat oder zur Hardware für dieses
    Projekt meldet Euch!


    So long..

    Lintec Gehäuse - Futuba USB Display MDM166A - FB Medion X10 - ASUS AT5IONT-I - Mystique S2 Satix Dual - Gen2VDR 3 V8

    2 Mal editiert, zuletzt von micabu ()

  • Genau da fehlt noch der Schaltplan :D


    Die Auswurftaste meines Lintec hab ich aber schon in Hardware verdrahtet. So funktioniert die unabhängig vom VDR.


    Mal schaun ob meine IRQ Verteilung noch Platz für den Gameport läst...



    Lars

  • Hallo!


    Ich werde wohl demnächst für die Lintec Gemeinde, die ja immer grösser wird,
    auf meinem Webspace details anbieten (Bilder, Schaltbilder, patches u.s.w).


    Hardwareverdrahtung hatte ich mir erst auch überlegt, fand die Lösung aber unbefriedigend. Es sind wirklich nur minimale Änderungen auf dem Pic-Board nötig. Im groben so:


    Pic brauchen wir nicht - wegschmeissen! :D
    Einige Unterbrechungen und Verbindungen auf der Unterseite des Pic-Boards herstellen. 2 Widerstände einlöten (für Joystick-erkennung)
    Einige Unterbrechungen und Verbindungen auf der Tastaturplatine herstellen. 2 Widerstände einlöten (für Nullpunktkorrektur Joystick)


    Jetzt kann man das Pic-Board als "Verteiler" benutzen. :]
    D.H. Die eine Reihe des Sockels für den PIC dient für die weitere Verdrahtung richtung Gameport, die andere Seite richtung Paralellport fürs LCD.
    So habe ich alle Kabel steckbar und kann schnell die Boards demontieren.
    Infrarot habe ich auf TSOP38 umgebaut und läuft über COM1.


    Wie gesagt, demnächst mehr...

    Lintec Gehäuse - Futuba USB Display MDM166A - FB Medion X10 - ASUS AT5IONT-I - Mystique S2 Satix Dual - Gen2VDR 3 V8

  • Hallo,


    ich habe das Joystick Plugin mit Suse am Laufen.
    Da ich nur 6 Tasten nutze, sind wurden die Einträge in die remote.conf mit der Hand gemacht.
    Ich Habe noch folgendes Problem!
    Tasten 0 bis 4 gehen mit den Einträgen "Joystick.UP Button0" usw.
    Bei den Tasten 5 und 6 werden über eine Diodenmatrix quasi zwei Tasten gedrückt. Z.B. Taste 5 Button0 und Button2 und bei Taste 6 Button0 und Button3. Es sind also zwei Leitungen aktiv.
    Wie muss ich das in die remote.conf eintragen?

  • Hallo!


    Sorry, das müssen dir andere Bastefreaks beantworten.
    Ich habe kein Matrix benutzt, sondern verwende die Achsenbewegung des Joysticks als zusätzliche Tasten. Somit hat man insgesamt 8 Tasten zum abfragen. (Mittels Widerstände wird der Knüppel quasi virtuell in Mittelstellung gehalten und die Tasten überbrücken die Widerstände, was als Bewegung interpretiert wird)
    Solltest du an meiner Version interessiert sein, schau doch mal auf meiner HP (www.mic-tech.de)vorbei. Ist zwar noch nicht ganz fertig, aber demnächst.


    Gruss, Micha

    Lintec Gehäuse - Futuba USB Display MDM166A - FB Medion X10 - ASUS AT5IONT-I - Mystique S2 Satix Dual - Gen2VDR 3 V8

  • Hallo,


    sehr interessanter Ansatz für mich. Ich benutze zwar Suse aber das gleiche Gehäuse.
    Eine Frage hätte ich noch. Wie wurde der 15 polige Gameport beschaltet.


    Ansonsten weiter so.


    Gruß x-juergen

  • Hallo!


    Die Beschaltung pflege ich nächste Woche auf meiner HP ein.
    Schau einfach mal wieder vorbei.
    Wenn noch was fehlt, einfach kurze mail an mich.


    Gruss, Micha

    Lintec Gehäuse - Futuba USB Display MDM166A - FB Medion X10 - ASUS AT5IONT-I - Mystique S2 Satix Dual - Gen2VDR 3 V8

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!