Small Testprogram to have WebAccess via Webserver to a 433Mhz tranmitter to control remotly some devices from remote, with TFTP, NTP and RMF. This could be a base to develop applications.
Dependencies: ChaNFSSD TFTPServer RMFWeb
Diff: NewRMFWeb.cpp
- Revision:
- 0:51f1ef89ec7b
- Child:
- 1:809b59c7a800
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NewRMFWeb.cpp Fri Jun 06 09:06:03 2014 +0000 @@ -0,0 +1,618 @@ +// (c) 2014 M.Haufe +// Programm dient zum testweises +// senden der RMF-Rollladencodes +// via 433Mhz-ASK-Sender +// - erweitert um web-funktionalität +// - erweitert um JavaScript webinterface +// - erweitert um integer von Website zu senden und via Termialfenster anzuzeigen +// - Errorhandling Netzwerkverbindung zugefuegt +// - Lerntaste zugefügt +// - DIP-Schalter für Adresse 0...15 zugefügt +// - Stop-Taste zugefügt +// - zugewiesene IP-Adresse in sring konvertieren in abhängigkeit des dip-schalters +// - kopieren der _rmf.htm in rmf_htm mit ersetzen der url's in die gegenwärtig gültigen (wird nicht mehr gebraucht !) +// - rpc-funktionalitaet auf website mit bibliothek realisert, damit ok auch unter os-x +// - adressübermittlung der website und umsetzen in entsprechendes kommando +// - andere pins zugeordnet für dip-schalter tasten, led damit platz und anschlusspins für sd-card frei wird +// - uSD-Slot zugefügt +// - TFTP-Server zugefügt +// - Watchdog zugefügt +// - Grundlage zur Getupverwaltung über <cfg.dat> Datei (SD) implementiert +// - NTP-Zeitserver-Funktionalität +// Stand : 25.04.2014 + + +//WEB-Zugriffe via RPC oder Website +//URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201 +//URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201 +//URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201 +//URL --> http://10.68.139.239:8020/rpc/data_rpc/write%20123456789 +//via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm +//via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm + + + +#include "mbed.h" +#include "SDFileSystem.h" +#include "TFTPServer.h" +#include "EthernetNetIf.h" +#include "HTTPServer.h" +#include "RPCFunction.h" +#include "SerialRPCInterface.h" +#include "NTPClient.h" + + +//192.168.178.67 +extern "C" void mbed_mac_address ( char *s) +{ +char mac [6]; +mac [0]=0x0A; +mac [1]=0xC1; +mac [2]=0x10; +mac [3]=0x51; +mac [4]=0x0B; +mac [5]=0xCA; +memcpy (s, mac , 6); +} + + + +NTPClient ntp; // define the NTP server +TFTPServer *srv; // define the TFTP Server +HTTPServer http; // define the http server +Timer t; // used in main() to send debug output every 2 seconds +Serial *serial; // serial just for debugging +SDFileSystem sd(p5, p6, p7, p8, "sd"); // only needed if you save to SD card +EthernetNetIf *eth; // network device + +LocalFileSystem local("local"); // defining this makes MBED internal mem accessible +LocalFileSystem web("local"); // defining this makes MBED internal mem accessible + + + +Ticker sample1; +Timer ptim;// timer für pulsdauermessungen aktiviert + +//Hardware-Init +DigitalIn adr_bit3(p9);//Adresse Bit 3 +DigitalIn adr_bit2(p10);//Adresse Bit 2 +DigitalIn adr_bit1(p11);//Adresse Bit 1 +DigitalIn adr_bit0(p12);//Adresse Bit 0 + +DigitalIn ser_code2(p13);//auf +DigitalIn ser_code3(p14);//stop +DigitalIn ser_code1(p15);//ab +DigitalIn learn_button(p16);//Lern-Taste + +DigitalOut web_access_led(p17); //ausgang für led wenn zugriff über javascript der website erfolgt +DigitalOut sd_status_led(p18); // sd-status wird gesetzt, wenn sd-test erfolgreich war + +DigitalOut test_out1(p19); //ausgang für flankenerkennung deklarieren +DigitalOut test_out2(p20); //test-output deklarieren + +DigitalOut myled1(LED1,"led1"); //Led 1 deklarieren +DigitalOut led2(LED2, "led2"); +DigitalOut led3(LED3, "led3"); +DigitalOut led4(LED4, "led4"); + +//allgemeine variablen +char tmp1_char; +int tmp1_int; +//variablen ethernetverbindung +char net_ok; // ergebnis der ethernet verbindung +char try_net; // zählschleife für ethernet verbindung +int port_adr=8020; // vorgabe der portadresse des http-servers +char ip_adr_str[]= "http://xxx.xxx.xxx.xxx:xxxx ";//platzhalter für ip-adresse +//rpc-variablen +char rpc_ab_web; +char rpc_stp_web; +char rpc_auf_web; +int rpc_data_web; +char rpc_cmd_web; +char old_rpc_cmd_web; +//variablen um eine stehende verbindung zwischen browser und mbed zu erkennen +int rpc_mbed_con; +char rpc_browser_con; +char browser_connected; +char old_browser_connected; +//tftp-variablen +char wd_tim_cause=0; +char sd_ok; +char en_tftp_srv=0;//entweder funk(=0) oder tftp(=1)-funktionalität möglich +int filecounter = 0; // incoming files +char filename[256]; // to display filenames +//remotecontrol-variablen +char snd_start; +int snd_req_activ; +char act_frame_cnt; +char frame_bit_ont; +int bit_val; +char bit_index; +char hlp_bit_idx; +char cmd_str_len; +char cmd_str_len1; +char target_frame_cnt; +char main_loop_cnt; +char fb_adr; +char strg1[]=" "; +char cmd_strg_buffer []="0000000000000000000000000000000000000000"; +char fb_id_strg[]="0001100100100000011111001101";//externe fb-id +char fb_adr_strg[]="0000"; +char fb_cmd_up_strg[]="0010001"; +char fb_cmd_dn_strg[]="0110011"; +char fb_cmd_stp_strg[]="1010101"; +char fb_cmd_lrn_strg[]="1001100"; + + + + +// "0010101001000000010100100001000100010001" +// IIIIIIIIIIIIIIIIIIIIIIIIIIIICCCCLBBBBBBB +//FB-ID xxxxxxxxxxxxxxxxxxxxxxxxxxxx +//FB-Ch xxxx +//FB-Lrn x +//FB-Cmd xxxxxxx + +//eingelernte Kanäle : +//0 = alle +//1 = Terrasse Tür +//2 = Terasse Fenster +//3 = Küche +//4 = Zimmer Jenny links +//5 = Zimmer Jenny rechts +//6 = Zimmer Bine + +//vorbereitet : +//7 = HH-Gaube +//8 = HH-Giebel +//9 = HH-Dach + +//angedacht : +//10 = Simu-Bad +//11 = Simu-Gäste-WC + + +//****************************************** Anfang Subroutinen ******************************************** + +class Watchdog { +public: +// Load timeout value in watchdog timer and enable + void kick(float s) { + LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK + uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 + LPC_WDT->WDTC = s * (float)clk; + LPC_WDT->WDMOD = 0x3; // Enabled and Reset + kick(); + } +// "kick" or "feed" the dog - reset the watchdog timer +// by writing this required bit pattern + void kick() { + LPC_WDT->WDFEED = 0xAA; + LPC_WDT->WDFEED = 0x55; + } +}; +// Setup the watchdog timer +Watchdog wdt; + +void get_NTPtime(){ + time_t ctTime; + //printf("NTP setTime...\n\r"); + Host server(IpAddr(), 123, "pool.ntp.org"); + ntp.setTime(server); + ctTime = time(NULL); + ctTime = ctTime+7200;// +2:00 in sec Sommerzeit Deutschland + //printf("\n\rTime is now (UTC): %d %s\n\r",ctTime,ctime(&ctTime)); + printf("Time is now : %s\n\r", ctime(&ctTime));// anzeige der aktuellen ntp-zeit + } + +char test_sd(){ + // test SD card (TFTP server can work without it) + sd_ok=0; // 0 = noch kein sd-test durchgeführt + sd_status_led = 0; // sd-status-led ausschalten + //printf("TEST SD...\n\r"); + FILE *fp = fopen("/sd/test.txt", "wb"); + if ( fp == NULL ){ + sd_ok=99;}// 99 = signalisiert sd-fehler + else { + sd_ok=1;// 1 = sd-test ok + sd_status_led = 1; // sd-status-led einschalten + fclose(fp); + } + remove("/sd/test.txt"); + return sd_ok; + } + +void write_defconfig_sd(){ + //default-configuration auf sd in datei -cfg.dat- schreiben + if(sd_ok==1){ + //printf("Write DefConfig to SD...\n\r"); + FILE *fp = fopen("/sd/cfg.dat", "wb"); + tmp1_char=0;fputc(tmp1_char,fp);//einstellung für >en_tftp_srv< + fclose(fp); + } + } + +void write_config_sd(){ + //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben + if(sd_ok==1){ + //printf("Write ActConfig to SD...\n\r"); + FILE *fp = fopen("/sd/cfg.dat", "wb"); + fputc(en_tftp_srv,fp);//gegnwärtige einstellung für >en_tftp_srv< + fclose(fp); + } + } + +void read_config_sd(){ + //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben + if(sd_ok==1){ + //printf("Load Config from SD...\n\r"); + FILE *fp = fopen("/sd/cfg.dat", "rb"); + en_tftp_srv=fgetc(fp);//einstellung für >en_tftp_srv< laden + fclose(fp); + } + } + + +void getdipadr()//ermittelt die gegenwärtig mit dip schalter eingestellte adresse + { + fb_adr=0; + if (adr_bit3>0){fb_adr_strg[0]='1';fb_adr=fb_adr+8;} else {fb_adr_strg[0]='0';} + if (adr_bit2>0){fb_adr_strg[1]='1';fb_adr=fb_adr+4;} else {fb_adr_strg[1]='0';} + if (adr_bit1>0){fb_adr_strg[2]='1';fb_adr=fb_adr+2;} else {fb_adr_strg[2]='0';} + if (adr_bit0>0){fb_adr_strg[3]='1';fb_adr=fb_adr+1;} else {fb_adr_strg[3]='0';} + } + +void getwebadr()//ermttelt die via web-commando ermittelte adresse und ueberschreibt >fb_adr_strg< mit aktuellem wert + { + fb_adr=0; + if (rpc_ab_web>0){fb_adr = rpc_ab_web-1;} + if (rpc_stp_web>0){fb_adr = rpc_stp_web-1;} + if (rpc_auf_web>0){fb_adr = rpc_auf_web-1;} + switch(fb_adr) { + case 0: strcpy(fb_adr_strg,"0000"); break; + case 1: strcpy(fb_adr_strg,"0001"); break; + case 2: strcpy(fb_adr_strg,"0010"); break; + case 3: strcpy(fb_adr_strg,"0011"); break; + case 4: strcpy(fb_adr_strg,"0100"); break; + case 5: strcpy(fb_adr_strg,"0101"); break; + case 6: strcpy(fb_adr_strg,"0110"); break; + default: strcpy(fb_adr_strg,"1111"); break; + } + } + +void sample_sub() //timer-isr +{ + test_out1 = 1;//test_out-ausgang setzen + wait_us(10); + test_out1 = 0;//test_out-ausgang löschen + + if (snd_start){//snd_req_activ >0 spiegelt eine anforderung zum senden wieder + if (snd_req_activ==0){snd_req_activ=1;} + } + else + if (snd_req_activ==1){ + snd_req_activ=2; + act_frame_cnt=0; + } + + if(snd_req_activ>1){snd_req_activ++;} + + if (snd_req_activ==3){//startpuls beginnen ~5.2ms lang mit anpassung des isr-zeitintervals + test_out2 = 1;sample1.attach(&sample_sub,0.000522); + act_frame_cnt++; + } + if (snd_req_activ==13){//startpuls beenden mit anpassung des isr-zeitintervals bis zum 1.Datenbit + test_out2 = 0; + sample1.attach(&sample_sub,0.000425); + hlp_bit_idx=0; + bit_index=0; + cmd_str_len=strlen(cmd_strg_buffer); + cmd_str_len1=cmd_str_len*2; + cmd_str_len=cmd_str_len1+17; + } + + if (snd_req_activ<cmd_str_len){//vorher 97 + + if (snd_req_activ>=17){ + hlp_bit_idx=!hlp_bit_idx; + + if (hlp_bit_idx!=0){ + strg1[0]=cmd_strg_buffer [bit_index]; + bit_val= atoi(strg1); + bit_index++; + test_out2 = 1; + if (bit_val==0){sample1.attach(&sample_sub,0.000345);} else {sample1.attach(&sample_sub,0.000710);} + + } + else { + test_out2 = 0; + if (bit_val==0){sample1.attach(&sample_sub,0.000715);} else {sample1.attach(&sample_sub,0.000350);} + } + + } + + } + + if (snd_req_activ==cmd_str_len+23){//defineirt laenge vom low-pegel zwischen 2 frames + if (act_frame_cnt<target_frame_cnt){snd_req_activ=2;led2=!led2;} + else{ + led2=0;led3=0;led4=0;} + } + + if (snd_req_activ>200){ + snd_req_activ = 0; + test_out2 = 0; + sample1.attach(&sample_sub,0.0005); + } + +} + +//****************************************** Ende Subroutinen ******************************************** + +int main() { + + // configure serial terminal + serial = new Serial(USBTX, USBRX); + serial->baud(9600); + + // Watchdog auslösegrund auslesen und wd-timeout initialisieren + if ((LPC_WDT->WDMOD >> 2) & 1) + wd_tim_cause = 1; else wd_tim_cause = 2; + wdt.kick(30.0);// setzen des wd-timeout in sec + + test_sd(); // sd-speicher testen + read_config_sd(); // configuration von sd einlesen + + + + + //terminalausgabe beim start + printf("\x1B\x48"); //cursor home + printf("\x1B\x4A"); //lösche bildschirm + printf("\n\r"); + printf("RMFWeb (Rev25042014.0700) is starting...\n\r"); //Textausgabe mit zeilenvorschub + if (sd_ok==1)printf("SD:Filesystem ok\n\r");else printf("SD:Filesystem fail\n\r");// info über wd-cause ausgeben + if (wd_tim_cause==1)printf("WDT:SoftReset\n\r");else printf("WDT:HardReset\n\r");// info über wd-cause ausgeben + if (en_tftp_srv==0)printf("TFTPmode:off\n\r");else printf("TFTPmode:activ\n\r");//info betriebsart TFTP oder Funk ausgeben + + + // Ethernet verbindungsaufbau + EthernetNetIf eth; + EthernetErr ethErr; + try_net=1;net_ok=0; + do { + printf("Looking for Ethernet %d...\n\r", try_net); + wdt.kick();// watchdog aufziehen + ethErr = eth.setup(); + if(ethErr==0){net_ok=1;break;} + ++try_net; + } while (try_net<=3); + + + if (net_ok==1){// netzwerk verbunden + http.bind(port_adr); + printf("Connected-Status: OK \n\r"); + const char* hwAddr = eth.getHwAddr(); + IpAddr ethIp = eth.getIp(); + snprintf(ip_adr_str,27,"http://%d.%d.%d.%d:%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3],port_adr);//url-string erzegen + printf("%s",ip_adr_str);;printf("\n\r");//ip/url ausgeben + printf("Server is online! \n\r");// info das server nicht verbunden ist + get_NTPtime(); + } + else{//netzwerk nicht verbunden + printf("Ethernet Error %d\n\r", ethErr);// sonstiger fehler + printf("Server is offline! \n\r");// info das server nicht verbunden ist + rpc_browser_con=0; + en_tftp_srv=0;//tftp-server ausschalten + } + + + FSHandler::mount("/local", "/web"); // mounting /web als MBED root pfad + FSHandler::mount("/sd", "/sd"); // mounting /SD als SD-Card root pfad + + Base::add_rpc_class<DigitalOut>(); + Base::add_rpc_class<DigitalIn>(); + Base::add_rpc_class<AnalogIn>(); + + http.addHandler<SimpleHandler>("/hello"); + http.addHandler<FSHandler>("/");// default handler + http.addHandler<FSHandler>("/web"); + http.addHandler<FSHandler>("/sd");// default handler + + http.addHandler<RPCHandler>("/rpc"); + + RPCVariable<char> RPCrpc_ab_web(&rpc_ab_web, "ab_rpc");//URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201 + RPCVariable<char> RPCrpc_stp_web(&rpc_stp_web, "stp_rpc");//URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201 + RPCVariable<char> RPCrpc_auf_web(&rpc_auf_web, "auf_rpc");//URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201 + RPCVariable<int> RPCrpc_data_web(&rpc_data_web, "data_rpc");//URL --> http://10.68.139.239:8020/rpc/data_rpc/write%201 + RPCVariable<int> RPCrpc_mbed_con(&rpc_mbed_con, "mbed_rpc"); // eine art watchdog damit website eine stehende verbindung zum mbed erkennt + RPCVariable<char> RPCrpc_browser_con(&rpc_browser_con, "brow_rpc"); // eine rt watchdog um gegenwärtigen browswerzugriff zu erkennen + RPCVariable<char> RPCrpc_cmd_web(&rpc_cmd_web, "cmd_rpc");// zum übergeben von kommandos der website an mbed, z.b. resetanforderung + //via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm + //via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm + + + + wdt.kick(5.0);// setzen des wd-timeout in sec + + target_frame_cnt=16;//anzahl der zu sendenen frames nach einer anforderung + web_access_led =0;// webaccess-led ausschalten + browser_connected=0; + old_browser_connected=0; + main_loop_cnt=0; + test_out2 = 0; + fb_adr=0; + + + + + + if(en_tftp_srv>0){ + sample1.detach(); + srv = new TFTPServer("/sd/"); + printf("TFTP:Server listen...\n\r"); + } + else{ + printf("RMF-Mode activ...\n\r"); + sample1.attach(&sample_sub,0.0005);//500us timer-isr + ptim.reset(); //timer löschen + } + + + t.start(); + + + + + while (1) { + Net::poll(); + + if(en_tftp_srv>0){ + if (serial->readable()) { + int c = serial->getc(); + switch (c) { + case 's': + srv->suspend(); + break; + case 'r': + srv->resume(); + break; + } + } + + + if (srv->fileCnt() > filecounter) { + filecounter = srv->fileCnt(); + srv->getFilename(filename); + printf("TFTP:New file: %s\n\r", filename); + } + } + + + if (t.read() > 0.5) { + t.reset(); + + snd_start=0; + myled1 = !myled1;//alive-led und variable hochzählen -> wird im browser angezeigt + rpc_mbed_con++;// variable einfach nur fortwaehrend inkrementieren damit website stehende verbindung zum mbed erkennen kann + if (rpc_mbed_con>255){rpc_mbed_con=0;} + // einen verbundenen browser detektieren + old_browser_connected = browser_connected; + browser_connected=0; + if (rpc_browser_con>1){// rpc_browser_con wird vom verbundenen browser immer wieder auf 3 gesetzt + rpc_browser_con--;// hier wird der wert immer wieder dekrementert + browser_connected=1;}// sofern wert >1 bleibt, gilt verbindung als hergestellt + if (old_browser_connected>browser_connected){printf("WebBrowser disconnected \n\r");} + if (browser_connected>old_browser_connected){printf("WebBrowser connected \n\r");} + if (browser_connected==1){web_access_led=1;} else {web_access_led=0;}// brwoser-verbindung via led anzeige + + if(en_tftp_srv==0){ + if (rpc_ab_web>0 or ser_code1){//ser_code1 --> ABWAERTS + getdipadr(); //DIP-Schalter decodieren + if (rpc_ab_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln + strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren + strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen + strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen + strcat(cmd_strg_buffer,fb_cmd_dn_strg);//auf-Kommando anhaengen + if (ser_code1){printf("AB-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster + if (rpc_ab_web>0){printf("AB-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command + printf(fb_adr_strg);printf("\n\r"); + snd_start=1; + rpc_ab_web=0;//web-request löschen + led3=1; + } + } + + if(en_tftp_srv==0){ + if (rpc_stp_web>0 or ser_code3){//ser_code3 --> STOP + getdipadr(); //DIP-Schalter decodieren + if (rpc_stp_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln + strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren + strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen + strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen + strcat(cmd_strg_buffer,fb_cmd_stp_strg);//auf-Kommando anhaengen + if (ser_code3){printf("STOP-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster + if (rpc_stp_web>0){printf("STOP-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command + printf(fb_adr_strg);printf("\n\r"); + snd_start=1; + rpc_stp_web=0;//web-request löschen + led3=1;led4=1; + } + } + + if(en_tftp_srv==0){ + if (rpc_auf_web>0 or ser_code2){//ser_code2 --> AUFWAERTS + getdipadr(); //DIP-Schalter decodieren + if (rpc_auf_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln + strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren + strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen + strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen + strcat(cmd_strg_buffer,fb_cmd_up_strg);//auf-Kommando anhaengen + if (ser_code2){printf("AUF-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster + if (rpc_auf_web>0){printf("AUF-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command + printf(fb_adr_strg);printf("\n\r"); + snd_start=1; + rpc_auf_web=0;//web-request löschen + led4=1; + } + } + + if(en_tftp_srv==0){ + if (learn_button){//Ausgabe info wenn learn-button betätigt wird + printf("LearnButton pressed\n\r"); + getdipadr(); //DIP-Schalter decodieren + if (fb_adr>0){ + strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren + strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen + strcat(cmd_strg_buffer,"1");//Lern-Bit anhaengen + strcat(cmd_strg_buffer,fb_cmd_lrn_strg);//Lern-Kommando anhaengen + snd_start=1; + led2=1;led3=1;led4=1; + printf(cmd_strg_buffer);printf("\n\r"); + } + else {printf("Adresse muss <> NULL sein! \n\r");} + } + } + + // kommandoverarbeitung via rpc-variable via browser gesetzt + if (rpc_cmd_web!=1){wdt.kick();}// watchdog zyklisch aufziehen (nur wenn rpc_cmd_web <> 1 ist) + if (old_rpc_cmd_web!=rpc_cmd_web){//ausgabe des commandos welcher vom browser übermittelt wird + if (rpc_cmd_web==1){printf("WebCmd:Reset request... \n\r");}//Resetrequest mit (=1) + 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) + 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 + 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) + 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) + 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) + 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) + old_rpc_cmd_web=rpc_cmd_web; + } + + + if(en_tftp_srv>0){ + TFTPServerState state = srv->State(); + switch(state) { + case listen: + //printf("MAIN: TFTP listen\n\r"); + break; + case reading: + srv->getFilename(filename); + printf("TFTP:Reading file: %s\n\r", filename); + break; + case writing: + srv->getFilename(filename); + printf("TFTP:Writing file: %s\n\r", filename); + break; + case error: + printf("TFTP:Error\n\r"); + break; + case suspended: + printf("TFTP:Suspended\n\r"); + break; + default: + printf("TFTP:Unknown status\n\r"); + break; + } + } + } + } +}