Was ich wirklich wissen möchte, ist, ob es sich um ein Hardware- oder ein Softwareproblem handelt. Könnte ich mein Android-Handy über USB an einen Computer anschließen und es als Hardwaretastatur verwenden lassen? Ich möchte nichts auf dem Computer installieren, ich möchte, dass sich Android wie die Standardhardware verhält.
Bearbeiten: Erläuterung Ich möchte ein Programm / eine Bibliothek für Android schreiben, mit dem das Gerät eine normale Tastatur vollständig emulieren kann, sodass das Betriebssystem sie als Standardtastaturgerät meldet und sie im BIOS oder an einer anderen Stelle als einer Tastatur funktioniert funktioniert.
Antworten:
Ich habe den Kernel auf Nexus 7 so modifiziert, dass er sich wie eine Standard-HID-Tastatur und -Maus verhält, ohne die MTP / ADB / andere USB-Funktionalität zu verlieren.
Sie können das Befehlszeilenprogramm usb-gadget-test verwenden, um Tastenanschläge und Mausbewegungen an Ihren PC zu senden. Ich möchte später eine Remote-Administrator-App erstellen, die wichtige Ereignisse sendet und Videos von der Kamera empfängt.
Kernel-Patch, Binärdateien und Anweisungen: https://github.com/pelya/android-keyboard-gadget
Bearbeiten: Ich habe eine richtige App für Google Play veröffentlicht. Wenn Ihr Nexus 7 gerootet ist, können Sie den Kernel direkt aus der App flashen und damit Tastendrücke senden.
quelle
Die meisten USB-Tastaturen benötigen zum Ausführen Treiber. Alle Tastaturfunktionen (nicht standardmäßige Tasten), die über die Funktionen der Standard-HID-Treiber hinausgehen, müssen Software auf dem Computer installieren.
Abgesehen davon ist es möglicherweise möglich, die USB-Funktionen von Android zu verwenden und einen benutzerdefinierten Treiber zu schreiben, wenn die Standard-HID nicht ausreicht, um Ihr Ziel zu erreichen. Es ist wahrscheinlich ein sehr nicht triviales Unterfangen.
Bearbeiten: Ich denke, KristopherMicinski hat Recht, dass das Maß an Kontrolle, das Sie mit der Standard-Android-USB-API erhalten, für diesen Zweck unzureichend ist. Seine beiden Lösungen zum Ändern der Firmware für die Kommunikation mit HID-Standards sowie ein Hardware-Vermittler, der vom Android-Zubehörprotokoll in HID übersetzt, scheinen mir beide gültig zu sein. Wenn die Installation von Treibern auf dem Computer nicht in Frage kommt, sind dies möglicherweise die einzigen beiden Optionen.
Wenn Sie jedoch bereit sind, einen Treiber für dieses Verhalten zu installieren, sollte es möglich sein, einen benutzerdefinierten Treiber zu schreiben, der das Android-USB-Protokoll verarbeiten kann, und ihn korrekt in die richtigen Anrufe / Interrupts für die Tastaturfunktionalität zu übersetzen. Wenn Speicherplatz zur Verfügung steht, musste für jede Peripherietastatur, die ich in den letzten 10 Jahren verwendet habe, ein Treiber installiert werden, um die volle Funktionalität zu gewährleisten. Daher wird dies möglicherweise nicht als nicht standardmäßiges Verhalten angesehen. (Es kommt jedoch nur vor, dass bei diesem Ansatz das Gerät nur innerhalb von Windows als Tastatur fungieren kann, nicht während des Startvorgangs.)
quelle
Sieht so aus, als hätte es endlich jemand getan, es ist ein bisschen hässlich - aber hier ist es:
http://forum.xda-developers.com/showthread.php?t=1871281
Es beinhaltet einige Kernel-Neukompilierungen und ein wenig Bearbeitung, und Sie verlieren teilweise Funktionen (das MDC?). Aber es ist geschafft.
Persönlich würde ich jetzt, da ich die "wahren Kosten" sehe, wahrscheinlich einen kleinen Adapter für einen Teency oder so etwas zusammenstellen - vorausgesetzt, Android kann über USB mit seriellen Geräten kommunizieren. Aber das basiert auf der Tatsache, dass ich ein Samsung habe und sowieso ein spezielles Kabel benötigen würde, um eine USB-Verbindung herzustellen - kein zusätzlicher Schmerz, um ein kleines Gerät am Ende zu haben, wenn ich das verdammte Kabel trotzdem herumtragen muss.
quelle
Anscheinend hat es jemand getan, indem er den Kernel gepatcht hat. Ich bin gerade auf einen Artikel mit dem Titel "Nutzung der USB-Konnektivität von Smartphones für Spaß und Gewinn" von Angelos Stavrou, Zhaohui Wang, Institut für Informatik der George Mason University, Fairfax, VA, gestoßen. (frei verfügbar durch googeln des obigen titels). Hier untersuchen die beiden Forscher die Möglichkeit eines kompromittierten Android-Geräts, das den angeschlossenen PC steuert, indem sich das Android-Gerät als HID-Gerät (Tastatur) präsentiert. Als Proof of Concept scheint es, dass sie einen Kernel erfolgreich gepatcht haben, der genau das tut, was Sie wollen. Sie haben keine detaillierten Schritte angegeben, aber ich zitiere trotzdem nur, was sie gesagt haben:
quelle
Ich könnte nur sehen, dass dies möglich ist, wenn Sie:
oder
(Je nachdem, wie viel Arbeit Sie erledigen möchten, kann es sich also um ein Hardware- oder Softwareproblem handeln.)
quelle
Ich glaube, dass Sie dies tun können, wenn Sie ein gerootetes Gerät mit einem aktuellen Android haben. Der Asus Eee Pad Transformer mit Android 4 verfügt beispielsweise über die Bibliotheken/system/lib/libusb.so
und/system/lib/libusbhost.so
Sie können eine Java-Anwendung schreiben, die sie mithilfe von JNI aufruft, um eine USB-Tastatur zu emulieren. Dies bedeutet, dass Sie einen Kleber-C-Code schreiben müssen, der die Art und Weise emuliert, wie eine USB-Tastatur mit einem PC kommuniziert (= Sie müssen die Funktionsweise des USB-Protokolls untersuchen).Ich sage "gerootet", weil normalerweise einige Berechtigungen erforderlich sind, um diese Bibliotheken zu verwenden.Bearbeiten: Das oben Gesagte gilt, wenn Sie ein Android-Gerät so programmieren, dass es als USB-Host fungiert. In Ihrem Fall müssen Sie ein "Gadget" sein. Ich weiß nicht, wie viel der Linux-Gadget-Funktionalität im Kernel Ihres Android-Geräts enthalten ist. Siehe dies für eine ähnliche Frage.
quelle
Ihr Android identifiziert sich bereits mit einer VID / PID, wenn es an einen Host angeschlossen ist. Es hat bereits eine Schnittstelle für Massenspeicher. Sie müssten den Treiber auf einer niedrigen Ebene hacken, um eine zweite Schnittstelle für 03:01 HID zu unterstützen. Dann wäre es nur eine Frage, Scancodes an den modifizierten Treiber zu senden. Das wäre nicht einfach, aber es wäre ein ordentlicher Hack. Eine Verwendung wäre die Eingabe langer zufälliger Passwörter für Anmeldungen.
quelle
Gib nicht auf. Linux kann dies mit der richtigen Hardware über "USB-Gadgets" tun. Und geben Sie die folgenden Fakten:
Warum ist das alles relevant?
Denn wenn ich ein Linux-Telefon schreibe, weiß ich, was es tun würde und wie es es tun würde. Und die Antwort würde USB-Gadgets beinhalten.
Lesen Sie einen der Links, die hier gepostet wurden,
Ich würde vermuten, dass Sie eine Chance haben würden - aber es würde das Neukompilieren des Android-Kernels / Betriebssystems beinhalten - oder zumindest eine Build-Umgebung, in der Sie den Kernel / könnten / neu erstellen könnten, wenn Sie wollten.
Übrigens habe ich einen Atmel NGW100mkII, der USB-Geräte unterstützt, aber nicht mit dem HID-Modul geliefert wird. Und ich werde das oben Genannte und mehr tun müssen.
quelle
Dies ist möglich, ohne dass zusätzliche Treiber benötigt werden.
Sie können die USB-Tastatur des PCs mit einem kleinen Gerät in USB-Dongle-Größe emulieren und dann mit Ihrem Android-Gerät Tastatur- (und / oder Maus-) Daten über Bluetooth senden.
Schauen Sie sich das beschreibende Video in der Indiegogo-Kampagne an: http://igg.me/at/hiDBLUE/x/3400885
Übrigens: Die technischen Produktdokumente finden Sie hier: http://www.flyfish-tech.com/hiDBLUE
quelle
Sie müssen eine Art Verbindung herstellen, um dieses Android-Out-of-the-Box zu tun, wie über TCP / IP und ADB, also nicht ohne mindestens ADB und einen Listener auf dem Computer zu installieren.
Aber wenn Sie eine Aktivität haben, die die Hardwaretastatur wie Daten über USB sendet, warum dann nicht? Wird wohl nicht einfach sein. An diesem Punkt kommt die Antwort des Usuas-Forums sofort: "Warum änderst du nicht deine Pläne und ..." :)
quelle
Einige andere haben herausgefunden, dass dies falsch ist. In der Zwischenzeit teile ich ihre Meinung. Es tut mir Leid.
Alte falsche Antwort:
Meiner Meinung nach ist dies kaum möglich.
Ihr Computer identifiziert jedes USB-Gerät mit dem USB-Gerätedeskriptor oder dem USB-Schnittstellendeskriptor. Um Ihr Android-Gerät als Tastatur verwenden zu können, müssten Sie diese ändern. Eigentlich denke ich, dass diese auf einem ROM im Gerät gespeichert sind, so dass Sie die Hardware ändern müssten. Das Gerät muss sich mit dem Host identifizieren, auch wenn es nur im ausgeschalteten Zustand aufgeladen wird (muss den USB-Host über den Stromverbrauch informieren, sonst nur wenige mA max). Für mich weist dies in die Richtung, dass Sie die Hardware wechseln müssten
Der "einfachste" Weg wäre wahrscheinlich, einen Adapter zusammenzubauen, der einen USB-Host-Chip mit einem µC enthält, der die empfangenen Daten (die Sie noch über USB senden mussten) in ps / 2- oder USB-Client-Signale konvertiert, die Sie an den Computer senden.
Meiner Meinung nach wäre der einfachste Weg: Kaufen Sie eine dieser Tastaturen, die Sie rollen und auch in Ihre Tasche stecken können.
quelle
Ich bin etwas spät dran, um diese Frage zu kommentieren, aber es könnte für einige andere Leute nützlich sein.
Sie können Ihr Android-Telefon so gestalten, dass es wie Tastatur, Maus, Kamera, Sound-Streaming-System und Tethering-Gerät funktioniert. Kurz gesagt, welches USB-Gerät Sie auch immer auf dem Markt sehen und bis und solange die Hardware Sie nicht einschränkt. B. Geschwindigkeit oder Gadget-Oberfläche nicht verfügbar.
Es gibt zwei Arten von USB-Geräten: Host und Gadget. Das Gadget-Gerät verhält sich also wie ein Client und verfügt normalerweise über eine USB-Schnittstelle in den meisten Telefonen. Am Ende des Gadgets können Sie Ihr Telefon so einstellen, dass es sich wie ein anderes Gerät verhält, indem Sie zwischen verschiedenen Konfigurationen wechseln (Sie tun dies bereits, wenn Sie in die USB-Einstellungen gehen und Ihr Gerät als Massenspeicher oder etwas anderes einrichten).
Aber um all dies zu tun, müssen Sie den Android-Kernel modifizieren. Wenn Sie ein Android-Geräteentwickler sind, können Sie es sicher tun.
quelle
Ich habe hier einige Erfahrungen als Benutzer. Die naheliegendste Lösung ist über TCP / IP über ein Client / Server-Modell. Viele der verfügbaren Tools wie Airkeyboard (http://www.freenew.net/iPhone/air-keyboard-111/171415.htm) verwenden diese Methode zum Erstellen eines Tastatur- / Mausersatzes mit einem Smartphone-Betriebssystem. Beachten Sie, dass bei der Implementierung einige Sicherheitsprobleme auftreten. Sie müssen beispielsweise angemeldet sein, um die Serverkomponenten nutzen zu können.
Andere plattformübergreifende Tools (dh Windows / Mac, die eine andere Windows / Mac-Instanz steuern) verwenden einen ähnlichen Ansatz. Siehe Synergie: http://synergy-foss.org/
quelle