Hallo zusammen,
Da der Betreff etwas allgemein ist, muss ich bei der Fragestellung etwas
weiter ausholen:
Es geht um ein Gerät, welches per USB an ein OWRT Gerät angeschlossen
ist.
Dieses stellt einen VCP und einen MSD zur Verfügung. Habe OWRT
mittlerweile soweit, das der MSD als SDA1 gemounted werden kann und der
VCP spricht über ACM mit mir.
Damit sind die grundsätzlichen Sachen schon mal geschafft.
Jetzt möchte ich 2 Progamme schreiben, eins als deamon und das andere
als normales.
Der deamon soll einfach nur prüfen, ob das Gerät angeschlossen ist und
wenn ja, das 2. starten oder halt beenden wenn abgesteckt.
Das 2te soll dann wenn gestartet, mit einem Webserver kommunizieren,
aufs Dateisystem ( von Gerät ) zugreifen und mit ttyACM0 sprechen.
Ihr seht, es gibt viel zu tun ;)
Außerhalb von Linux/OWRT alles kein Problem für mich, aber hier bin ich
etwas überfordert.
Was brauch ich dafür und was muss ich tun um das umzusetzen?
Die OWRT-Wikis hab ich mir angeschaut und soweit auch verstanden, aber
mir tun sich da Fragen wie :
Was muss ich includieren für fopen,fclose....?
Wie Krieg ich die seriellen Daten von ttyACM?
Ich hoffe ihr versteht ungefähr was ich meine.
Weihnachtliche Grüße
Hans
Hoi,
die Aufgabenstellung ist ja nun trotz 2er Threads (
Beitrag "Unter Linux/Openwrt Treiber für andere VID/PID" ) nicht wirklich konkret,
insbesondere ist unklar, was du auf dem Gerät eigentlich machen willst,
aber:
1.)
Den Daemon kannst du dir sparen. Da gibt es auch in OpenWRT
hotplug/mdev/udev & Co. dazu, die auf "neues Gerät eingesteckt"
Ereignisse reagieren.
Sprich, durch entsprechende Konfiguration und evt. ein kleines Script
zum Start deines Programms/mounten des Dateisystems kannst du dir den
Aufwand schenken.
2.)
Mit /dev/ttyACM* kannst du im einfachsten Fall via Shellscript
kommunizieren, "echo bla > /dev/ttyACMx".
Falls das ein Modem oder sowas sein sollte, gibt's dann chatscript oder
expect-script für sowas.
Du kannst natürlich auch das Gerät wie eine Datei öffnen und rein
schreiben/lesen, das ist dann aber ne ganz neue Stufe Aufwand.
Noch ein paar Links zum Thema:
1.) OpenWRT verwendet im Normalfall "hotplug2":
http://wiki.openwrt.org/doc/techref/hotplug
Das kann man mit /bin/sh-Scripten anpassen, Beispiele siehe Seite.
Das mounten macht man am besten via einer eindeutigen Device- oder UUID,
da es dann automatisch geht. Innerhalb von eigenen Hotplug-Scripten ist
das eher ein schlechter Hack, da die mount-Infrastruktur schon vorhanden
ist und auch genutzt werden sollte.
2.) Man kann fast jedem Kernelmodul zur Laufzeit eine neue, nicht in der
modulinternen Liste vorhandene Device/Vendor-ID unterschieben:
http://www.ha19.no/usb/
... was deinen anderen Thread beantworten dürfte.
HTH
Hans M. schrieb:> Der deamon soll einfach nur prüfen, ob das Gerät angeschlossen ist und> wenn ja, das 2. starten oder halt beenden wenn abgesteckt.
Prüfen ob ttyACM0 verfügbar ist:
if [ -c /dev/ttyACM0 ]; then
echo "Ist da!"
<deinebefehlenachwahl>
fi
Danke für die Antworten!
@ LOL (Gast):
Habe die Threads bewusst getrennt!
Im ersten ging es um das verfügbar machen von Ressourcen ( VCP und MSD )
in/für OWRT.
Im zweiten ( diesem ) geht es nun um die Benutzung.
Womit
>2.) Man kann fast jedem Kernelmodul zur Laufzeit eine neue, nicht in der>modulinternen Liste vorhandene Device/Vendor-ID unterschieben:>>http://www.ha19.no/usb/>>... was deinen anderen Thread beantworten dürfte.
im anderen Thread besser aufgehoben wäre ;-)
>This procedure does not work with 'usbserial', the generic driver.
Schau ich mir auch mal an, denn der Treiber, wär aus meiner Sicht besser
geeignet als der ACM.
Die Sachen mit hotplug und udev werd ich mir gleich ansehen.
Es ist kein Modem, aber der ACM treiber hat sich automatisch geladen.
Es ist ein virtueller ComPort über den ich mit einem HexProtokoll (
liegt mir vor ) mit dem Gerät kommunizieren kann: GeräteID auslesen,
Parameter lesen/schreiben, etc...
Und über das mass storage device ( sda1 ) wird auf die im Gerät
steckende SD-Karte ( fat16/32 ) zugegrifffen. Da liegen n paar Config-
und Logfiles drauf und auf deren Inhalt möchte ich zugreifen und die
Daten an einen Webserver senden.
Ich hoffe einige Unklarheiten erklärt zu haben.
MfG Hans
Huhu,
hab mir jetzt ein Image gebastelt, das soweit alles hat was ich brauch.
Also USB-Storage, Fat und USB-Serial. Soweit danke für die Tips.
Jetzt geht's ums benutzen, SDA1 und ttyUSB sind vorhanden und LUCI (
uHTTPd mit LUA_Interpreter) läuft auch.
Hab überlegt, vllt gehts auch mit ner scriptsprache?! Spart
Cross-Compiler und IDE und und und.
Zu erst dachte ich an Python, aber das wird zu groß. dann bin ich über
LUA gestolpert ( ist schon installiert wegen LUCI )!
Könnt ich mein Vorhaben auch mit LUA umsetzen? Wenn ja, gibt's gleich
Folgefragen ;) :
Wie kann ich mit LUA auf Dateien, ttyUSB und HTTP zugreifen?
Entschuldigt meine Unbeholfenen Schritte/Fragen, komme eigentlich aus
der PC und uC Welt. Lese grad ein LUA-Tut, sieht noch so schlimm aus.
Nur die Verbindung zur "Außenwelt" bereitet mir Kopfzerbrechen!
Werd die Tage mal ein LUA-LED-Blink Versuch starten ;)
LG Hans
Hi Ulli,
Ja an die Shell hab ich auch schon gedacht, aber damit würde ich nicht
alle meine Wünsche abdecken können. Glaub ich zumindest ;)
Aktuell hab ich mir jetzt ein Image gebaut, das soweit alles enthält (
LUCI, USB-Sorage/Serial, fat filesystem, nixio, luasocket lib und LUA
mysql )
Damit lässt sich schon recht komfortabel arbeiten: in Windows lua
schreiben, per scp aufs Gerät und über Terminal testen.
Jetzt hab ich fix meine Anforderungen zusammen geschrieben ( sind nur 15
Punkte ) und sammle Infos zusammen, Lib-Referenzen und Codebeispiele.
Also rechnet in nächster Zeit mit vielen Fragen zu LUA :-P
Bis hier her danke für die Antworten.
Hans