Hi!
Ich will mittels Linux, Java und JNI einen Parallel Port ansteuern,
also die Datenleitungen.
Das funktioniert soweit ganz gut, allerdings werden nicht
alle Bytes richtig übertragen.
z.b. resultiert 33 in 255
Um das genauer zu untersuchen hab ich eine Schleife geschrieben,
die alle Werte von 0 bis 255 schreibt und anschließend ausliest.
Hier die Ausgabe (W= geschrieben, R: ausgelesen)
WriteData==ReadData for: 1 (1) - W:1 R:1
WriteData==ReadData for: 11111 (31) - W:31 R:31
Jetzt tritt das Problem auf:
WriteData==ReadData for: 100000 (32) - W:32 R:255
WriteData==ReadData for: 100001 (33) - W:33 R:255
WriteData==ReadData for: 100010 (34) - W:34 R:255
WriteData==ReadData for: 100011 (35) - W:35 R:255
WriteData==ReadData for: 100100 (36) - W:36 R:255
WriteData==ReadData for: 100101 (37) - W:37 R:255
WriteData==ReadData for: 100110 (38) - W:38 R:255
WriteData==ReadData for: 100111 (39) - W:39 R:255
WriteData==ReadData for: 101000 (40) - W:40 R:255
WriteData==ReadData for: 101001 (41) - W:41 R:255
WriteData==ReadData for: 101010 (42) - W:42 R:255
WriteData==ReadData for: 101011 (43) - W:43 R:255
WriteData==ReadData for: 101100 (44) - W:44 R:255
WriteData==ReadData for: 101101 (45) - W:45 R:255
WriteData==ReadData for: 101110 (46) - W:46 R:255
WriteData==ReadData for: 101111 (47) - W:47 R:255
WriteData==ReadData for: 110000 (48) - W:48 R:255
WriteData==ReadData for: 110001 (49) - W:49 R:255
WriteData==ReadData for: 110010 (50) - W:50 R:255
WriteData==ReadData for: 110011 (51) - W:51 R:255
WriteData==ReadData for: 110100 (52) - W:52 R:255
WriteData==ReadData for: 110101 (53) - W:53 R:255
WriteData==ReadData for: 110110 (54) - W:54 R:255
WriteData==ReadData for: 110111 (55) - W:55 R:255
WriteData==ReadData for: 111000 (56) - W:56 R:255
WriteData==ReadData for: 111001 (57) - W:57 R:255
WriteData==ReadData for: 111010 (58) - W:58 R:255
WriteData==ReadData for: 111011 (59) - W:59 R:255
WriteData==ReadData for: 111100 (60) - W:60 R:255
WriteData==ReadData for: 111101 (61) - W:61 R:255
WriteData==ReadData for: 111110 (62) - W:62 R:255
WriteData==ReadData for: 111111 (63) - W:63 R:255
Jetzt ist wieder alles normal:
WriteData==ReadData for: 1000000 (64) - W:64 R:64
Wieder falsch:
WriteData==ReadData for: 1011111 (95) - W:95 R:95
WriteData==ReadData for: 1100000 (96) - W:96 R:255
...
WriteData==ReadData for: 1111111 (127) - W:127 R:255
WriteData==ReadData for: 10000000 (128) - W:128 R:128
Normal...
Problem:
WriteData==ReadData for: 10011111 (159) - W:159 R:159
WriteData==ReadData for: 10100000 (160) - W:160 R:255
...
WriteData==ReadData for: 10111111 (191) - W:191 R:255
WriteData==ReadData for: 11000000 (192) - W:192 R:192
...
WriteData==ReadData for: 11011111 (223) - W:223 R:223
WriteData==ReadData for: 11100000 (224) - W:224 R:255
...
WriteData==ReadData for: 11111110 (254) - W:254 R:255
Meine JNI-Bibliotek sieht folgendermaßen aus:
1 | ...
|
2 | JNIEXPORT void JNICALL Java_woehrbach_ParallelPort_writeOneByte
|
3 | (JNIEnv * algo, jclass otro, jint portData, jint oneByte)
|
4 | {
|
5 | if (ioperm(portData, 3, 1)){perror("ioperm error");}
|
6 | outb(oneByte,portData);
|
7 | if (ioperm(portData, 3, 0)){perror("ioperm error");}
|
8 | }
|
Ein Program, das ich in C geschrieben habe, mit denselben
Methoden wie die in der JNI-Bibliothek funktioniert einwandfrei.
Irgendwie gibt es ein Muster, wann Zahlen falsch übertragen werden.
Ich glaube, wenn die letzten Bits von 11111 auf 00000 springen,
dann werden, bis zum nächsten Wechsel von 11111 auf 00000 die Zahlen
falsch oder richtig übertragen.
Hat jemand von Euch eine Idee? Ich bin sowas von ratlos.
jones