
| 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: | ||