Sind in dem Zusammenhang mit UDP_DIRECT_SEND eigentlich Probleme mit
broadcast bekannt bzw. hat das schon mal jemand genutzt?
Ich steuere mit ethersex eine Kombination aus seriellem Drucker und
RFID-Reader an und wollte, sobald per dhcp eine IP-Adresse zugewiesen
ist, einen broadcast z.B. mit der eigenen IP als Inhalt versenden mit
UDP_DIRECT_SEND an x.y.z.255 , damit die Anwendung (läuft dauerhaft auf
einem Server), die das device steuern soll, ethersex findet.
Das funktioniert auch prinzipiell, allerdings hört ethersex überhaupt
nicht mehr auf mit dem Senden und ich verstehe nicht so ganz warum. (man
sieht an der Netzwerkbuchse, dass beide LED nach broadcast dauerhaft
eingeschaltet sind)
Im control6 sollte nach folgender Mimik sichergestellt sein, dass auch
nur einmal pro Minute der broadcast versendet wird. (die Anwendung die
darauf hört schaltet den broadcast dann mit entsprechendem ecmd c6 set
von populate_on wieder ab, sobald sie einmal die IP adresse von ethersex
per broadcast erhalten hat)
...
THREAD(populate)
if ((populate_do==1) && (populate_on==1))
{
populate_do=0;
uip_gethostaddr(&hostaddr);
clientadr0=hostaddr[0] & 0xFF;
clientadr1=hostaddr[0] >> 8;
clientadr2=hostaddr[1] & 0xFF;
clientadr3=hostaddr[1] >> 8;
UDP_DIRECT_SEND( clientadr0.clientadr1.clientadr2.255 , 2701, 2701,
"Hello world... \n")
}
THREAD_END(populate)
...
ON ONCE CLOCK_SEC == 0 DO populate_do=1; END
In den ersten 2-3 Minuten ist noch eine Sendepause zu erkennen, aber
dann wird irgendwann durchgehend gesendet. Ausserdem dauert das Senden
eines Broadcasts irgendwie viel zu lange.
Irgendeine Idee, was da der Denkfehler ist? Funktioniert broadcast auf
ethersex anders? Prinzipiell könnte in clientadr0..3 am Anfang noch Müll
drinstehen, solange bis per dhcp eine IP da ist. Aber da ja letztlich
schon Daten versendet werden, scheint mir das kein Problem zu sein. (mit
nc -ulp 2701 kann ich die Meldung von ethersex auch empfangen)
Besten Gruß.
Tjareson
On 27.03.2015 01:42, e...@users.sourceforge.net wrote:
Hallo,
sprintf war der Hinweis, der mir fehlte, Danke.
Mit UDP_DIRECT_SEND(192.168.0.1.5, 2701, 2701, "%s", buf1) funktioniert es.
den Umweg über buf1 braucht es nicht, wenn du UDP_DIRECT_SEND direkt
den String formatieren lässt.
Noch kurz zur IP-Adresse
In control6.c wird ja die IP Adresse irgendwie mit uip_ipaddr(&ip,
192, 168, 1, 5); zusammengebaut.
Um das auch dynamisch zu machen habe ich mir jetzt im control6
script folgendes Konstrukt gebaut:
int srvadr1=192;
int srvadr2=168;
int srvadr3=1;
int srvadr4=5;
...
UDP_DIRECT_SEND(srvadr1.srvadr2.srvadr3.srvadr4, 2701, 2701, "%s", buf1)
Man kann in control6-Skripten auch direkt C-Anweisungen schreiben.
In Deinem Fall halte ich es für sinnvoll, statt UDP_DIRECT_SEND
den C-Code, der dahinter steckt, direkt hinzuschreiben. Erspart
ganz nebenbei auch die Verrenkung mit der IP-Adresse und dem String.
Siehe control6/lang.d/45_udp.m4
_______________________________________________
Ethersex-devel mailing list
Ethersex-devel@list.zerties.org
http://list.zerties.org/cgi-bin/mailman/listinfo/ethersex-devel