Lowlevel

Lowlevel => Lowlevel-Coding => Thema gestartet von: jgraef am 08. November 2008, 22:02

Titel: Escape-Scancode an falscher Stelle
Beitrag von: jgraef am 08. November 2008, 22:02
Hi,

Ich bin gerade dabei einen Tastatur-Treiber zu schreiben. Funktioniert auch alles super, bis auf Tasten, die escaped werden. Irgendwie bekomme ich erst den normalen Scancode und dann den Escape-Code. Dadurch denkt mein Treiber natürlich dass die normale Taste gedrückt wurde.

Wenn ich '/' auf dem Numpad drücke bekomme ich folgende Scancodes:
Zitat
Scancode: 0x35
Scancode: 0xe0
Scancode: 0xb5
Scancode: 0xe0
Wird dann natürlich als '-' erkannt, wegen dem 0x35.
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: livinskull am 13. November 2008, 10:10
Big und Little Endian irgendwie verdreht?
Liest du byte-oder wordweise ein?

Und sonst wuerd ich sagen da is evt irgendwo ein Byte verloren gegangen....
So, viel mehr als im IRC konnt ich jetz auch nich sagen :P
Aber ich komm grad nich ins IRC, is hier blockiert; d.h. ich muss mich anderweitig beschaeftigen...
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: jgraef am 13. November 2008, 17:09
Big und Little Endian irgendwie verdreht?
Liest du byte-oder wordweise ein?
Byteweise.
Und sonst wuerd ich sagen da is evt irgendwo ein Byte verloren gegangen....
So, viel mehr als im IRC konnt ich jetz auch nich sagen :P
Aber ich komm grad nich ins IRC, is hier blockiert; d.h. ich muss mich anderweitig beschaeftigen...
Wo soll denn da was verloren gegangen sein?
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: bluecode am 14. November 2008, 09:42
Bist du dir sicher, dass du das wirklich in der Reihenfolge bekommst oder dass es nur in der Reihenfolge (auf der Konsole) ausgegeben wird? Durch IPC, Putter oä könnte es ja sein, dass die Reihenfolge des ausgegebenen nicht stimmt.
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: jgraef am 14. November 2008, 15:00
Hi,

Der Treiber liest den Scancode ja selbst per inb() ein und gibt dann den Scancode aus.

static char keyboard_read() {
  if (inb(KEYBOARD_PORT_STATUS)&1) return inb(KEYBOARD_PORT_DATA);
  else return 0;
}
...
  scancode = keyboard_read();
  fprintf(stderr,"Scancode: 0x%02x\n",scancode&0xFF);
...
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: bluecode am 14. November 2008, 17:48
Ich meinte jetzt auch eher ob beim senden an die Konsole (Ich nehme einfach mal an, dass das auch per IPC geht) etwas in einer anderen Reihenfolge ankommt.
Ich für meinen Teil habe nämlich überhaupt keine Erklärung dafür parat, dass es wirklich falschrum von der Tastatur kommt.
Titel: Re: Escape-Scancode an falscher Stelle
Beitrag von: jgraef am 15. November 2008, 01:02
Nein da kann das auch nicht passieren:
1. Wird das im Moment noch ohne IPC an den Kernel geschickt (per Syscall)
2. Würde er es dann auch nicht falsch interpretieren