Hallo, ich suche für ein USB-Gerät nach einer möglichst plattformunabhängigen Möglichkeit eine einigermaßen hübsche Bedienoberfläche und Visualisierung zu realisieren. Am liebsten wäre es mir wenn man das mit dem vorhandenen Default-Browser erledigen könnte. Das USB-Gerät sollte also vom System als eine Art TCP-Connection erkannt werden an deren anderen Ende (im USB-µC) ein simpler Web-Server die Bedienoberfläche ausliefert (ob das per Dynamic-HTML oder AJAX oder gar als Java-Applet o.ä. realisiert wird ist dann die Entscheidung des USB-Geräte-Entwicklers und hängt sicher auch von den Möglichkeiten (ROM-Kapazität) des µC im USB-Gerät ab). Gibt es da irgendeine Möglichkeit sowas in der Art zu realisieren? Von den vorhandenen Standard-USB-Device-Klassen habe ich keine gefunden die sowas ermöglichen würde. Habt ihr Vorschläge wie man sowas angehen könnte? Ich möchte eigentlich nur das sich die Bedienoberfläche direkt nach dem Einstöpseln von alleine öffnet und keinerlei Software auf dem PC installiert werden muss und dass das natürlich unter jedem OS läuft. Grüße Erik
Erik schrieb: > Habt ihr Vorschläge wie man sowas angehen könnte? es müsste sich einfach als Netzwerkkarte anmelden. Und wenn es dann noch UpNP bereitstellt sollte es automatisch unter Windows bei Geräten auftauchen. Dort kann man dann den Browser starten. (so wie bei den Fritzboxen)
> Ich möchte eigentlich nur das sich die Bedienoberfläche direkt nach > dem Einstöpseln von alleine öffnet Den Autostart hat Microsoft gotttseidank abgeschafft. Zu viele USB Geräte hatten auf diese Art Schadcode eingeschleust.
Die mehr oder weniger einzige sinnvolle USB Anbindung fuer Controller is die USB to Serial. Denn die wird bleiben. Plus die Massenspeicher Schnittstelle, aber um die geht es hier nicht. Irgendwelche anderen USB Device werden's schwer haben. Bei der N+1-ten neuen Windows Version geht der mitgelieferte Treiber dann ploetzlich nicht mehr. Der Hersteller kam zwischenzeitlich leider nicht auf die Stueckzahlen und mag keine neuen Zeilen Code zu diesem Projekt mehr schreiben. Wenn man nun die windows seite und die controller Seite selbst gestallten kann, ist das obige Konzept fast machbar. Der controller muss natuerlich den webserver spielen. Und auf der PC Seite muss ein Demon, (Prozess) die serialports kontrollieren, abfragen und falls erkannt das Serialport auf einen Socket umleiten, sodass ein Browser ein Netzwerkdervice sieht. Das automatische Oeffnen des Browsers halt ich fuer nicht gut, sollte aber machbar sein. Alles machbar, aber viel Arbeit...
Peter II schrieb: > es müsste sich einfach als Netzwerkkarte anmelden. > Und wenn es dann noch UpNP bereitstellt Das bedeutet das der µC Ethernet, IP, TCP und dann auch noch UPnP (mit UDP) bieten muss und das dürfte den Rahmen eines µC selbst mit 256kB Flash deutlich sprengen. Eine TCP-Verbindung ist im wesentlichen eine bidirektionale Byte-Strom-Schnittstelle mit guter Zuverlässigkeit (also eine perfekte RS232-Verbindung) und das sollte erstmal keinen µC vor echte Probleme stellen, die Zuverlässigkeit von TCP kann man sicher auch auf Basis von USB abbilden (und sowas wie Staukontrolle oder Slow-Start ist bei USB wohl eher nicht erforderlich). Es bliebe für den µC ein Web-Server mit einer persistenten Verbindung zum Client (Browser), damit ließen sich zwar nicht mehrere Dateien parallel (in unterschiedlichen Geschwindigkeiten) übertragen aber für eine halbwegs hübsche Bedienoberfläche in einem Browser sollte es IMHO schon reichen und auch in 128kB Flash passen (wenn man auf Bilder gut verzichten kann). Ein weiteres Problem mit nacktem Ethernet ist die Vergabe der IP-Adressen, ein normaler PC wird wohl kaum auf DHCP-Anfragen in der Rolle als Server antworten, wenn dann eher umgekehrt und in einem USB-Gerät das nichts über die sonstige Netzwerkkonfiguration des PC weiß würde ich keinen DHCP-Server packen wollen, schon wegen dem Potential auf IP-Adressraum-Kollisionen usw., selbst mit IPv6 ist das IMHO nicht so ganz einfach. Nebst dessen das man dann eigentlich auch immer 2 gültige (also einmalige) MAC-Adressen benötigt was die Kosten wieder unnötig erhöht (echte MAC-Adressen kosten Geld und gefackte könnten bei mehreren gleichartigen USB-Geräten eventuell kollidieren). > sollte es automatisch unter Windows bei Geräten auftauchen. Da sind genau zwei Worte die mir nicht so gut gefallen, Du ahnst sicher schon, "sollte" und "Windows". Ich suche etwas das halbwegs zuverlässig Autostart hinbekommt und das unter möglichst jedem OS, wobei die zweite Anforderung definitiv die wichtigere ist. Autostart kann man eventuell mit einer kleinen gedruckten Anleitung für den User umgehen. > Dort kann man dann den Browser starten. (so wie bei den Fritzboxen) Aha, ich hab zwar weder eine Fritzbox noch Windows (kann also nicht nachvollziehen was Du genau meinst) aber das klingt zumindest halbwegs nach dem was ich mir wünsche, wenn ich auch den nötigen Aufwand (wegen Ethernet/IP/TCP) für zu hoch halte. Danke für Deine Idee. Noch andere Vorschläge? Grüße Erik
uiii. schrieb: > Die mehr oder weniger einzige sinnvolle USB Anbindung fuer Controller is > die USB to Serial. Denn die wird bleiben. Daran hatte ich auch schon gedacht aber das erfordert in jedem Fall ein bereits installiertes Programm auf dem PC und genau das will ich in jedem Fall vermeiden. > Plus die Massenspeicher Schnittstelle, aber um die geht es hier nicht. Diese Schnittstelle bietet zumindest theoretisch Autostart (ja ich weiß das wurde alles wieder abgeschalten) aber dafür keine Echtzeit-Kommunikation zwischen dem PC und dem "Speichergerät" (schon wegen dem Datei-Cache den alle modernen OSe haben). > Der controller muss natuerlich den webserver spielen. Den Webserver ansich sehe ich gar nicht mal als so großes Problem, man muss ja nich gleich einen Apache nehmen, es gibt in der Embedded-Szene durchaus einige kleine Webserver die auch anhand von Vorlagen Messwerte usw. in einen HTML-Seite zur Laufzeit einpflegen können. Das wäre so ungefähr die Größenordnung die ich mir wünschen würde. Nur Ethernet/IP/TCP halte ich für zu aufwändig und für zu problemlastig (IP-Adressen festlegen usw.) > Und auf der PC Seite muss ein Demon, (Prozess) die serialports > kontrollieren, abfragen und falls erkannt das Serialport auf einen > Socket umleiten, sodass ein Browser ein Netzwerkdervice sieht. Ansich eine wirklich interessante Idee die auch mit vertretbaren Aufwand, selbst für mehrere OSe, machbar sein sollte. Es bleibt nur der Hacken das der User vor der ersten Benutzung ein Programm installieren muss das er erstmal bekommen muss, es wäre schön wenn es ohne dem ginge. > Das automatische Oeffnen des Browsers halt ich fuer nicht gut Die Bedenken kann ich natürlich gut nachvollziehen. Der KDE fragt mich immer was er mit neuen USB-Geräten (die einer bekannten Device-Klasse entsprechen, also eigentlich nur Massenspeicher und Kameras) passieren soll. Ich denke ein oder zwei Mausklicks sind jedem User zuzumuten damit ein neu eingestöpseltes USB-Gerät seinen Dienst aufnimmt. Grüße Erik
Erik schrieb: > Ein weiteres Problem mit nacktem Ethernet ist die Vergabe der > IP-Adressen ist nicht wirklich ein Problem. Es gibt http://en.wikipedia.org/wiki/Zero-configuration_networking > > sollte es automatisch unter Windows bei Geräten auftauchen. > Da sind genau zwei Worte die mir nicht so gut gefallen, Du ahnst sicher > schon, "sollte" und "Windows". naja Linux war noch nie Benuzterfreundlich, dort wirst du so etwas nicht finden, aber diese Leute kommen auch mit eine Anleitung und ein paar scripten zurecht. Erik schrieb: >> Dort kann man dann den Browser starten. (so wie bei den Fritzboxen) > Aha, ich hab zwar weder eine Fritzbox noch Windows (kann also nicht > nachvollziehen was Du genau meinst) aber das klingt zumindest halbwegs > nach dem was ich mir wünsche, Windows stellt UPNP Geräte die es finden gleich in einer Liste darf, dort kann man einfach mit Doppelklick die Webseite des Geräte öffnen. Erik schrieb: > Noch andere Vorschläge? dann wirst du wohl einen Webserver selber schreiben müssen, in Java sollte er unter Windows und Linux laufen - aber nur wenn die Leute noch Java haben. Dann müsste dein USB-Gerät ein Massenspeicher bereitstellen wo der Webserver drauf ist. Eine Andere Möglichkeit sehe ich nicht.
Das wird definitiv schwer. Am weitesten kommst du wahrscheinlich mit der CDC-ACM-Klasse, die ist weit unterstützt, und ein kleines Terminalprogramm ist sowieso vorhanden oder einfach nachinstalliert. uiii. schrieb: > Die mehr oder weniger einzige sinnvolle USB Anbindung fuer > Controller is > die USB to Serial. Denn die wird bleiben. HID lässt sich auch sehr sinnvoll einsetzen, auch für Nicht-Eingabe-Geräte. In diesem Fall aber eher nicht.
Hatte sowas mal als MSD gemacht. War im Prinzip ein PIC18 mit nem 1MBit SO8-Flash. Meldete sich wie ein USB Stick. Darauf war die Oberfläche als HTML Datei. Diese hat ein Javascript eingebunden, das per speziellem Ajax mit dem Filesystem, also dem PIC18 kommunizierte. Über eine RS232 konnte dann mit anderen Microcontrollern kommunizieren. Hat unter Win, Linux, Solaris, BSD, OSX funktioniert. Da es aber ein "Hack" war gabs immer wieder mal Probleme, dass die neueste Firefox Version wieder mal spezielle Zugriffe geschützt (verboten) hatte. Zum Beispiel per Javascript auf ein weiteres Script zugreifen, das in einem parallel-Ordner lag. Das Projekt wurde deshalb uninteressant. gerd
Du bräuchtest ein Composite Device, das aus folgenden Geräten besteht: 1. Mass Storage, das ein USB CD-Laufwerk mit einem ISO bereitstellt. Darüber gibts die Software, Dokumentation etc. Viele UMTS-Sticks machen das so, aber auch mein Brother 2430PC Labelprinter. 2. RNDIS: eine standardisierte Ethernet-Schnittstelle, über die die Kommunikation anschließend geht. Alternativ wäre auch eine USB CDC Schnittstelle (also eine virtuelle serielle Schnittstelle) denkbar. Windows braucht dafür ein .INF, das auf dem eingebauten ISO-Image mitgeliefert wird. USB-technisch ist das ganze nicht trivial, aber andere machen es ja auch. fchk
Peter II schrieb: > ist nicht wirklich ein Problem. Es gibt > http://en.wikipedia.org/wiki/Zero-configuration_networking und wenn das lokale Netz des PCs bereits mit diesem IP-Adressraum arbeitet, oder gar mehrere dieser USB-Geräte angestöpselt werden sollen? Ich denke einem Gerät IP aufzupfropfen das eigentlich gar kein IP braucht ist viel zu problemanfällig. > naja Linux war noch nie Benuzterfreundlich, Sory, aber mein Linux ist Benuzterfreundlich! > Windows stellt UPNP Geräte die es finden gleich in einer Liste darf, > dort kann man einfach mit Doppelklick die Webseite des Geräte öffnen. Solange diese Liste nicht zu arg versteckt ist ist das sicher eine interessante Variante aber UPnP gibt es soweit ich weiß nur unter Windows halbwegs brauchbar, MAC OS und Linux setzen wohl eher auf Bonjour / Zero-Conf (das kann mehr als nur IP-Adressen vergeben), hab ich selber schon für andere Projekte eingesetzt. > Dann müsste dein USB-Gerät ein Massenspeicher bereitstellen wo > der Webserver drauf ist. Eine Andere Möglichkeit sehe ich nicht. Aber per Massenspeicher kann man nicht wirklich mit dem USB-Gerät kommunizieren, man kann das OS auch nicht dazu bringen auf bestimmte Sektoren o.ä. zuzugreifen. greg schrieb: > Am weitesten kommst du wahrscheinlich mit der CDC-ACM-Klasse, die finde ich nicht, meinst Du CDC-ATM (CDC Subclass for Asynchronous Transfer Mode Devices)? Grüße Erik
Erik schrieb: > Aber per Massenspeicher kann man nicht wirklich mit dem USB-Gerät > kommunizieren, man kann das OS auch nicht dazu bringen auf bestimmte > Sektoren o.ä. zuzugreifen. ein USB-Gerät kann mehr Sachen gleichzeitig bereitstellen.
gerd schrieb: > Darauf war die Oberfläche als HTML Datei. Diese hat ein Javascript > eingebunden, das per speziellem Ajax mit dem Filesystem, also dem PIC18 > kommunizierte. ich kann mir ehrlich nicht vorstellen wie das zuverlässig funktionieren sollte, jede Datei die der Browser per Script liest landet im Cache des OS und wird damit nie wieder gelesen (ist also eine einmalige Kommunikation und das auch nur in eine Richtung), es sei denn der Massenspeicher ist deutlich größer als der RAM und hat genug Dateien. > Da es aber ein "Hack" war gabs immer wieder mal Probleme, ... Das kann ich mir lebhaft vorstellen. Grüße Erik
Peter II schrieb: > ein USB-Gerät kann mehr Sachen gleichzeitig bereitstellen. Okay, nehmen wir einen Massenspeicher auf dem ein platformunabhängiges Programm (z.B. in Java) liegt und eine virtuelle serielle Schnittstelle o.ä., dann bleibt das Problem wie das Programm diese Schnittstelle findet (selbst wenn mehrere ähnliche USB-Geräte angeschlossen sind) und benutzen kann. Kann Java mit seriellen Schnittstellen umgehen? Kann ein Java-Programm herausfinden zu welchem USB-Gerät eine serielle Schnittstelle gehört bzw. von welchem USB-Gerät es selber stammt? Grüße Erik
Ja. Im Prinzip war nur der 1MBit Speicher reel. Ich hab aber einfach einen Stick mit fast unendlicher Größe vorgegaugelt. Und die Daten waren jedesmal in einer anderen "virtuellen Datei" verpackt.
Erik schrieb: > Kann Java mit seriellen Schnittstellen umgehen? ja > Kann ein Java-Programm herausfinden zu welchem USB-Gerät eine serielle > Schnittstelle gehört bzw. von welchem USB-Gerät es selber stammt? irgendwie bestimmt. Denn es ist ja EIN USB gerät, bei Linux müsste es ich halt im /proc/usb und unter Windows gibt es auch Möglichkeiten. Man müsste also den Zusammenhang zwischen Laufwerk und COM-Port herstellen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.