Autor Thema: Keyboard: IRQ vs. Nicht IRQ  (Gelesen 8339 mal)

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« am: 21. March 2005, 16:49 »
Mein bisheriger Keyboard-Treiber funktioniert so:
Wenn die getch()-funktion aufgerufen wird, warte ich mit einer while schleife so lange bis ne taste gedrückt wurde, also inport(0x60) != 0x0 ist. Danach mach ich aus dem Keycode wie gewohnt ein Zeichen.
Macht es Sinn das System so zu ändern dass es über den IRQ 1 läuft und nen Buffer verwendet?

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 21. March 2005, 16:53 »
Wenn du z.B. eine Funktion bereitstellen willst, die alle aktuell gedrückten Tasten zurückgibt, ist die Verwendung des IRQ nützlich.

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 21. March 2005, 17:09 »
Stimmt...
Ich werd mal mit dem Keboard-Treiber von GazOS (http://sourceforge.net/projects/gazos) experimentieren.

elfish_rider

  • Beiträge: 293
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 21. March 2005, 20:45 »
Ich kriege eine Fehlermeldung beim Versuch, GazOS herunterzuladen.

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 21. March 2005, 20:52 »
auf der projekt seite gibts nen richtigen download: http://sourceforge.net/projects/gazos/
Dieser Text wird unter jedem Beitrag angezeigt.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #5 am: 22. March 2005, 10:08 »
ich benutze die methode mit den irqs, alles andere ist unnötiges polling!
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

lobmann

  • Beiträge: 243
    • Profil anzeigen
    • http://www.fallek.de.vu
Gespeichert
« Antwort #6 am: 22. March 2005, 11:29 »
Du kannst auch einen Mischmasch verwenden, bei der Funktion getche() willst du ja nen Polling erreichen. Also du könntest beim Aufruf dieser Funktion deinen Standart Treiber deaktivieren in dem du Irq 1 maskierst, aber ansonsten würd ich halt ganz normal über die interrupts gehen.
Man kann doch nem alten Mann nicht in den Bart spucken und sagen es hat geschneit

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #7 am: 22. March 2005, 11:34 »
ich hab dafür einen buffer, den ich pollen kann ;)
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #8 am: 22. March 2005, 14:42 »
Hiho,

ich finde du solltest auf jeden Fall mit Interrupts arbeiten, weil wenn du mal Multitasking hast, würde dein Code laufen, obwohl er ja eigentlich "nur" warten sollte. d.h. er blockiert alle anderen Tasks. Wenn du mit Interrupts arbeitest, kannst du einfach schreiben, das der Prozess der getch aufruft, erst wieder ins Scheduling beinbezogen werden soll, wenn IRQ1 ausgelöst wird.

MfG GhostCoder
A man, a legend!

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 22. March 2005, 16:42 »
An Multitasking hab ich bisher gar nicht gedacht, ich hab halt keine echte Vorstellung wie ich das einbaue  :oops:
Nochmal danke an alle. Ich werd dann mal nen IRQ-Keyboardtreiber schreiben.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #10 am: 23. March 2005, 09:32 »
Zitat von: GhostCoder
Hiho,

ich finde du solltest auf jeden Fall mit Interrupts arbeiten, weil wenn du mal Multitasking hast, würde dein Code laufen, obwohl er ja eigentlich "nur" warten sollte. d.h. er blockiert alle anderen Tasks. Wenn du mit Interrupts arbeitest, kannst du einfach schreiben, das der Prozess der getch aufruft, erst wieder ins Scheduling beinbezogen werden soll, wenn IRQ1 ausgelöst wird.

MfG GhostCoder


oder dann gleich mit nem messagesystem, dass man keinen buffer mehr nimmt, sondern allen tasks (oder nur dem, dessen fenster in der GUI aktiv ist, dann kann man keinen keylogger bauen) einfach ne MSG per messagesystem sendet, und der darauf wartet, dann blockiert er nicht alles...
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #11 am: 23. March 2005, 17:51 »
Ja, Wichtige Hotkeys gehen an nen System-Task, alles andere an die aktive Anwendung. Erinnert mich ein wenig an Windows. Da kriegt die Callback-Funktion auch die Message, dass ne Taste gedrückt wurde und den Tastencode kann man dann aus nem Parameter lesen.

joachim_neu

  • Beiträge: 1 228
    • Profil anzeigen
    • http://www.joachim-neu.de
Gespeichert
« Antwort #12 am: 27. March 2005, 10:22 »
genau.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

System: 256 RAM, GeForce 2 MX 400, AMD Athlon XP 1600+, Windows XP, 1x Diskette, 1x DVD-ROM, 1x CD-R(W) Brenner,...

 

Einloggen