Autor Thema: Escape-Scancode an falscher Stelle  (Gelesen 6290 mal)

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« 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.
« Letzte Änderung: 08. November 2008, 22:12 von jgraef »

livinskull

  • Beiträge: 27
    • Profil anzeigen
    • Livinskulls site
Gespeichert
« Antwort #1 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...


jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #2 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?

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #3 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #4 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);
...

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #5 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.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #6 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

 

Einloggen