PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C :gameport ansteuern



jonasge
24-08-2002, 15:07
Hallo,
ich habe bereits ein Display am Parport, und dieses wollte ich jetzt mit einem C-programm
das auf dem Gameport lauscht steuern. bzw infos ueber den status des PCs anzeigen.
Dazu habe ich vollgendes gecoded:


#include <stdio.h>
#include <stdlib.h>
#include <linux/joystick.h>
#include <fcntl.h>
#define JOY_DEV "/dev/js0"
int main()
{
int fd;
int btn1, btn2, btn3, btn4;
struct JS_DATA_TYPE js;
if( ( fd = open( JOY_DEV, O_RDONLY ) ) < 0 )
{
printf("\nCouldn't open joystick device %s\n", JOY_DEV);
return 1;
}

while(1) /* main loop */
{
if( read( fd, &js, JS_RETURN ) != JS_RETURN )
{
printf("\nCouldn't read the joystick!\n");
return 1;
}
btn1 = js.buttons & 1;
btn2 = js.buttons & 2;
btn3 = js.buttons & 3;
btn4 = js.buttons & 4;

printf("Btn 1: %d | Btn 2: %d | Btn 3: %d | Btn 4: %d |\r", btn1, btn2, btn3, btn4);

usleep (1000);
}// while end

close(fd);
return 0;

Dies ist zwar nur ein Testporgramm, aber ich sehe ob sich was an dem Buttons tut.
Die Buttons habe vollgende Pins:
Button 1: Pin2 --- Pin 4
Button 2: Pin7 --- Pin 4
Button 3: Pin10 -- Pin 4
Button 4: Pin14 -- Pin 4
(dazwischen muss ein taster)
Wenn ich jetzt ein modprobe emu10k1-gp mache gibt er das in der log aus:
kernel: gameport0: Emu10k1 Gameport at 0xa400 size 8 speed 1269 kHz
Das ist ja noch OK, aber wenn ich jetzt ein
modprobe analog
mache, und danach mein Programm starten will sprint es raus und sagt:
Couldn't open joystick device /dev/js0

Was mache ich falsch ??

Gruss
Jonas

nobody0
25-08-2002, 16:34
Kann man das nicht ohne device auslesen, also so wie z. B. beim Parallelport einfach auf die Register lesend zugreifen also einfach b=inb(gameportregister1) ?
:confused:

jonasge
25-08-2002, 17:44
Hi,
ich habe mal zum test ein sidewinder joystick angeschlossen, und das analog modul entladen, und das sidewinder modul geladen.
Wenn ich jetzt meine app starte, geht es, doch jetzt sind meine 4 Buttons komisch belegt. Wenn ich feuer 1 druecke zeigt mein Programm das ich button 1 und 3 druecke.

Warscheinlich deshalb, da der sidewinder ein digitaler joystick ist, und mein Programm erwartet analog.

Doch es geht ja immer noch nicht.

Irgendwelche Tipps ??

Gruss
Jonas

nobody0
26-08-2002, 18:47
In dem Buch "307 Schaltungen" ist das etwas erläutert: die Daten enthalten einmal die Taster-Bits und einmal die von den Potis, wobei die Widerstände über die Zeitdauer je einer Kondensatorentladung ermittelt werden.
Vielleicht verwendest Du die falschen Bits.