Re: Die Lösung Kategorie: Verschiedenes (von André H. - 5.08.2006 21:08) | ||
Als Antwort auf Die Lösung von Mark - 3.08.2006 20:09 | ||
| ||
Hallo Mark, > Ich habe die Handshake-Leitungen am XPort gebrückt und > in der XPort Config Handshake deaktiviert. > Das ist nicht ganz die Lösung. Die Kommunikation mit dem XPort mu� auch mit Handshaking funktionieren. Wenn Du das Appl.Board nutzt, ist es daher wichtig, da� dort die Jumper für RTS und CTS gesetzt sind. Beim XPort mu� dann bei Flowcontrol "CTS/RTS (Hardware)" ausgwählt werden. Da ich gerade bei den Einstellungen für den XPort bin, hier noch ein paar Empfehlungen: Unter "Serial Settings": - Enable Packing aktivieren - Flush Mode: Input-Buffer: With Active Connect=yes, With Passive Connect=yes, At Time of Disconnect=no Output-Buffer: With Active Connect=no, With Passive Connect=no, At Time of Disconnect=yes Unter "Connection": - Hard Disconnect=yes - Inactivity Timeout: 1sec, wenn reiner Webserverbetrieb geplant ist. Wenn das bald folgende CC2Net.de-DL-Tool V2.3 für den Programmdownload über den XPort benutzt werden soll, dann 5sec bzw. 1 bis 2 sec höher, als der Parameter WaitHost im DL-Tool. Wenn Programmer über das Internet geladen werden sollen, sollte das Timeout noch höher sein. Aber dieses "Unding" mu� ich erst testen. Denn durch die hohen Latenzzeiten kann das Laden über das Web relativ lange dauern, da nach einem Datenblock auf das Echo gewartet werden mu�. ;-) Hier noch mein letztes Testproggie für die CC2 als Webserver: Es setzt HTTP1.1 voraus. Der IE macht hier leider immense Probleme, so da� es nicht funktioniert. Die Ursachen konnte ich noch nicht ganz ausmachen. (Eine scheint aber M$ zu sein. *g*) Daher funktioniert das nur mit Firefox und andere alternative Browser, die HTTP1.1 beherschen. Das Programm ist für Debuggingausgaben über ein eDIP240 "vorbereitet". Daher die eDIP-Aufrufe. Diese können aber einfach entfernt werden, wenn kein eDIP vorhanden ist. const edipAddr=32; byte fifo[512],dummy[64]; type togglebuffer { byte buffer[256]; } togglebuffer out[2]; system.TIME Zeit; int pos; byte tog; function sendbuffer() { if pos { string t; str.clear(t); str.putintf(t,pos,-2); str.putchar(t,'n'); hwcom.print2(t); out[tog].buffer[pos]='n'; hwcom.send(out[tog].buffer,pos+1); tog=(tog+1) and 1; pos=0; } } function print2(byte s[]) { if pos+s[31]>256 { string t; str.clear(t); str.putintf(t,pos,-2); str.putchar(t,'n'); hwcom.print2(t); out[tog].buffer[pos]='n'; hwcom.send(out[tog].buffer,pos+1); tog=(tog+1) and 1; pos=0; } mem.copypos(out[tog].buffer,pos,s,0,s[31]); pos=pos+s[31]; } function print(string s) { print2(s); /* string t; str.clear(t); str.putintf(t,str.length(s),-2); str.putchar(t,'n'); hwcom.print2(t); hwcom.print2(s); hwcom.put('n'); */ } function slenset(byte s[], byte len) { s[31]=len; } function table() {string s; print("<table>n<tr><td>Zeit:</td>n<td"); system.gettime(Zeit); str.clear(s); str.putchar(s,'>'); str.putintf(s,Zeit.hour,2); str.putchar(s,':'); str.putintf(s,Zeit.minute,2); str.putchar(s,':'); str.putintf(s,Zeit.second,2); print2(s); print("</td></tr>n<tr><td>Datum:</td>"); print("n<td>"); str.clear(s); str.putintf(s,system.day(),2); str.putchar(s,'.'); str.putintf(s,system.month(),2); str.putchar(s,':'); str.putintf(s,system.year(),4); print2(s); print("</td></tr>n</table>n"); } //---------------------------------------- function inputstr(byte s[]) returns int //---------------------------------------- {byte i,x; i=0; x=255; for i=0 ... 29 { wait hwcom.rxd(); x=hwcom.get(); if x==10 or x==13 break; s[i]=x; } if x==13 hwcom.get(); s[31]=i; mem.fillpos(s,i,30-i,0); return i; } string s;byte x; thread main { hwcom.setspeed(8); hwcom.setbuf(fifo,512); edip.FF(edipAddr); loop { hwcom.flush(); x=inputstr(s); // edip.FF(edipAddr); // edip.println(edipAddr,s); if strx.comp(s,"GET / HTTP/1.0") or strx.comp(s,"GET / HTTP/1.1") or strx.comp(s,"GET /index.html HTTP/1.1") { hwcom.print("HTTP/1.1 200 OKn"); hwcom.print("Server: C-Control IIn"); hwcom.print("Transfer-Encoding: chunkedn"); hwcom.print("Content-Type: text/htmlnn"); print("<html>n<body>n"); print("<b>C-Control II</b> im Web<br>"); print("n<font color=red>Es geht!!"); print("</font><br><br><br>n"); table(); print("<a href="/">aktualisieren</a>n"); print("<br><a href="/beep">beep</a>n"); print("</body>n</html>rn"); sendbuffer(); hwcom.print("0nn"); } else if strx.comp(s,"GET /beep HTTP/1.0") or strx.comp(s,"GET /beep HTTP/1.1") { plm.beep(8); hwcom.print("HTTP/1.1 200 OKn"); hwcom.print("Server: C-Control IIn"); hwcom.print("Transfer-Encoding: chunkedn"); hwcom.print("Content-Type: text/htmlnn"); print("<html>n<body>n"); print("<b>C-Control II</b> im Web<br>"); print("n<font color=red>Es geht!!"); print("</font><br><br><br>n"); print("Es piept ;-)<br><br>n"); print("<a href="/beep">nochmal</a>n"); print("<a href="/">zurück</a>n"); print("</body>n</html>nrnrn"); sendbuffer(); hwcom.print("0nn"); plm.beep(-1); } else if strx.comp(s,"GET /host HTTP/1.1") { hwcom.print("HTTP/1.1 200 OKn"); hwcom.print("Server: C-Control IIn"); hwcom.print("Transfer-Encoding: chunkedn"); hwcom.print("Content-Type: text/htmlnn"); print("<html>n<body>n"); print("<b>Hostmodus wird eingeleitet!"); print("</b><br>n<br><br><br>n"); print("</body>n</html>nrnrn"); sendbuffer(); hwcom.print("0nn"); hwcom.put(0); sleep 1000; while hwcom.rxd() { hwcom.receive(s,30,0); sleep 10; } quit 2; } else { hwcom.print("HTTP/1.0 404 Not Foundn"); hwcom.print("Server: C-Control IIn"); hwcom.print("Content-Length: 10n"); hwcom.print("Content-Language: den"); hwcom.print("Content-Type: text/htmln"); hwcom.print("Connection: closenn"); hwcom.print("404 Not Foundn"); } hwcom.put(0); while hwcom.rxd() { hwcom.receive(s,30,0); // str.clear(s); // slenset(s,hwcom.receive(s,30,0)); // edip.print(edipAddr,s); // sleep 200; } } } Und hier noch eine Vorschau für die nötigen Routinen zum Hostmode-Einleiten für das künftige Download-Tool: byte x[2]; thread com { wait hwcom.rxd(); x[0]=hwcom.get(); if x[0]==254 { x[1]=hwcom.receive(x,1,1000); if x[0]==254 and x[1]==1 quit 1;// Hostmode einleiten, normal if x[0]==253 and x[1]==1 {byte buf[1024]; //Erweiterter Empfangspuffer hwcom.setbuf(buf,1024); // Hostmode einleiten XPort quit 256; // Schnittstellenparameter beibehalten } } // Platz für eigene Schnittstellenroutinen ... // hwcom.flush(); } thread main {byte second; lcdext.init(); hwcom.setspeed(8); run com; loop { lcdext.line(1); lcdext.time(0); lcdext.line(2); lcdext.date(0); wait second!=system.second(); second=system.second(); } } Hierfür ist dann OSOPT V3.1(b1) Voraussetzung, da erst ab dieser Version die Möglichkeit besteht, die Schnittstellenparameter für den Hostmode beizubehalten. Somit kann dann mit bis zu 1kB-Datenblöcken gearbeitet werden, was die �bertragung wiederum beschleunigt, welche zur TCP/IP verlangsamt wurde. ;-) MfG André H. Antworten bitte nur ins Forum! Fragen per EMail auf Forum-Postings werden nicht beantwortet! Das macht meine Heizung gerade | ||
Antwort schreiben Antworten: Re: Die Lösung (von Mark - 6.08.2006 13:19) |