Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ChaNFSSD TFTPServer RMFWeb
NewRMFWeb.cpp
00001 // (c) 2014 M.Haufe 00002 // Programm dient zum testweises 00003 // senden der RMF-Rollladencodes 00004 // via 433Mhz-ASK-Sender 00005 // - erweitert um web-funktionalität 00006 // - erweitert um JavaScript webinterface 00007 // - erweitert um integer von Website zu senden und via Termialfenster anzuzeigen 00008 // - Errorhandling Netzwerkverbindung zugefuegt 00009 // - Lerntaste zugefügt 00010 // - DIP-Schalter für Adresse 0...15 zugefügt 00011 // - Stop-Taste zugefügt 00012 // - zugewiesene IP-Adresse in sring konvertieren in abhängigkeit des dip-schalters 00013 // - kopieren der _rmf.htm in rmf_htm mit ersetzen der url's in die gegenwärtig gültigen (wird nicht mehr gebraucht !) 00014 // - rpc-funktionalitaet auf website mit bibliothek realisert, damit ok auch unter os-x 00015 // - adressübermittlung der website und umsetzen in entsprechendes kommando 00016 // - andere pins zugeordnet für dip-schalter tasten, led damit platz und anschlusspins für sd-card frei wird 00017 // - uSD-Slot zugefügt 00018 // - TFTP-Server zugefügt 00019 // - Watchdog zugefügt 00020 // - Grundlage zur Setupverwaltung über <cfg.dat> Datei (SD) implementiert 00021 // - NTP-Zeitserver-Funktionalität 00022 // Stand : 25.04.2014 00023 00024 00025 //WEB-Zugriffe via RPC oder Website 00026 //URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201 00027 //URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201 00028 //URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201 00029 //URL --> http://10.68.139.239:8020/rpc/data_rpc/write%20123456789 00030 //via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm 00031 //via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm 00032 00033 00034 00035 #include "mbed.h" 00036 #include "SDFileSystem.h" 00037 #include "TFTPServer.h" 00038 #include "EthernetNetIf.h" 00039 #include "HTTPServer.h" 00040 #include "RPCFunction.h" 00041 #include "SerialRPCInterface.h" 00042 #include "NTPClient.h" 00043 00044 00045 //192.168.178.67 00046 extern "C" void mbed_mac_address ( char *s) 00047 { 00048 char mac [6]; 00049 mac [0]=0x0A; 00050 mac [1]=0xC1; 00051 mac [2]=0x10; 00052 mac [3]=0x51; 00053 mac [4]=0x0B; 00054 mac [5]=0xCA; 00055 memcpy (s, mac , 6); 00056 } 00057 00058 00059 00060 NTPClient ntp; // define the NTP server 00061 TFTPServer *srv; // define the TFTP Server 00062 HTTPServer http; // define the http server 00063 Timer t; // used in main() to send debug output every 2 seconds 00064 Serial *serial; // serial just for debugging 00065 SDFileSystem sd(p5, p6, p7, p8, "sd"); // only needed if you save to SD card 00066 EthernetNetIf *eth; // network device 00067 00068 LocalFileSystem local("local"); // defining this makes MBED internal mem accessible 00069 LocalFileSystem web("local"); // defining this makes MBED internal mem accessible 00070 00071 00072 00073 Ticker sample1; 00074 Timer ptim;// timer für pulsdauermessungen aktiviert 00075 00076 //Hardware-Init 00077 DigitalIn adr_bit3(p9);//Adresse Bit 3 00078 DigitalIn adr_bit2(p10);//Adresse Bit 2 00079 DigitalIn adr_bit1(p11);//Adresse Bit 1 00080 DigitalIn adr_bit0(p12);//Adresse Bit 0 00081 00082 DigitalIn ser_code2(p13);//auf 00083 DigitalIn ser_code3(p14);//stop 00084 DigitalIn ser_code1(p15);//ab 00085 DigitalIn learn_button(p16);//Lern-Taste 00086 00087 DigitalOut web_access_led(p17); //ausgang für led wenn zugriff über javascript der website erfolgt 00088 DigitalOut sd_status_led(p18); // sd-status wird gesetzt, wenn sd-test erfolgreich war 00089 00090 DigitalOut test_out1(p19); //ausgang für flankenerkennung deklarieren 00091 DigitalOut test_out2(p20); //test-output deklarieren 00092 00093 DigitalOut myled1(LED1,"led1"); //Led 1 deklarieren 00094 DigitalOut led2(LED2, "led2"); 00095 DigitalOut led3(LED3, "led3"); 00096 DigitalOut led4(LED4, "led4"); 00097 00098 //allgemeine variablen 00099 char tmp1_char; 00100 int tmp1_int; 00101 //variablen ethernetverbindung 00102 char net_ok; // ergebnis der ethernet verbindung 00103 char try_net; // zählschleife für ethernet verbindung 00104 int port_adr=8020; // vorgabe der portadresse des http-servers 00105 char ip_adr_str[]= "http://xxx.xxx.xxx.xxx:xxxx ";//platzhalter für ip-adresse 00106 //rpc-variablen 00107 char rpc_ab_web; 00108 char rpc_stp_web; 00109 char rpc_auf_web; 00110 int rpc_data_web; 00111 char rpc_cmd_web; 00112 char old_rpc_cmd_web; 00113 //variablen um eine stehende verbindung zwischen browser und mbed zu erkennen 00114 int rpc_mbed_con; 00115 char rpc_browser_con; 00116 char browser_connected; 00117 char old_browser_connected; 00118 //tftp-variablen 00119 char wd_tim_cause=0; 00120 char sd_ok; 00121 char en_tftp_srv=0;//entweder funk(=0) oder tftp(=1)-funktionalität möglich 00122 int filecounter = 0; // incoming files 00123 char filename[256]; // to display filenames 00124 //remotecontrol-variablen 00125 char snd_start; 00126 int snd_req_activ; 00127 char act_frame_cnt; 00128 char frame_bit_ont; 00129 int bit_val; 00130 char bit_index; 00131 char hlp_bit_idx; 00132 char cmd_str_len; 00133 char cmd_str_len1; 00134 char target_frame_cnt; 00135 char main_loop_cnt; 00136 char fb_adr; 00137 char strg1[]=" "; 00138 char cmd_strg_buffer []="0000000000000000000000000000000000000000"; 00139 char fb_id_strg[]="0001100100100000011111001101";//externe fb-id 00140 char fb_adr_strg[]="0000"; 00141 char fb_cmd_up_strg[]="0010001"; 00142 char fb_cmd_dn_strg[]="0110011"; 00143 char fb_cmd_stp_strg[]="1010101"; 00144 char fb_cmd_lrn_strg[]="1001100"; 00145 00146 00147 00148 00149 // "0010101001000000010100100001000100010001" 00150 // IIIIIIIIIIIIIIIIIIIIIIIIIIIICCCCLBBBBBBB 00151 //FB-ID xxxxxxxxxxxxxxxxxxxxxxxxxxxx 00152 //FB-Ch xxxx 00153 //FB-Lrn x 00154 //FB-Cmd xxxxxxx 00155 00156 //eingelernte Kanäle : 00157 //0 = alle 00158 //1 = Terrasse Tür 00159 //2 = Terasse Fenster 00160 //3 = Küche 00161 //4 = Zimmer Jenny links 00162 //5 = Zimmer Jenny rechts 00163 //6 = Zimmer Bine 00164 00165 //vorbereitet : 00166 //7 = HH-Gaube 00167 //8 = HH-Giebel 00168 //9 = HH-Dach 00169 00170 //angedacht : 00171 //10 = Simu-Bad 00172 //11 = Simu-Gäste-WC 00173 00174 00175 //****************************************** Anfang Subroutinen ******************************************** 00176 00177 class Watchdog { 00178 public: 00179 // Load timeout value in watchdog timer and enable 00180 void kick(float s) { 00181 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK 00182 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 00183 LPC_WDT->WDTC = s * (float)clk; 00184 LPC_WDT->WDMOD = 0x3; // Enabled and Reset 00185 kick(); 00186 } 00187 // "kick" or "feed" the dog - reset the watchdog timer 00188 // by writing this required bit pattern 00189 void kick() { 00190 LPC_WDT->WDFEED = 0xAA; 00191 LPC_WDT->WDFEED = 0x55; 00192 } 00193 }; 00194 // Setup the watchdog timer 00195 Watchdog wdt; 00196 00197 void get_NTPtime(){ 00198 time_t ctTime; 00199 //printf("NTP setTime...\n\r"); 00200 Host server(IpAddr(), 123, "pool.ntp.org"); 00201 ntp.setTime(server); 00202 ctTime = time(NULL); 00203 ctTime = ctTime+7200;// +2:00 in sec Sommerzeit Deutschland 00204 //printf("\n\rTime is now (UTC): %d %s\n\r",ctTime,ctime(&ctTime)); 00205 printf("Time is now : %s\n\r", ctime(&ctTime));// anzeige der aktuellen ntp-zeit 00206 } 00207 00208 char test_sd(){ 00209 // test SD card (TFTP server can work without it) 00210 sd_ok=0; // 0 = noch kein sd-test durchgeführt 00211 sd_status_led = 0; // sd-status-led ausschalten 00212 //printf("TEST SD...\n\r"); 00213 FILE *fp = fopen("/sd/test.txt", "wb"); 00214 if ( fp == NULL ){ 00215 sd_ok=99;}// 99 = signalisiert sd-fehler 00216 else { 00217 sd_ok=1;// 1 = sd-test ok 00218 sd_status_led = 1; // sd-status-led einschalten 00219 fclose(fp); 00220 } 00221 remove("/sd/test.txt"); 00222 return sd_ok; 00223 } 00224 00225 void write_defconfig_sd(){ 00226 //default-configuration auf sd in datei -cfg.dat- schreiben 00227 if(sd_ok==1){ 00228 //printf("Write DefConfig to SD...\n\r"); 00229 FILE *fp = fopen("/sd/cfg.dat", "wb"); 00230 tmp1_char=0;fputc(tmp1_char,fp);//einstellung für >en_tftp_srv< 00231 fclose(fp); 00232 } 00233 } 00234 00235 void write_config_sd(){ 00236 //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben 00237 if(sd_ok==1){ 00238 //printf("Write ActConfig to SD...\n\r"); 00239 FILE *fp = fopen("/sd/cfg.dat", "wb"); 00240 fputc(en_tftp_srv,fp);//gegnwärtige einstellung für >en_tftp_srv< 00241 fclose(fp); 00242 } 00243 } 00244 00245 void read_config_sd(){ 00246 //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben 00247 if(sd_ok==1){ 00248 //printf("Load Config from SD...\n\r"); 00249 FILE *fp = fopen("/sd/cfg.dat", "rb"); 00250 en_tftp_srv=fgetc(fp);//einstellung für >en_tftp_srv< laden 00251 fclose(fp); 00252 } 00253 } 00254 00255 00256 void getdipadr()//ermittelt die gegenwärtig mit dip schalter eingestellte adresse 00257 { 00258 fb_adr=0; 00259 if (adr_bit3>0){fb_adr_strg[0]='1';fb_adr=fb_adr+8;} else {fb_adr_strg[0]='0';} 00260 if (adr_bit2>0){fb_adr_strg[1]='1';fb_adr=fb_adr+4;} else {fb_adr_strg[1]='0';} 00261 if (adr_bit1>0){fb_adr_strg[2]='1';fb_adr=fb_adr+2;} else {fb_adr_strg[2]='0';} 00262 if (adr_bit0>0){fb_adr_strg[3]='1';fb_adr=fb_adr+1;} else {fb_adr_strg[3]='0';} 00263 } 00264 00265 void getwebadr()//ermttelt die via web-commando ermittelte adresse und ueberschreibt >fb_adr_strg< mit aktuellem wert 00266 { 00267 fb_adr=0; 00268 if (rpc_ab_web>0){fb_adr = rpc_ab_web-1;} 00269 if (rpc_stp_web>0){fb_adr = rpc_stp_web-1;} 00270 if (rpc_auf_web>0){fb_adr = rpc_auf_web-1;} 00271 switch(fb_adr) { 00272 case 0: strcpy(fb_adr_strg,"0000"); break; 00273 case 1: strcpy(fb_adr_strg,"0001"); break; 00274 case 2: strcpy(fb_adr_strg,"0010"); break; 00275 case 3: strcpy(fb_adr_strg,"0011"); break; 00276 case 4: strcpy(fb_adr_strg,"0100"); break; 00277 case 5: strcpy(fb_adr_strg,"0101"); break; 00278 case 6: strcpy(fb_adr_strg,"0110"); break; 00279 default: strcpy(fb_adr_strg,"1111"); break; 00280 } 00281 } 00282 00283 void sample_sub() //timer-isr 00284 { 00285 test_out1 = 1;//test_out-ausgang setzen 00286 wait_us(10); 00287 test_out1 = 0;//test_out-ausgang löschen 00288 00289 if (snd_start){//snd_req_activ >0 spiegelt eine anforderung zum senden wieder 00290 if (snd_req_activ==0){snd_req_activ=1;} 00291 } 00292 else 00293 if (snd_req_activ==1){ 00294 snd_req_activ=2; 00295 act_frame_cnt=0; 00296 } 00297 00298 if(snd_req_activ>1){snd_req_activ++;} 00299 00300 if (snd_req_activ==3){//startpuls beginnen ~5.2ms lang mit anpassung des isr-zeitintervals 00301 test_out2 = 1;sample1.attach(&sample_sub,0.000522); 00302 act_frame_cnt++; 00303 } 00304 if (snd_req_activ==13){//startpuls beenden mit anpassung des isr-zeitintervals bis zum 1.Datenbit 00305 test_out2 = 0; 00306 sample1.attach(&sample_sub,0.000425); 00307 hlp_bit_idx=0; 00308 bit_index=0; 00309 cmd_str_len=strlen(cmd_strg_buffer); 00310 cmd_str_len1=cmd_str_len*2; 00311 cmd_str_len=cmd_str_len1+17; 00312 } 00313 00314 if (snd_req_activ<cmd_str_len){//vorher 97 00315 00316 if (snd_req_activ>=17){ 00317 hlp_bit_idx=!hlp_bit_idx; 00318 00319 if (hlp_bit_idx!=0){ 00320 strg1[0]=cmd_strg_buffer [bit_index]; 00321 bit_val= atoi(strg1); 00322 bit_index++; 00323 test_out2 = 1; 00324 if (bit_val==0){sample1.attach(&sample_sub,0.000345);} else {sample1.attach(&sample_sub,0.000710);} 00325 00326 } 00327 else { 00328 test_out2 = 0; 00329 if (bit_val==0){sample1.attach(&sample_sub,0.000715);} else {sample1.attach(&sample_sub,0.000350);} 00330 } 00331 00332 } 00333 00334 } 00335 00336 if (snd_req_activ==cmd_str_len+23){//defineirt laenge vom low-pegel zwischen 2 frames 00337 if (act_frame_cnt<target_frame_cnt){snd_req_activ=2;led2=!led2;} 00338 else{ 00339 led2=0;led3=0;led4=0;} 00340 } 00341 00342 if (snd_req_activ>200){ 00343 snd_req_activ = 0; 00344 test_out2 = 0; 00345 sample1.attach(&sample_sub,0.0005); 00346 } 00347 00348 } 00349 00350 //****************************************** Ende Subroutinen ******************************************** 00351 00352 int main() { 00353 00354 // configure serial terminal 00355 serial = new Serial(USBTX, USBRX); 00356 serial->baud(9600); 00357 00358 // Watchdog auslösegrund auslesen und wd-timeout initialisieren 00359 if ((LPC_WDT->WDMOD >> 2) & 1) 00360 wd_tim_cause = 1; else wd_tim_cause = 2; 00361 wdt.kick(30.0);// setzen des wd-timeout in sec 00362 00363 test_sd(); // sd-speicher testen 00364 read_config_sd(); // configuration von sd einlesen 00365 00366 00367 00368 00369 //terminalausgabe beim start 00370 printf("\x1B\x48"); //cursor home 00371 printf("\x1B\x4A"); //lösche bildschirm 00372 printf("\n\r"); 00373 printf("RMFWeb (Rev25042014.0700) is starting...\n\r"); //Textausgabe mit zeilenvorschub 00374 if (sd_ok==1)printf("SD:Filesystem ok\n\r");else printf("SD:Filesystem fail\n\r");// info über wd-cause ausgeben 00375 if (wd_tim_cause==1)printf("WDT:SoftReset\n\r");else printf("WDT:HardReset\n\r");// info über wd-cause ausgeben 00376 if (en_tftp_srv==0)printf("TFTPmode:off\n\r");else printf("TFTPmode:activ\n\r");//info betriebsart TFTP oder Funk ausgeben 00377 00378 00379 // Ethernet verbindungsaufbau 00380 EthernetNetIf eth; 00381 EthernetErr ethErr; 00382 try_net=1;net_ok=0; 00383 do { 00384 printf("Looking for Ethernet %d...\n\r", try_net); 00385 wdt.kick();// watchdog aufziehen 00386 ethErr = eth.setup(); 00387 if(ethErr==0){net_ok=1;break;} 00388 ++try_net; 00389 } while (try_net<=3); 00390 00391 00392 if (net_ok==1){// netzwerk verbunden 00393 http.bind(port_adr); 00394 printf("Connected-Status: OK \n\r"); 00395 const char* hwAddr = eth.getHwAddr(); 00396 IpAddr ethIp = eth.getIp(); 00397 snprintf(ip_adr_str,27,"http://%d.%d.%d.%d:%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3],port_adr);//url-string erzegen 00398 printf("%s",ip_adr_str);;printf("\n\r");//ip/url ausgeben 00399 printf("Server is online! \n\r");// info das server nicht verbunden ist 00400 get_NTPtime(); 00401 } 00402 else{//netzwerk nicht verbunden 00403 printf("Ethernet Error %d\n\r", ethErr);// sonstiger fehler 00404 printf("Server is offline! \n\r");// info das server nicht verbunden ist 00405 rpc_browser_con=0; 00406 en_tftp_srv=0;//tftp-server ausschalten 00407 } 00408 00409 00410 FSHandler::mount("/local", "/web"); // mounting /web als MBED root pfad 00411 FSHandler::mount("/sd", "/sd"); // mounting /SD als SD-Card root pfad 00412 00413 Base::add_rpc_class<DigitalOut>(); 00414 Base::add_rpc_class<DigitalIn>(); 00415 Base::add_rpc_class<AnalogIn>(); 00416 00417 http.addHandler<SimpleHandler>("/hello"); 00418 http.addHandler<FSHandler>("/");// default handler 00419 http.addHandler<FSHandler>("/web"); 00420 http.addHandler<FSHandler>("/sd");// default handler 00421 00422 http.addHandler<RPCHandler>("/rpc"); 00423 00424 RPCVariable<char> RPCrpc_ab_web(&rpc_ab_web, "ab_rpc");//URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201 00425 RPCVariable<char> RPCrpc_stp_web(&rpc_stp_web, "stp_rpc");//URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201 00426 RPCVariable<char> RPCrpc_auf_web(&rpc_auf_web, "auf_rpc");//URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201 00427 RPCVariable<int> RPCrpc_data_web(&rpc_data_web, "data_rpc");//URL --> http://10.68.139.239:8020/rpc/data_rpc/write%201 00428 RPCVariable<int> RPCrpc_mbed_con(&rpc_mbed_con, "mbed_rpc"); // eine art watchdog damit website eine stehende verbindung zum mbed erkennt 00429 RPCVariable<char> RPCrpc_browser_con(&rpc_browser_con, "brow_rpc"); // eine rt watchdog um gegenwärtigen browswerzugriff zu erkennen 00430 RPCVariable<char> RPCrpc_cmd_web(&rpc_cmd_web, "cmd_rpc");// zum übergeben von kommandos der website an mbed, z.b. resetanforderung 00431 //via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm 00432 //via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm 00433 00434 00435 00436 wdt.kick(5.0);// setzen des wd-timeout in sec 00437 00438 target_frame_cnt=16;//anzahl der zu sendenen frames nach einer anforderung 00439 web_access_led =0;// webaccess-led ausschalten 00440 browser_connected=0; 00441 old_browser_connected=0; 00442 main_loop_cnt=0; 00443 test_out2 = 0; 00444 fb_adr=0; 00445 00446 00447 00448 00449 00450 if(en_tftp_srv>0){ 00451 sample1.detach(); 00452 srv = new TFTPServer("/sd/"); 00453 printf("TFTP:Server listen...\n\r"); 00454 } 00455 else{ 00456 printf("RMF-Mode activ...\n\r"); 00457 sample1.attach(&sample_sub,0.0005);//500us timer-isr 00458 ptim.reset(); //timer löschen 00459 } 00460 00461 00462 t.start(); 00463 00464 00465 00466 00467 while (1) { 00468 Net::poll(); 00469 00470 if(en_tftp_srv>0){ 00471 if (serial->readable()) { 00472 int c = serial->getc(); 00473 switch (c) { 00474 case 's': 00475 srv->suspend(); 00476 break; 00477 case 'r': 00478 srv->resume(); 00479 break; 00480 } 00481 } 00482 00483 00484 if (srv->fileCnt() > filecounter) { 00485 filecounter = srv->fileCnt(); 00486 srv->getFilename(filename); 00487 printf("TFTP:New file: %s\n\r", filename); 00488 } 00489 } 00490 00491 00492 if (t.read() > 0.5) { 00493 t.reset(); 00494 00495 snd_start=0; 00496 myled1 = !myled1;//alive-led und variable hochzählen -> wird im browser angezeigt 00497 rpc_mbed_con++;// variable einfach nur fortwaehrend inkrementieren damit website stehende verbindung zum mbed erkennen kann 00498 if (rpc_mbed_con>255){rpc_mbed_con=0;} 00499 // einen verbundenen browser detektieren 00500 old_browser_connected = browser_connected; 00501 browser_connected=0; 00502 if (rpc_browser_con>1){// rpc_browser_con wird vom verbundenen browser immer wieder auf 3 gesetzt 00503 rpc_browser_con--;// hier wird der wert immer wieder dekrementert 00504 browser_connected=1;}// sofern wert >1 bleibt, gilt verbindung als hergestellt 00505 if (old_browser_connected>browser_connected){printf("WebBrowser disconnected \n\r");} 00506 if (browser_connected>old_browser_connected){printf("WebBrowser connected \n\r");} 00507 if (browser_connected==1){web_access_led=1;} else {web_access_led=0;}// brwoser-verbindung via led anzeige 00508 00509 if(en_tftp_srv==0){ 00510 if (rpc_ab_web>0 or ser_code1){//ser_code1 --> ABWAERTS 00511 getdipadr(); //DIP-Schalter decodieren 00512 if (rpc_ab_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln 00513 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren 00514 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen 00515 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen 00516 strcat(cmd_strg_buffer,fb_cmd_dn_strg);//auf-Kommando anhaengen 00517 if (ser_code1){printf("AB-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster 00518 if (rpc_ab_web>0){printf("AB-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command 00519 printf(fb_adr_strg);printf("\n\r"); 00520 snd_start=1; 00521 rpc_ab_web=0;//web-request löschen 00522 led3=1; 00523 } 00524 } 00525 00526 if(en_tftp_srv==0){ 00527 if (rpc_stp_web>0 or ser_code3){//ser_code3 --> STOP 00528 getdipadr(); //DIP-Schalter decodieren 00529 if (rpc_stp_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln 00530 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren 00531 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen 00532 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen 00533 strcat(cmd_strg_buffer,fb_cmd_stp_strg);//auf-Kommando anhaengen 00534 if (ser_code3){printf("STOP-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster 00535 if (rpc_stp_web>0){printf("STOP-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command 00536 printf(fb_adr_strg);printf("\n\r"); 00537 snd_start=1; 00538 rpc_stp_web=0;//web-request löschen 00539 led3=1;led4=1; 00540 } 00541 } 00542 00543 if(en_tftp_srv==0){ 00544 if (rpc_auf_web>0 or ser_code2){//ser_code2 --> AUFWAERTS 00545 getdipadr(); //DIP-Schalter decodieren 00546 if (rpc_auf_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln 00547 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren 00548 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen 00549 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen 00550 strcat(cmd_strg_buffer,fb_cmd_up_strg);//auf-Kommando anhaengen 00551 if (ser_code2){printf("AUF-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster 00552 if (rpc_auf_web>0){printf("AUF-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command 00553 printf(fb_adr_strg);printf("\n\r"); 00554 snd_start=1; 00555 rpc_auf_web=0;//web-request löschen 00556 led4=1; 00557 } 00558 } 00559 00560 if(en_tftp_srv==0){ 00561 if (learn_button){//Ausgabe info wenn learn-button betätigt wird 00562 printf("LearnButton pressed\n\r"); 00563 getdipadr(); //DIP-Schalter decodieren 00564 if (fb_adr>0){ 00565 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren 00566 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen 00567 strcat(cmd_strg_buffer,"1");//Lern-Bit anhaengen 00568 strcat(cmd_strg_buffer,fb_cmd_lrn_strg);//Lern-Kommando anhaengen 00569 snd_start=1; 00570 led2=1;led3=1;led4=1; 00571 printf(cmd_strg_buffer);printf("\n\r"); 00572 } 00573 else {printf("Adresse muss <> NULL sein! \n\r");} 00574 } 00575 } 00576 00577 // kommandoverarbeitung via rpc-variable via browser gesetzt 00578 if (rpc_cmd_web!=1){wdt.kick();}// watchdog zyklisch aufziehen (nur wenn rpc_cmd_web <> 1 ist) 00579 if (old_rpc_cmd_web!=rpc_cmd_web){//ausgabe des commandos welcher vom browser übermittelt wird 00580 if (rpc_cmd_web==1){printf("WebCmd:Reset request... \n\r");}//Resetrequest mit (=1) 00581 if (rpc_cmd_web==2){printf("Start as TFTP-Server \n\r");en_tftp_srv=1;write_config_sd();rpc_cmd_web=1;}//in config auf tftp setzen und neu starten (=2) 00582 if (rpc_cmd_web==3){printf("Start as RMF-Transmitter \n\r");en_tftp_srv=0;write_config_sd();rpc_cmd_web=1;}//in config auf rmf setzen und neu starten 00583 if (rpc_cmd_web==5){printf("WebCmd:Write DefCfg to SD... \n\r");write_defconfig_sd();rpc_cmd_web=0;}//schreibe DefCfg auf SD mit (=5) 00584 if (rpc_cmd_web==6){printf("WebCmd:Write ActCfg to SD... \n\r");write_config_sd();rpc_cmd_web=1;}//schreibe ActCfg auf SD und neu starten mit (=6) 00585 if (rpc_cmd_web==7){printf("WebCmd:Load Config from SD... \n\r");read_config_sd();rpc_cmd_web=1;}//lade ActCfg von SD und starte neu mit (=7) 00586 if (rpc_cmd_web==8){printf("WebCmd:Read UTC from NTP-Server... \n\r");get_NTPtime();rpc_cmd_web=0;}//lade utc vom ntp-server mit (=8) 00587 old_rpc_cmd_web=rpc_cmd_web; 00588 } 00589 00590 00591 if(en_tftp_srv>0){ 00592 TFTPServerState state = srv->State(); 00593 switch(state) { 00594 case listen: 00595 //printf("MAIN: TFTP listen\n\r"); 00596 break; 00597 case reading: 00598 srv->getFilename(filename); 00599 printf("TFTP:Reading file: %s\n\r", filename); 00600 break; 00601 case writing: 00602 srv->getFilename(filename); 00603 printf("TFTP:Writing file: %s\n\r", filename); 00604 break; 00605 case error: 00606 printf("TFTP:Error\n\r"); 00607 break; 00608 case suspended: 00609 printf("TFTP:Suspended\n\r"); 00610 break; 00611 default: 00612 printf("TFTP:Unknown status\n\r"); 00613 break; 00614 } 00615 } 00616 } 00617 } 00618 }
Generated on Tue Jul 12 2022 20:49:14 by
1.7.2