Android Kernel Maustreiber

D

damienlazereth

Neues Mitglied
0
Hallo,
kurz und knapp.

Habe einen AR1100. Dieser fungiert als HID Maus unter Windows.

In Android sehe ich ihn am OTG USB Port, doch leider wird keine "Maus" daraus.

Ist es möglich die ID des AR1100 einer Maus zuzuordnen?

LG
 
Ich habe den AR erst unter Windows Kalibriert und danach den Modus auf Maus gewechselt.

Mit USB Device Info wird er mir in Android als HID Mouse Angezeigt.
Mit USB HID Terminal kann ich Daten empfangen .
USB OTG ist drauf. Normal USB Maus funktioniert.

In ein paar anderen Foren haben die auch Probleme unter Android.
Nur leider keine Lösungen.

Deswegen meine Gedanken an den Kernel und den fehlenden Zuordnungen.
 
Schau mal in Android mit
Code:
"cat /proc/bus/input/devices"
ob und wie es erkannt wurde. Poste mal die Ausgabe hier
Wenn es dort auftauchen sollte, dann schau dir die zugehörige Zeile Sysfs an. Du gibst dann
Code:
cat /sys/DEINE_SYSFS_ZEILE/uevent
ein und schaust mal ob dort die Zeile DRIVER auftaucht, falls nicht dann das selbe nochmal mit
Code:
cat /sys/DEINE_SYSFS_ZEILE/device/uevent
(Edit: solltest du auch eingeben, wenn oben schon ein Driver ausgespuckt wurde, da es manchmal unterschiedlich sein kann)
Teile dann mit, ob und mit welcher Treiber dem Gerät zugeordnet wurde.

Wenn es erkannt wurde, kannst du auch mal
Code:
getevent -lt /dev/input/eventX
statt X nimmst du dann die event Nummer der Maus aus der cat Ausabe, wenn du dann Eingaben an deinem Gerät tätigst müssten sie im Terminal sichtbar sein.
Mehr über getevent findest du auf https://source.android.com/devices/tech/input/getevent.html

Lass mal bitte die Apps Apps sein und überprüfe die Daten über das Terminal. Ausgaben über Apps bringen dich da nicht viel weiter.
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: damienlazereth
u0_a38@android:/ $ cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rk29-keypad"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/rk29-keypad/input/input0
U: Uniq=
H: Handlers=kbd event0 keychord
B: PROP=0
B: EV=3
B: KEY=8000 100000 0 0 0

I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="rkxx-remotectl"
P: Phys=gpio-keys/input0
S: Sysfs=/devices/platform/rkxx-remotectl/input/input1
U: Uniq=
H: Handlers=kbd event1 keychord
B: PROP=0
B: EV=3
B: KEY=70010 200000 0 0 0 100 2000000 7801000 40008800 1e16c0 1 78000000 10004ffc

I: Bus=0003 Vendor=04d8 Product=0c02 Version=0111
N: Name="Microchip Technology Inc. AR1100 HID-MOUSE"
P: Phys=usb-usb20_otg-1/input0
S: Sysfs=/devices/platform/usb20_otg/usb1/1-1/1-1:1.0/input/input2
U: Uniq=
H: Handlers=event2
B: PROP=0
B: EV=1b
B: KEY=70000 0 0 0 0 0 0 0 0
B: ABS=3
B: MSC=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="Virtual touchscreen"
P: Phys=virtual_ts/input0
S: Sysfs=/devices/virtual/input/input4
U: Uniq=
H: Handlers=event4
B: PROP=2
B: EV=9
B: ABS=2608000 3

u0_a38@android:/ $ cat /sys/devices/platform/usb20_otg/usb1/1-1/1-1:1.0/input/input2/uevent
PRODUCT=3/4d8/c02/111
NAME="Microchip Technology Inc. AR1100 HID-MOUSE"
PHYS="usb-usb20_otg-1/input0"
UNIQ=""
PROP=0
EV=1b
KEY=70000 0 0 0 0 0 0 0 0
ABS=3
MSC=10
MODALIAS=input:b0003v04D8p0C02e0111-e0,1,3,4,k110,111,112,ra0,1,m4,lsfw

u0_a38@android:/ $ cat /sys/devices/platform/usb20_otg/usb1/1-1/1-1:1.0/input/input2/device/uevent
DEVTYPE=usb_interface
DRIVER=usbhid
DEVICE=/proc/bus/usb/001/002
PRODUCT=4d8/c02/101
TYPE=0/0/0
INTERFACE=3/1/2
MODALIAS=usb:v04D8p0C02d0101dc00dsc00dp00ic03isc01ip02

getevent lifert "Permission denied"
 
getevent muss du mit Rootrechten eingeben, also zu vor ein "su" ;)
 
  • Danke
Reaktionen: damienlazereth
hmm.. was soll mir das sagen :confused2:

u0_a38@android:/ $ su getevent -l /dev/input/event2
/dev/input/event2[1]: syntax error: '(' unexpected
1|u0_a38@android:/ $ su getevent -lt /dev/input/event2
sh: sh: -t: unknown option
1|u0_a38@android:/ $ su getevent -lp /dev/input/event2
sh: sh: - : unknown option
1|u0_a38@android:/ $ su getevent -i /dev/input/event2
sh: sh: - : unknown option
 
jetzt mal ernsthaft:
Bevor du meinst am Kernel herumdoktoren zu müssen, solltest du dir unbedingt Linux und Android Grundlagen aneignen! Grundlagen wie Umgang mit root sollten dir bekannt sein. Wie möchtest du bitte etwas am Kernel ändern, wenn du Null Ahnung vom System hast!

Lies dir mal Root durch sowie die vielen Threads hier im Forum, die Root, su und den Umgang damit dir erklären. Dann wirst du sicher den Befehl auch eigenständig richtig eingeben können. Erst dann können wir hier weitersehen.
 
  • Danke
Reaktionen: damienlazereth
sorry das ich Linux nicht so gut kann.
Hab zuviel mit G-Code im Kopf.. da geht manches verloren.

Jeder Anfang ist halt ein wenig anders.

Ich hoffe du hast trotzdem nicht die Lust verloren mir weiter zu helfen.

getevent -l bricht bei mir "syntax error: '(' unexpected" ab.
getevent -lt bekomm ich ja leider nicht hin....

hier noch mal das was kommt bei Schalter -l und berühren des Screens

u0_a38@android:/ $ su geteve: not foundinput/event2
/dev/input/event2[2]:o#: not fouoB o o o ov ox o= oA oC o o o o6 o< o
/oov/inpo:/event2[61]: co@'t createoo,
o1 o o7O o,O oLO ohn oln womn o;r o;r oHr o o o o
o.

o
o
o
v o
oa
o~
nI o
o o!I
o8I
fP o<
o= oP
oP
_yd o
o o}d
o~d
Z0p o
o o3p
oEp
R oI
oK o
o
Mz o
o}
o
o(
G o
o
o
A o
o=
: oA
oB
o
2 o
}o
o
+: File name too long
/dev/input/event2[61]:
not found
/dev/input/event2[61]:
soQ: not found
/dev/input/event2[61]:
oG
: not found
^[[?1;2c/dev/input/event2[62]: syntax error: ')' unexpected
1|u0_a38@android:/ $ 1;2c
 
Hast du den verlinkten Artikel gelesen und verstanden?
Du gibst zuerst nur "su" ein, so dass du eine Rootshell hast. Danach, also in einer neuen Zeile den getevent Befehl.

Das hat nichts mit "Linux nicht so gut können" zu tun. Du bist hier im DEVELOPER Unterforum, startest einen Thread um deinen Kernel zu ändern, dann musst du auch Ahnung und wissen vom System haben.

Besitzt du den Kernelquellcode deines Android Geräts?
Hast du schon mal einen Kernel kompiliert? Hast du den Kernel deines Android schon kompiliert und ihn auf deinem Gerät installiert?
Wenn du so tief in dein System eingreifen willst, dann musst du das können.

Da du an deiner Ausgabe selber nichts erkennst: kurze Interpretation: Deinen Befehl hat er immer noch nicht ausgeführt, das was du da als Ausgabe siehst ist die direkte Eingabe von deinem Gerät und nicht die Rohdaten die getevent eigentlich ausspucken sollte.

Dein Gerät wird also als Input Gerät erkannt, jedoch wohl als Tastatur und nicht als Maus,
Nun hättest du 2 Möglichkeiten:
1. usbhid mit der Vendor, Product ID und dem Quirk 0x40 laden
Das ist unter Android nicht ganz einfach, da unter Android modprobe nicht funktioniert. Du könntest versuchen das direkt ins sysfs von usbhid zu schreiben, evtl. funktioniert das. Natürlich brauchst du dafür Root. Wenn es funktionert, dann muss du es auf diesem Weg nach jedem Boot manuell machen. Wenn du das nicht willst, solltest du überlegen dein Gerät mit init.d auszustatten.
2. es am Kernel ändern, dazu muss du natürlich den Kernel Quellcode deines Geräts haben, wissen wie man es kompiliert und auf deinem Gerät installiert.
Dein Gerät machst du unter drivers/hid/hid-ids.h bekannt und fügst es in drivers/hid/usbhid/hid-quirks.c mit HID_QUIRK_MULTI_INPUT in die List der Blacklists

HID_QUIRK_MULTI_INPUT entspricht 0x40. Dieser Quirk st nur eine Vermutung von mir, könnte auch sein, dass es eine der anderen Quirks sein kann. Die Quirks findest du unter include/linux/hid.h ab ca. Zeile 270

Mehr Info als das kann ich dir nicht geben. Wenn du damit nichts anzufangen weißt, dann liegt es nun mal an den fehlenden Grundlagen bei dir. Das kann dir nun mal keiner abnehmen.
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: damienlazereth
Danke für deine Geduld.
Deine Infos sind für mich sehr nützlich.
Ja es fehlen mir Grundlagen zu Linux... Bin aber Lernwillig.

Mit dem Befehl hattest du absolut recht.

Abhilfe.... su wie du gesagt hast zuerst ausgeführt...
siehe da.. gleich ne andere Ausgabe...:sad:

Sieht das für dich wie eine Maus aus? XY Koordinaten und Buttons?
[ 8898.742083] EV_SYN SYN_REPORT 00000000
[ 8898.785109] EV_ABS ABS_X 000001f8
[ 8898.785113] EV_ABS ABS_Y 00000919
[ 8898.785114] EV_SYN SYN_REPORT 00000000
[ 8898.786080] EV_MSC MSC_SCAN 00090001
[ 8898.786082] EV_KEY BTN_LEFT DOWN
[ 8898.786098] EV_SYN SYN_REPORT 00000000
[ 8898.787083] EV_ABS ABS_X 000001f5
[ 8898.787086] EV_ABS ABS_Y 00000915
[ 8898.787087] EV_SYN SYN_REPORT 00000000
[ 8898.818089] EV_ABS ABS_X 000001f1
[ 8898.818094] EV_ABS ABS_Y 00000910
[ 8898.818095] EV_SYN SYN_REPORT 00000000
[ 8898.841084] EV_ABS ABS_X 000001ec
[ 8898.841088] EV_ABS ABS_Y 0000090c
[ 8898.841090] EV_SYN SYN_REPORT 00000000
 
Dann gib auch mal diesen Befehle ein:
getevent -lp /dev/input/event2

(su brauchst du nicht mehr, da du schon eine Rootshell hast)
 
  • Danke
Reaktionen: damienlazereth
Hab jetzt noch mal eine normale Maus angeschlossen.
Diese sendet Ihre Daten mit EV_REL..
Ich denke mal das soll relativ heißen.

Bevor ich dir wieder Löcher in den Bauch frage wo der unterschied ist und ob Mäuse und Touchscreen das gleiche sind... Frag ich lieber wo ich die Grundlagen über sowas finde....

Der ursprüngliche Beitrag von 19:56 Uhr wurde um 20:01 Uhr ergänzt:

Ohje.. ich befürchte schlimmes.... Nenn mich schon mal NOOB....

Wenn ich die Ausgabe richtig deute sind das die Maximalwerte für die Koordinaten...?!
u0_a38@android:/ $ su
root@android:/ # getevent -lp /dev/input/event2
add device 1: /dev/input/event2
name: "Microchip Technology Inc. AR1100 HID-MOUSE"
events:
KEY (0001): BTN_LEFT BTN_RIGHT BTN_MIDDLE
ABS (0003): ABS_X : value 2530, min 0, max 4095, fuzz 0, flat 0, resolution 0
ABS_Y : value 2330, min 0, max 4095, fuzz 0, flat 0, resolution 0
MSC (0004): MSC_SCAN
input props:
<none>
root@android:/ #

Und wenn das Absolutwerte auf dem Display sind passen die Koordinaten fast nie übereinander?!
 
*lach*, nein, das ist schon keine Grundlage mehr. Was du eigentlich bräuchtest, sind die Sachen davor, z.B. eben wie man mit Root umgeht oder eben auch mal einen Kernel kompiliert, das muss da dann auch auf einem Linux PC machen.
Um das Problem zu lösen, würdest du dann immer noch Hilfe brauchen.
Dokumentiert findest du diese Ausgaben unter https://www.kernel.org/doc/Documentation/input/event-codes.txt

Vom falsch eingegeben Befehl hätte ich auf Tastatur getippt, nun ist es ein Touchscreen. Bis du sicher, es unter Windwos auf Maus gestellt zu haben?

Gib mal bitte den oben geposteten Befehl ein und poste die Ausgabe, dann versuchen wir mal was ins SYSFS zu schreiben.

Der ursprüngliche Beitrag von 20:04 Uhr wurde um 20:17 Uhr ergänzt:

Jetzt habe ich mir doch tatsächlich die Spezifikationen des Geräts angesehen
HID-MOUSE Mouse, absolute coordinates 0-4095 HID x04D8 x0C02 FULL
passt also, wie vom System erkannt, eine Maus mit absoluten Koordinaten. Jedoch kann wohl Android damit nicht umgehen. Änderungen am Kernel würde dir da nichts bringen.

Was für ein Android Gerät und Android Version hast du?
 
  • Danke
Reaktionen: damienlazereth
Q7 mit Android 4.2.2
Kernel 3.0.36+

Q7 RK3188T Bluetooth v4.0 Android 4.2 TV BOX HDMI HDD Player XBMC External 2.4GHZ Wifi Antenna Ethernet Port BT v4.0 -Black - GeekBuying.com

ROM
[ROM Download] Custom Rom for Q7 tv box rk3188-t quad core - Geek Gadgets

Der ursprüngliche Beitrag von 20:24 Uhr wurde um 20:28 Uhr ergänzt:

root@android:/ # getevent -lp /dev/input/event2
add device 1: /dev/input/event2
name: "Microchip Technology Inc. AR1100 HID-DIGITIZER"
events:
KEY (0001): BTN_TOOL_FINGER* BTN_TOUCH
ABS (0003): ABS_X : value 2482, min 0, max 4095, fuzz 0, flat 0, resolution 0
ABS_Y : value 3583, min 0, max 4095, fuzz 0, flat 0, resolution 0
MSC (0004): MSC_SCAN
input props:
<none>
root@android:/ #

Das ist der andere Modus der Firmware...
Damit kann ich eine "etwas" (Runder Kreis) über das System bewegen.
 
Das Problem liegt an Android.
Mit der jetzigen Konfiguration wird es als Touchpad erkannt. Dieser Kreis ist quasi dein Mauszeiger. Geh mal in die Einstellungen-> Eingabe und Sprache und schau ob du es dort z.B. schneller einstellen kannst.

Dein Problem liegt genauer in https://github.com/android/platform_frameworks_base/blob/master/services/input/EventHub.cpp
Schau es dir mal ab ca Zeile 1100. Eine Maus erkennt es nur mit Relativen Koordinaten (1120)
Akutell bis du bei 1138, also älteres Touchpad.
 
  • Danke
Reaktionen: damienlazereth
Werde mir auch mal das hier durchlesen:
https://source.android.com/devices/tech/input/touch-devices.html

Der AR1100 als Touchpad zu nutzen macht auch gleich mehr Sin.:smile:

Werde mich noch mal hier melden, wenn ich fragen zur Lektüre habe... (hab ich bestimmt)

Wenn du mir noch ein paar Tipps zum Touchpad einrichten mit auf dem Weg geben willst, sind diese herzlich willkommen....
 
Da bist du auf jeden Fall auf der richtigen Fährte.
Ich kann jetzt auch nicht ganz genau sagen, ob es nun als Touchpad oder Touchscreen erkant wurde, das kannst du da aber festlegen.

Du musst dafür eine Datei mit Vendor_XXXX_Product_XXXX.idc erstellen, XXXX mit der jeweiligen ID ersetzen.
Mit dem Inhalt wirst du sicher etwas experimentieren müssen, sollte idealerweise in etwa:
Code:
touch.deviceType = pointer
touch.orientationAware = 0
touch.gestureMode = pointer
aussehen, kann aber auch sein dass das Gerät dann gar nicht mehr reagiert, dann probiere es mit touchPad als device type aus, ansonsten bleibt noch touchScreen, hätte aber zu unkonfiguriert lassen keinen Mehrwert. Bei orientationAware kannst du es auch mal mit der 1 versuchen . Aber hier bist du nun auf dich selber gestellt.

Die Datei erstellst du am besten am PC und kopierst es dann auf das Gerät. Du musst das entweder mit ADB machen und dabei die Systempartition als rw mounten oder an deinem Androiden einen Root Dateimanager nutzen. Die Rechte der Datei musst du auf 0644 setzen
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: damienlazereth
Ich habe gestern noch eine Datei dort erstellt...:
/system/usr/idc/Vendor_XXXX_Product_XXXX_Version_XXXX.idc

Ich habe dazu den Modus vom AR1100 benutz.

root@android:/ # getevent -lp /dev/input/event2
add device 1: /dev/input/event2
name: "Microchip Technology Inc. AR1100 HID-DIGITIZER"
events:
KEY (0001): BTN_TOOL_FINGER* BTN_TOUCH
ABS (0003): ABS_X : value 2482, min 0, max 4095, fuzz 0, flat 0, resolution 0


Im anderen Modus habe ich das ja nicht..
KEY (0001): BTN_TOOL_FINGER* BTN_TOUCH

Natürlich habe ich dann die Rechte vergessen zu setzten.:sad:
Inhalt war in etwa so:
touch.deviceType = touchScreen #will ja nen touchscreen wie beim Handy
touch.orientationAware = 0 # Display Rotiert nicht
touch.gestureMode = spots #Möchte keinen Zeiger verfahren sondern den Zeiger dort haben wo ich den mit dem Finger berühre.

Wie sieht es mit der Größe aus.
Muss ich die Auflösung noch irgendwo eintragen oder berechnet Android das aus ABS_X max und ABS_Y max selber?
xScale = output.width / raw.width ?
yScale = output.height / raw.height ?

Muss ich danach den AR reconnecten oder das System Neustarten?


Note: Historically a touch device with BTN_TOOL_FINGER and BTN_TOUCH was
interpreted as a touchpad by userspace, while a similar device without
BTN_TOOL_FINGER was interpreted as a touchscreen. For backwards compatibility
with current userspace it is recommended to follow this distinction. In the
future, this distinction will be deprecated and the device properties ioctl
EVIOCGPROP, defined in linux/input.h, will be used to convey the device type.

Wenn ich also das Ding als Touchscreen benutzen will, muss ich noch was in der input.h definieren?!
 
Dann setze mal die Rechte und boote neu.

Wie ist den der aktuelle Zustand und was willst du jetzt eigentlich genau erreichen? Lass uns erst mal das abklären.
Soll heißen: Wie bewegt sich nun der Zeiger über den Bildschirm? Kommst du damit in alle Bereiche? Gibt es Einschränkungen? Werden Klicks erkannt? Wie verhält es sich? ...
Und was willst du genau anders haben?

Edit: ich weiß jetzt nicht, ob es wirklich so ratsam ist es als Touchscreen zu benutzen und nicht als Touchpad. Würde ich persönlich auf die Dauer ärgerlich finden, da du so immer genau die richtigen Koordinaten treffen muss und das quasi Blind, da das Bild nicht direkt unter deinem Touchpad ist. Die Koordinaten müsste es im Normalfall selber kalkulieren. Es bekommt sie ja mitgeteilt. Wenn deine Berührungen an falscher Stelle erscheinen sollten, würde ich es erst mit touch.distance.calibration und touch.distance.scale versuchen.
Vergiss mal die input.h, da müsstest du an den Kernel gehen, versuche es mit den Boardmittel zu konfigurieren.
 
Zuletzt bearbeitet von einem Moderator:
  • Danke
Reaktionen: damienlazereth

Ähnliche Themen

C
Antworten
0
Aufrufe
1.212
Cortablo
C
M
  • Moonblast
Antworten
1
Aufrufe
1.125
swa00
swa00
Slinthorax
  • Slinthorax
Antworten
5
Aufrufe
1.819
Kosake77
Kosake77
Zurück
Oben Unten