Marco Haufe / RMFWeb

Dependencies:   ChaNFSSD TFTPServer RMFWeb

Dependents:   RMFWeb

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers NewRMFWeb.cpp Source File

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 }