Autor Thema: Serielle Maus  (Gelesen 5368 mal)

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« am: 30. January 2006, 18:01 »
Hallo,

ich bin gerade dabei einen seriellen Maustreiber zu schreiben (PS/2 habe ich schon). Das aktivieren der Maus, Bautrate einstellen etc. habe ich schon. Es wird auch der IRQ4(COM1) oder IRQ3(COM2) aufgerufen. Der Code des IRQ muss den Port 3F8h(COM1) oder 2F8h(COM2) einlesen. Das erste ist für die Tasten, das zweite für die XPosition und das dritte für die YPosition. Für jeden wird der IRQ erneut aufgerufen. Das mit den Tasten habe ich auch schon. Wenn bit 16 oder 32 gesetzt ist, wurde die rechte oder linke Taste gedrückt. Aber bei der X und Y Position verstehe ich das nicht. Welche Zahl steht dann da drin? Muss ich die Zahl umwandeln? Ich verstehe das nicht so ganz. Gefunden habe ich leider auch nichts darüber. Vielleicht wisst ihr ja mehr. Danke!!!

bitmaster
In the Future everyone will need OS-64!!!

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 30. January 2006, 18:15 »
Bei dem Standardprotokol (Ich glaube das hieß Microsoft Protokol :/ ) wird von der Maus bei jeder änderung ein 3 Byte Code gesendet. Für jedes Byte wird ein IRQ ausgelöst.
Der Aufbau ist folgendermaßen:

Byte1   Byte2   Byte3
1LRYYXX 0xxxxxx 0yyyyyy

L        = linke  Maustast
R        = rechte Maustaste
YYyyyyyy = Bewegung der Y-Achse
XXxxxxxx = Bewegung der X-Achse
db 0x55AA

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #2 am: 30. January 2006, 21:08 »
Zitat von: Osbios
Bei dem Standardprotokol (Ich glaube das hieß Microsoft Protokol :/ ) wird von der Maus bei jeder änderung ein 3 Byte Code gesendet. Für jedes Byte wird ein IRQ ausgelöst.
Der Aufbau ist folgendermaßen:

Byte1   Byte2   Byte3
1LRYYXX 0xxxxxx 0yyyyyy

L        = linke  Maustast
R        = rechte Maustaste
YYyyyyyy = Bewegung der Y-Achse
XXxxxxxx = Bewegung der X-Achse
Vielen dank. Aber das weiß ich ja schon. Wie sind die Bewegungs Bytes denn aufgebaut? Ich meine woher weiß man ob es nach rechts/links bzw. oben unten geht? Sind nur die ersten 6 Bits belegt?

bitmaster
In the Future everyone will need OS-64!!!

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 30. January 2006, 21:16 »
Was ist hiermit?!?
Sieht so aus, als ob die Differenz in diesen Bytes steht. Du müsstest also Byte2 zu deiner X-Position und Byte3 zur Y-Position addieren.

SSJ7Gohan

  • Beiträge: 398
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 30. January 2006, 21:17 »
Ohne mich mit der Maus beschäftigt zu haben, würde ich sagen, du addierst einfach die Bytes und interpretierst die höchstwertige Stelle als Vorzeichen.

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 30. January 2006, 21:18 »
Du Bildest aus XX und xxxxxx ganz einfach einen sign Byte (-128..127) !
db 0x55AA

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 30. January 2006, 21:27 »
Zitat von: DarkThing
Was ist hiermit?!?
Sieht so aus, als ob die Differenz in diesen Bytes steht. Du müsstest also Byte2 zu deiner X-Position und Byte3 zur Y-Position addieren.

Das ist aber das PS/2 Protokol! (PS/2 Mouse <> RS-232 Mouse)

Zitat von: DarkThing
Ohne mich mit der Maus beschäftigt zu haben, würde ich sagen, du addierst einfach die Bytes und interpretierst die höchstwertige Stelle als Vorzeichen.

Hää  ?.?

Also um es nocheinmal ganz deutlich zu machen:
Die Bytes XX und xxxxxx werden so zusammengesetzt:    XXxxxxxx
Bit 76543210
Das selbe gilt für YY mit yyyyyy!

Dieser Wert ist ein sign Byte siehe: http://de.wikipedia.org/wiki/Zweierkomplement
db 0x55AA

DarkThing

  • Beiträge: 652
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 30. January 2006, 21:41 »
Zitat von: Osbios
Zitat von: DarkThing
Was ist hiermit?!?
Sieht so aus, als ob die Differenz in diesen Bytes steht. Du müsstest also Byte2 zu deiner X-Position und Byte3 zur Y-Position addieren.

Das ist aber das PS/2 Protokol! (PS/2 Mouse <> RS-232 Mouse)

Kommt das nicht im Prinzip aufs selbe raus? Also, dass man so oder so die gleichen drei Bytes kriegt?

Zitat von: Osbios
Zitat von: DarkThing
Ohne mich mit der Maus beschäftigt zu haben, würde ich sagen, du addierst einfach die Bytes und interpretierst die höchstwertige Stelle als Vorzeichen.

Hää  ?.?

 :shock: Was isn das für ein Satz!? Egal, gemeint war sicher sowas:

int mouse_xpos, mouse_xpos;

void change_pos(int byte0, int byte1, int byte2)
{
    mouse_xpos += byte1;
    mouse_ypos += byte2;
}

Alle Variablen sind natürlich signed ints!
EDIT: Wo steht dieser Satz?

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #8 am: 30. January 2006, 21:58 »
@Osbios: Du scheinst das vor kurtzem gemacht zu haben ;). Danke es funktioniert. Nur ist es genau umgekerht mit dem Vorzeichenbit als bei der PS/2 Maus. Oben/unten und rechts/links sind vertauscht. Aber dazu muss man ja einfach nur das Vorzeichenbit ändern. Also wenn es auf Null ist, zu eins machen und wenn es auf eins ist, zu Null machen. Wie mache ich das am besten? Mir fällt gerade nur die test XX,10000000b variante ein. Gibt es eine bessere, das Bit zu not(ten)?

Danke!!!
In the Future everyone will need OS-64!!!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #9 am: 30. January 2006, 22:02 »
jopp. :) xor al, 10000000b kehrt das hoechste bit von al um.
[/list]
Dieser Text wird unter jedem Beitrag angezeigt.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #10 am: 30. January 2006, 22:06 »
Zitat von: PorkChicken
jopp. :) xor al, 10000000b kehrt das hoechste bit von al um.
[/list]
Aua, misst ich hatte noch genau daran gedacht. Aber igendwie kam ich auf die blödsinnige Idde das, dass Bit nicht verändert wird, wenn beide eins sind. Ich war ein bisschen durcheinander.

Danke!!!
In the Future everyone will need OS-64!!!

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #11 am: 30. January 2006, 22:10 »
Ach, ich habe gerade gemerkt das link/rechts gar nicht vertauscht ist sondern nur oben/unten.

bitmaster

EDIT: Und außerdem muss ich nicht das Vorzeichenbit mit xor umdrehen. Es muss so gemacht werden:

not XX
inc XX

Jetzt ist mein Serieller Maustreiber fertig.

Danke an alle.
In the Future everyone will need OS-64!!!

 

Einloggen