Kodierung der Mauszeigerposition mit echo

FatManStanding

Lieutenant
Registriert
Aug. 2021
Beiträge
564
Hallo,

man kann einige Modelle des Raspberry Pi als HID-Device nutzen und z. B. als Maus oder Tastatur an einen Rechner anschließen. In meinem Fall habe ich "tinypilot" installiert. Die Steuerung der Maus geht dann z. B. so:

Code:
/bin/echo -ne "\0\x45\x14\x58\x4c\0\0" > /dev/hidg1

Die Funktion des ersten Wertes (\0) habe ich noch nicht erkannt. Der 2. und 3. sowie 4. und 5. Wert scheinen die Mauszeigerposition anzugeben. Hab ich eher durch probieren herausbekommen. Der 3. Wert gibt im Hexadezimalsystem in 15er Schritten die Position vom linken Rand aus an, x00 = 0, x01 = 15, x0f = 225, x10 = 240. Der 2. Wert ändert den 3. Wert um -1 oder einen positiven Wert. x00 ist -1, x01-x11 ist 0, x12-x22 = +1, x23-x33 ist +2 usw.

Hat das ganze einen Namen? Ist das nur bei diesem einem Projekt so oder ist das "normal"?
 
Da wird aber nicht erklärt wie sich das Zeichensystem nennt (falls das Schema überhaupt einen Namen hat) und wie man die in normale dezimale Werte umrechnen kann. Der Abstand von oben wird, so wie ich das gerade ausgelesen habe, nochmal komischer angegeben. Beim Abstand waren es immer 15er Schritte, jetzt sind es mal 8er, mal 9er.

Code:
x00        0
x01        8        +8
x02        16        +8
x03        25        +9
x04        33        +8
x05        42        +9
x06        50        +8
x07        59        +9
x08        67        +8
x09        75        +8
x0a        84        +9
x0b        92        +8
x0c        101        +9
x0d        109        +8
x0e        118        +9
x0f        126        +8
x10        134        +8
 
Gibt es eine Möglichkeit sowas umzurechnen, sowohl für diese 15er als auch für die 8er/9er "Sache"?
 
Das werden einfach zwei 16-Bit Hexadezimalzahlen in Big Endian sein. Also

\x45\x14 = 0x1445 = 5189
\x58\x4c = 0x4c58 = 19544

Konnte nicht direkt rausfinden wer oder was für dieses hidg1-Gerät zuständig ist aber für absolute Maus-Koordinatensysteme scheint üblich zu sein [0,0] für die obere linke Ecke, [32767, 32767] für die untere rechte.

In deinen Tests zählst du wahrscheinlich Bildschirmpixel, von denen du deutlich weniger als 32767 pro Achse haben wirst. Darum sind so viele Zwischenwerte äquivalent.

Shells sind übrigens nicht so gut geeignet um damit Binärdaten zu schreiben weil die nicht mit null-bytes umgehen können. Schätze das hast du schon bemerkt weshalb du auch /bin/echo ausschreibst damit nicht das von der Shell bereitgestellte echo benutzt wird.
 

Ähnliche Themen

T
Antworten
4
Aufrufe
1.967
Tobias4Rock
T
Zurück
Oben