Forum: PC-Programmierung USB uC Datentransfer mit Scheinmaus


von uuu j. (xarix)


Lesenswert?

Hi,

ich überlege mir, wie ich durch USB und Windows meine Daten druchbringen 
kann, so dass ich diese in ein geschriebene Aplikation verwenden kann. 
z.B Tmperatur.

Ich kann uC ja in USB dies als Maus deklarieren. Beim Plug und Play wäre 
das dann einfach eine Maus und hätte nicht das Treiberproblem.

Dartaus ergeben sie aber Fragen.

Wie kann ich Daten schicken, ohne dass das der eigentliche wirkliche 
Mauszeiger übernimmt?

Wie kann ich, wenn das dann geht. die Daten abholen. Warscheinlich 
irgendwie über Handel.Nur wie.

Oder man schreibt einen Treiber, bzw. es gibt einen Open Souce Treiber.

Weis da jemand was?

Welche Programmiersprache würdet Ihr heute verwenden.

Ich kann halt C und C++ und von früher Turboüpasca. Ein wenig Java ist 
auch da.

von Christian R. (supachris)


Lesenswert?

Einfach ein generisches HID auf dem µC implementieren, nicht explizit 
eine Maus. Die Daten kannst du dann mit deinem Programm auslesen und es 
stört sonst nichts im System. Machen die IOWarrior auch so. Vorteil: 
Kein Treiber nötig, wird alles vom Windows/Linux/MacOS verwaltet.

von hp-freund (Gast)


Lesenswert?


von Frank M. (aktenasche)


Lesenswert?

Christian R. schrieb:
> HID

+ usb + microcontroller -> google

von uuu j. (xarix)


Lesenswert?

Ahh, danke, das hört sich fein an.

Jetzt müst ihr mir nur noch etwas auf die Sprünge helfen.

Also meine Aplikation wartet auf Tastendrücke, oder Werte. Das ist mir 
klar.
Und umgekehrt kann man warscheinlich dann auch Rückmeldungen irgendwie 
senden.

Erkennt Windows dann, wann ich von der richtigen Tastatur aus was 
schreibe und es nicht der Kontroller sein soll? Was ist wenn ich über 
die normale Tastatur was eingeben muss in die Aplikaion? Kommt es da 
durcheinander?

Gruß
Ralf

von Vlad T. (vlad_tepesch)


Lesenswert?

das ist der falsche Ansatz.
was passiert denn, wenn deine Applikation nicht den Eingabefokus hat.
Dann läuft deine Pseudomaus Amok und formatiert vielleicht noch die 
Festplatte.

schau dir die libusb an und Projekte, die sie benutzen, zB USBsp oder 
Rfm12usb
Denutzte deren Code als Basis.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was spricht dagegen, ein CDC zu implementieren? Für dessen Installation 
braucht das strunzdumme Windows zwar eine *.inf-Datei, aber mehr auch 
nicht, der grundlegende CDC-Treiber ist bei Windows dabei.
Und so ein CDC kann ohne irgendwelche Wirrungen mit Tastaturen oder 
Mäusen problemlos bidirektional angesprochen werden.

Beispiele für CDCs mit AVRs gibt es ebenfalls bei obdev.at, die 
Gegenstelle auf dem PC ist nichts anderes als die Ansteuerung einer 
seriellen Schnittstelle.

Alles keine Raketenwissenschaft.

von Εrnst B. (ernst)


Lesenswert?

Hier ist sowas umgesetzt:

http://www.obdev.at/products/vusb/easylogger.html

HID-Tastatur, wenn aktiv wird jede Sekunde <Messwert> <enter> 
ausgegeben.

Tabellenkalkulation/Texteditor auf, Fokus rein, Taste am Logger 
gedrückt, zuschauen, wie sich die Tabelle füllt.

von uuu j. (xarix)


Lesenswert?

ah interessant. Es werden also Zeichen gesendet. Der Texteditor, der 
gerade im vordergrund aktiv ist empfängt. Also jede Aplikation, die 
gerade offen ist empfängt die Zeichen,egal welche.

Kann das nicht gefährlich sein? zB. wenn gesendet werden format c: :-) 
wird warschenlich nicht so krass vorkommen, dennoch kann schon bei 
beliebigen Datenübersendung alles mögliche doch passieren, oder doch 
nicht ?


Bzw, wird das nicht überlagert mit der eigentlichen Tastatur?

von Edson (Gast)


Lesenswert?

Ralf Hellener schrieb:
> Kann das nicht gefährlich sein?

Doch, das wurde ja schon behandelt. Also entweder HID-Klasse mit 
generischem Treiber verwenden oder, wie von Rufus vorgeschlagen, die 
CDC.

Eine HID-Tastatur wird jeder Anwendung, die den Fokus hat, seine Daten 
senden - da kann eigentlich nur Murks rauskommen wenn man das nicht 
permanent überwacht. Für den Labortisch ok, in deinem Konzept aber 
unbrauchbar.

von uuu j. (xarix)


Lesenswert?

aja. cdc: also re232 simulieren. Setzt wohl vorraus, dass die Datenmenge 
klein ist.

was ist von libusb zu halten? ist glaube ich ein open souce Projekt 
eines Treibers. weis aber nicht ob das mit visual Basic oder visuall c++ 
einbindbatr ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf Hellener schrieb:
> cdc: also re232 simulieren. Setzt wohl vorraus, dass die Datenmenge
> klein ist.

Das ist bei HID erst recht der Fall.

Was heißt "kleine Datenmenge"?

libusb kann selbstverständlich mit Visual C++ genutzt werden -- wenn 
damit echtes C++ programmiert wird.

Ob das auch mit der auf dem .Net-Geraffel aufsetzenden 
Microsoft-Perversion "Managed C++" bzw. "C++/CLI" funktioniert, entzieht 
sich meiner Kenntnis. Mit C++ hat das mehr als den Namen nicht 
gemeinsam.

Ohne Dir zu nahe treten zu wollen: Damit versteigst Du Dich. Mit CDC 
lassen sich etliche kByte pro Sekunde übertragen und Du kannst so ein 
CDC mit jeder Programmiersprache ansteuern, die serielle 
Schnittstellen ansteuern kann.

Und anders als bei den echten Onboard-Schnittstellen normaler PCs sind 
mit USB-CDC auch deutlich höhere Datenraten als 115200 Baud möglich.

von uuu j. (xarix)


Lesenswert?

Scheint plausiebel. RS232 ist ein alter Standard. Damit könnete man auch 
älter API´s wieder zum löaufen bringen lassen. Auch könnte man damit 
besser eine galvanische Trennung machen, was ja nicht ohne ist.

Bei großen Datenmengen, also z.b video, oder bildverarbeitung, wirds 
wohl aber schwieriger werden, denke ich.

eine Möglichkeit fällt mir noch ein. Was haltet ihr davon.

Man kann ja eine Scheinfestplatte simulieren. Und man holt die Daten 
einfach ab. Man müsste dann aber überlegen wie man Zugriffskollisionen 
in den Griff bekommt.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf Hellener schrieb:
> Bei großen Datenmengen, also z.b video, oder bildverarbeitung, wirds
> wohl aber schwieriger werden, denke ich.

Die sind aber mit HID noch weniger abzuwickeln als mit CDC.

Ralf Hellener schrieb:
> Man kann ja eine Scheinfestplatte simulieren

Bei MSD (mass storage device) gibt es das Problem, daß zwei Geräte 
gleichzeitig versuchen, ein darauf befindliches Dateisystem zu 
verwalten, aber nichts voneinander wissen.

Das geht in die Hose.

von Edson (Gast)


Lesenswert?

Ralf Hellener schrieb:
> Bei großen Datenmengen, also z.b video, oder bildverarbeitung, wirds
> wohl aber schwieriger werden, denke ich.

Davon ist jetzt zum ersten mal die Rede, wolltest du urprünglich eine 
"Maus" zum Videoplayer umrüsten oder wie darf man diesen Thread nun 
verstehen? ;)

> eine Möglichkeit fällt mir noch ein. Was haltet ihr davon.
>
> Man kann ja eine Scheinfestplatte simulieren. Und man holt die Daten
> einfach ab. Man müsste dann aber überlegen wie man Zugriffskollisionen
> in den Griff bekommt.

Schau dir doch einfach mal an, welche Geräteklassen zu welchem Zweck vom 
USB spezifiziert worden sind. Sound (UAC) und Video (UVC) wurden da auch 
berücksichtigt, es gibt also eigentlich keinen Anlass eine Geräteklasse 
im Zweck zu entfremden.

Such mal nach "USB Audio Class" bzw. "USB Video Class".

von uuu j. (xarix)


Lesenswert?

Die Frage mit Mausimitation und Geschwindigkeit ist natürlich 
berechtigt.
Meist hat man ja nur Schlater, Signale oder Daten, was bei mir auch der 
Fall ist. Da würde natürlich RS232 dicke reichen. Ich habe mir aber auch 
schon Dinge überlegt, wo die Dantenmenge sehr groß sein wird. Aber man 
muss ja erst überhaupt mal rein kommen. Das Lernen ist doch recht steil. 
D.h. mann muss sehr viel erst wissen, können, dass überhaupt mal was 
läuft. Dann wird das Lernen flacher.

MSD: könnte man das so funktionieren.

Verreigelungen:
Host, Device  hat Priorität.

Verreigelungsfile: Knowledgehost, Knowledgedevice.

vor dem Zugriff auf Datenfile erst Prüfen, ob je,o jemand gerade will.

kann passieren sein beide Knoweldege sind da.

dann hat Device vorrang. Host löscht Knowledgehost und wartet.

Wenn Host am lesen, wartet Device.

Beim Beednen jeweiliger, löschen jweiliges KnowledgeXX

von Edson (Gast)


Lesenswert?

Ralf Hellener schrieb:
> muss ja erst überhaupt mal rein kommen. Das Lernen ist doch recht steil.
> D.h. mann muss sehr viel erst wissen, können, dass überhaupt mal was
> läuft. Dann wird das Lernen flacher.

Ja, ist klar und auch keine Schande. Aber nutze doch deine Zeit 
effektiver und lese dich in USB ein bevor du anfängst unspezifisch 
Geräteklassen vergewaltigen zu wollen.

> MSD: könnte man das so funktionieren.

Lass es, das macht so keinen Sinn. Du willst die "großen Datenmengen" ja 
bestimmt in-time weiterverarbeiten können, da sind zusätzliche 
Dateizugriffe zwischendurch keine gute Idee. Abgesehen von weiteren 
Problemen, die diesem Ansatz anhaften.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf Hellener schrieb:
> Verreigelungen:
> Host, Device  hat Priorität.
>
> Verreigelungsfile: Knowledgehost, Knowledgedevice.

Funktioniert so nicht, es sei denn, Du bekommst den Host dazu, das 
Dateisystem überhaupt nicht zu cachen, also auch nicht die FAT und 
Directories.

von Frank (Gast)


Lesenswert?

Wegen des ganzen Treibergedönses baue ich solche Input-Devices nur noch 
mit Netzwerk-Anschluss (Arduino & Ethernet-Shield, zusammen ca. 40 
Euro). Jeder Rechner hat heute einen Netzwerkanschluss und die 
IP-Kommunikation ist mit nahezu jeder beliebigen Skript- oder 
Programmiersprache auf dem PC/Mac/Linux zu erledigen.

Ich weiss, im ersten Moment klingt das maßlos übertrieben, aber 
angesichts der gefallenen Preise und der unkomplizierten Handhabung in 
der Praxis hat das nur Vorteile - klick und geht, immer und überall. USB 
verwende ich bestenfalls für die Stromversorgung ...

von Vlad T. (vlad_tepesch)


Lesenswert?

und dein Rechner hat genauso viele Ethernetports, wie USB-Anschlüsse?

Man könnte natürlich auch Usb-Ethernet-Adapter benutzen. Allerdings 
braucht man ja noch einen USB-Anschluss für den Strom

von Rolf Magnus (Gast)


Lesenswert?

Man könnte ja auch über USB statt einer Maus einen Netzwerkadapter...

von uuu j. (xarix)


Lesenswert?

Es gibt auch power over Ehternet! :-)

von Frank K. (fchk)


Lesenswert?

Vlad Tepesch schrieb:
> und dein Rechner hat genauso viele Ethernetports, wie USB-Anschlüsse?

Nö. Aber mein HP Procurve Switch hat noch hinreichend Ports frei, um 
einiges an Ideen zu realisieren.

Und 40Euro für einen Netzwerkknoten sind viel. Ich nehme für kleine 
Sachen immer den PIC18F67J60, damit ist eine Ein-Chip-Lösung für weniger 
als 10 Euro drin.

fchk

von uuu j. (xarix)


Lesenswert?

Und wie machst du das mit der MAC-Addresse?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die kann man sich frei ausdenken. Kollisionen sind recht 
unwahrscheinlich, denn MAC-Adressen verlassen das lokale Netzwerk nie.

Und wenn man ganz genau sein will, holt man 'ne alte Netzwerkkarte aus 
dem Schrott und verwendet deren MAC-Adresse.

von uuu j. (xarix)


Lesenswert?

für Krten, die gewerlich verkauft werden, ist das aber schwierig. Es 
kann doch passiern, oder der Anwender benötigt mehrere Geräte.

Gut man kann da auch mit Dip-Schalter was machen.

Wie machst du das mit den Ansteuerungen und Abholung der Daten. Apache 
Server im Microntroller ist sicher nicht immer sinnvoll.
in der Regel willst du ja was steuern. ev. vom pC aus

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralf Hellener schrieb:
> für Krten, die gewerlich verkauft werden, ist das aber schwierig. Es
> kann doch passiern, oder der Anwender benötigt mehrere Geräte.

Dann verwendet man MAC-Adressen von Herstellern, die es nicht mehr gibt 
oder gibt dem Benutzer die Möglichkeit, die MAC-Adresse gegebenenfalls 
zu ändern.


> Wie machst du das mit den Ansteuerungen und Abholung der Daten. Apache
> Server im Microntroller ist sicher nicht immer sinnvoll.
> in der Regel willst du ja was steuern. ev. vom pC aus

Ist das eine Frage?

Apache ist sowieso nicht auf µCs nutzbar (allenfalls auf sehr großen 
ARMen, auf denen dann auch Linux o.ä. läuft), aber kleinere Webserver 
wie der allseits bekannte AVR-Webserver können da verwendet werden. Und 
darüber --genauer über deren CGI-Funktionalität-- lässt sich sehr wohl 
auch etwas an den µC übertragen, was zu Steuerungszwecken verwendet 
wird.

von Marco M. (marco_m)


Lesenswert?

Rufus Τ. Firefly schrieb:

> Ob das auch mit der auf dem .Net-Geraffel aufsetzenden
> Microsoft-Perversion "Managed C++" bzw. "C++/CLI" funktioniert, entzieht
> sich meiner Kenntnis. Mit C++ hat das mehr als den Namen nicht
> gemeinsam.

Das ist so nicht richtig. Der C++/CLI Compiler kann genauso viel C++ wie 
der  Native-C++ Compiler und die normale C/C++ Runtime kann man auch 
benutzen, weil der Compiler beliebig managed und unmanaged Code mixen 
kann. Du kannst dein ganzes Programm auch ohne CLI Erweiterungen 
schreiben.

Die libusb.lib aus der libusb-win32 Distribution kann man einfach 
linken.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.