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

Dependents:   RMFWeb

Committer:
ED7418
Date:
Mon Jun 16 07:40:08 2014 +0000
Revision:
1:809b59c7a800
Parent:
0:51f1ef89ec7b
mbed-lib and other libs are a based on a project, published in a Elektor-book "ARM-microkontroller Part II".

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ED7418 0:51f1ef89ec7b 1 // (c) 2014 M.Haufe
ED7418 0:51f1ef89ec7b 2 // Programm dient zum testweises
ED7418 0:51f1ef89ec7b 3 // senden der RMF-Rollladencodes
ED7418 0:51f1ef89ec7b 4 // via 433Mhz-ASK-Sender
ED7418 0:51f1ef89ec7b 5 // - erweitert um web-funktionalität
ED7418 0:51f1ef89ec7b 6 // - erweitert um JavaScript webinterface
ED7418 0:51f1ef89ec7b 7 // - erweitert um integer von Website zu senden und via Termialfenster anzuzeigen
ED7418 0:51f1ef89ec7b 8 // - Errorhandling Netzwerkverbindung zugefuegt
ED7418 0:51f1ef89ec7b 9 // - Lerntaste zugefügt
ED7418 0:51f1ef89ec7b 10 // - DIP-Schalter für Adresse 0...15 zugefügt
ED7418 0:51f1ef89ec7b 11 // - Stop-Taste zugefügt
ED7418 0:51f1ef89ec7b 12 // - zugewiesene IP-Adresse in sring konvertieren in abhängigkeit des dip-schalters
ED7418 0:51f1ef89ec7b 13 // - kopieren der _rmf.htm in rmf_htm mit ersetzen der url's in die gegenwärtig gültigen (wird nicht mehr gebraucht !)
ED7418 0:51f1ef89ec7b 14 // - rpc-funktionalitaet auf website mit bibliothek realisert, damit ok auch unter os-x
ED7418 0:51f1ef89ec7b 15 // - adressübermittlung der website und umsetzen in entsprechendes kommando
ED7418 0:51f1ef89ec7b 16 // - andere pins zugeordnet für dip-schalter tasten, led damit platz und anschlusspins für sd-card frei wird
ED7418 0:51f1ef89ec7b 17 // - uSD-Slot zugefügt
ED7418 0:51f1ef89ec7b 18 // - TFTP-Server zugefügt
ED7418 0:51f1ef89ec7b 19 // - Watchdog zugefügt
ED7418 1:809b59c7a800 20 // - Grundlage zur Setupverwaltung über <cfg.dat> Datei (SD) implementiert
ED7418 0:51f1ef89ec7b 21 // - NTP-Zeitserver-Funktionalität
ED7418 0:51f1ef89ec7b 22 // Stand : 25.04.2014
ED7418 0:51f1ef89ec7b 23
ED7418 0:51f1ef89ec7b 24
ED7418 0:51f1ef89ec7b 25 //WEB-Zugriffe via RPC oder Website
ED7418 0:51f1ef89ec7b 26 //URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201
ED7418 0:51f1ef89ec7b 27 //URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201
ED7418 0:51f1ef89ec7b 28 //URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201
ED7418 0:51f1ef89ec7b 29 //URL --> http://10.68.139.239:8020/rpc/data_rpc/write%20123456789
ED7418 0:51f1ef89ec7b 30 //via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm
ED7418 0:51f1ef89ec7b 31 //via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm
ED7418 0:51f1ef89ec7b 32
ED7418 0:51f1ef89ec7b 33
ED7418 0:51f1ef89ec7b 34
ED7418 0:51f1ef89ec7b 35 #include "mbed.h"
ED7418 0:51f1ef89ec7b 36 #include "SDFileSystem.h"
ED7418 0:51f1ef89ec7b 37 #include "TFTPServer.h"
ED7418 0:51f1ef89ec7b 38 #include "EthernetNetIf.h"
ED7418 0:51f1ef89ec7b 39 #include "HTTPServer.h"
ED7418 0:51f1ef89ec7b 40 #include "RPCFunction.h"
ED7418 0:51f1ef89ec7b 41 #include "SerialRPCInterface.h"
ED7418 0:51f1ef89ec7b 42 #include "NTPClient.h"
ED7418 0:51f1ef89ec7b 43
ED7418 0:51f1ef89ec7b 44
ED7418 0:51f1ef89ec7b 45 //192.168.178.67
ED7418 0:51f1ef89ec7b 46 extern "C" void mbed_mac_address ( char *s)
ED7418 0:51f1ef89ec7b 47 {
ED7418 0:51f1ef89ec7b 48 char mac [6];
ED7418 0:51f1ef89ec7b 49 mac [0]=0x0A;
ED7418 0:51f1ef89ec7b 50 mac [1]=0xC1;
ED7418 0:51f1ef89ec7b 51 mac [2]=0x10;
ED7418 0:51f1ef89ec7b 52 mac [3]=0x51;
ED7418 0:51f1ef89ec7b 53 mac [4]=0x0B;
ED7418 0:51f1ef89ec7b 54 mac [5]=0xCA;
ED7418 0:51f1ef89ec7b 55 memcpy (s, mac , 6);
ED7418 0:51f1ef89ec7b 56 }
ED7418 0:51f1ef89ec7b 57
ED7418 0:51f1ef89ec7b 58
ED7418 0:51f1ef89ec7b 59
ED7418 0:51f1ef89ec7b 60 NTPClient ntp; // define the NTP server
ED7418 0:51f1ef89ec7b 61 TFTPServer *srv; // define the TFTP Server
ED7418 0:51f1ef89ec7b 62 HTTPServer http; // define the http server
ED7418 0:51f1ef89ec7b 63 Timer t; // used in main() to send debug output every 2 seconds
ED7418 0:51f1ef89ec7b 64 Serial *serial; // serial just for debugging
ED7418 0:51f1ef89ec7b 65 SDFileSystem sd(p5, p6, p7, p8, "sd"); // only needed if you save to SD card
ED7418 0:51f1ef89ec7b 66 EthernetNetIf *eth; // network device
ED7418 0:51f1ef89ec7b 67
ED7418 0:51f1ef89ec7b 68 LocalFileSystem local("local"); // defining this makes MBED internal mem accessible
ED7418 0:51f1ef89ec7b 69 LocalFileSystem web("local"); // defining this makes MBED internal mem accessible
ED7418 0:51f1ef89ec7b 70
ED7418 0:51f1ef89ec7b 71
ED7418 0:51f1ef89ec7b 72
ED7418 0:51f1ef89ec7b 73 Ticker sample1;
ED7418 0:51f1ef89ec7b 74 Timer ptim;// timer für pulsdauermessungen aktiviert
ED7418 0:51f1ef89ec7b 75
ED7418 0:51f1ef89ec7b 76 //Hardware-Init
ED7418 0:51f1ef89ec7b 77 DigitalIn adr_bit3(p9);//Adresse Bit 3
ED7418 0:51f1ef89ec7b 78 DigitalIn adr_bit2(p10);//Adresse Bit 2
ED7418 0:51f1ef89ec7b 79 DigitalIn adr_bit1(p11);//Adresse Bit 1
ED7418 0:51f1ef89ec7b 80 DigitalIn adr_bit0(p12);//Adresse Bit 0
ED7418 0:51f1ef89ec7b 81
ED7418 0:51f1ef89ec7b 82 DigitalIn ser_code2(p13);//auf
ED7418 0:51f1ef89ec7b 83 DigitalIn ser_code3(p14);//stop
ED7418 0:51f1ef89ec7b 84 DigitalIn ser_code1(p15);//ab
ED7418 0:51f1ef89ec7b 85 DigitalIn learn_button(p16);//Lern-Taste
ED7418 0:51f1ef89ec7b 86
ED7418 0:51f1ef89ec7b 87 DigitalOut web_access_led(p17); //ausgang für led wenn zugriff über javascript der website erfolgt
ED7418 0:51f1ef89ec7b 88 DigitalOut sd_status_led(p18); // sd-status wird gesetzt, wenn sd-test erfolgreich war
ED7418 0:51f1ef89ec7b 89
ED7418 0:51f1ef89ec7b 90 DigitalOut test_out1(p19); //ausgang für flankenerkennung deklarieren
ED7418 0:51f1ef89ec7b 91 DigitalOut test_out2(p20); //test-output deklarieren
ED7418 0:51f1ef89ec7b 92
ED7418 0:51f1ef89ec7b 93 DigitalOut myled1(LED1,"led1"); //Led 1 deklarieren
ED7418 0:51f1ef89ec7b 94 DigitalOut led2(LED2, "led2");
ED7418 0:51f1ef89ec7b 95 DigitalOut led3(LED3, "led3");
ED7418 0:51f1ef89ec7b 96 DigitalOut led4(LED4, "led4");
ED7418 0:51f1ef89ec7b 97
ED7418 0:51f1ef89ec7b 98 //allgemeine variablen
ED7418 0:51f1ef89ec7b 99 char tmp1_char;
ED7418 0:51f1ef89ec7b 100 int tmp1_int;
ED7418 0:51f1ef89ec7b 101 //variablen ethernetverbindung
ED7418 0:51f1ef89ec7b 102 char net_ok; // ergebnis der ethernet verbindung
ED7418 0:51f1ef89ec7b 103 char try_net; // zählschleife für ethernet verbindung
ED7418 0:51f1ef89ec7b 104 int port_adr=8020; // vorgabe der portadresse des http-servers
ED7418 0:51f1ef89ec7b 105 char ip_adr_str[]= "http://xxx.xxx.xxx.xxx:xxxx ";//platzhalter für ip-adresse
ED7418 0:51f1ef89ec7b 106 //rpc-variablen
ED7418 0:51f1ef89ec7b 107 char rpc_ab_web;
ED7418 0:51f1ef89ec7b 108 char rpc_stp_web;
ED7418 0:51f1ef89ec7b 109 char rpc_auf_web;
ED7418 0:51f1ef89ec7b 110 int rpc_data_web;
ED7418 0:51f1ef89ec7b 111 char rpc_cmd_web;
ED7418 0:51f1ef89ec7b 112 char old_rpc_cmd_web;
ED7418 0:51f1ef89ec7b 113 //variablen um eine stehende verbindung zwischen browser und mbed zu erkennen
ED7418 0:51f1ef89ec7b 114 int rpc_mbed_con;
ED7418 0:51f1ef89ec7b 115 char rpc_browser_con;
ED7418 0:51f1ef89ec7b 116 char browser_connected;
ED7418 0:51f1ef89ec7b 117 char old_browser_connected;
ED7418 0:51f1ef89ec7b 118 //tftp-variablen
ED7418 0:51f1ef89ec7b 119 char wd_tim_cause=0;
ED7418 0:51f1ef89ec7b 120 char sd_ok;
ED7418 0:51f1ef89ec7b 121 char en_tftp_srv=0;//entweder funk(=0) oder tftp(=1)-funktionalität möglich
ED7418 0:51f1ef89ec7b 122 int filecounter = 0; // incoming files
ED7418 0:51f1ef89ec7b 123 char filename[256]; // to display filenames
ED7418 0:51f1ef89ec7b 124 //remotecontrol-variablen
ED7418 0:51f1ef89ec7b 125 char snd_start;
ED7418 0:51f1ef89ec7b 126 int snd_req_activ;
ED7418 0:51f1ef89ec7b 127 char act_frame_cnt;
ED7418 0:51f1ef89ec7b 128 char frame_bit_ont;
ED7418 0:51f1ef89ec7b 129 int bit_val;
ED7418 0:51f1ef89ec7b 130 char bit_index;
ED7418 0:51f1ef89ec7b 131 char hlp_bit_idx;
ED7418 0:51f1ef89ec7b 132 char cmd_str_len;
ED7418 0:51f1ef89ec7b 133 char cmd_str_len1;
ED7418 0:51f1ef89ec7b 134 char target_frame_cnt;
ED7418 0:51f1ef89ec7b 135 char main_loop_cnt;
ED7418 0:51f1ef89ec7b 136 char fb_adr;
ED7418 0:51f1ef89ec7b 137 char strg1[]=" ";
ED7418 0:51f1ef89ec7b 138 char cmd_strg_buffer []="0000000000000000000000000000000000000000";
ED7418 0:51f1ef89ec7b 139 char fb_id_strg[]="0001100100100000011111001101";//externe fb-id
ED7418 0:51f1ef89ec7b 140 char fb_adr_strg[]="0000";
ED7418 0:51f1ef89ec7b 141 char fb_cmd_up_strg[]="0010001";
ED7418 0:51f1ef89ec7b 142 char fb_cmd_dn_strg[]="0110011";
ED7418 0:51f1ef89ec7b 143 char fb_cmd_stp_strg[]="1010101";
ED7418 0:51f1ef89ec7b 144 char fb_cmd_lrn_strg[]="1001100";
ED7418 0:51f1ef89ec7b 145
ED7418 0:51f1ef89ec7b 146
ED7418 0:51f1ef89ec7b 147
ED7418 0:51f1ef89ec7b 148
ED7418 0:51f1ef89ec7b 149 // "0010101001000000010100100001000100010001"
ED7418 0:51f1ef89ec7b 150 // IIIIIIIIIIIIIIIIIIIIIIIIIIIICCCCLBBBBBBB
ED7418 0:51f1ef89ec7b 151 //FB-ID xxxxxxxxxxxxxxxxxxxxxxxxxxxx
ED7418 0:51f1ef89ec7b 152 //FB-Ch xxxx
ED7418 0:51f1ef89ec7b 153 //FB-Lrn x
ED7418 0:51f1ef89ec7b 154 //FB-Cmd xxxxxxx
ED7418 0:51f1ef89ec7b 155
ED7418 0:51f1ef89ec7b 156 //eingelernte Kanäle :
ED7418 0:51f1ef89ec7b 157 //0 = alle
ED7418 0:51f1ef89ec7b 158 //1 = Terrasse Tür
ED7418 0:51f1ef89ec7b 159 //2 = Terasse Fenster
ED7418 0:51f1ef89ec7b 160 //3 = Küche
ED7418 0:51f1ef89ec7b 161 //4 = Zimmer Jenny links
ED7418 0:51f1ef89ec7b 162 //5 = Zimmer Jenny rechts
ED7418 0:51f1ef89ec7b 163 //6 = Zimmer Bine
ED7418 0:51f1ef89ec7b 164
ED7418 0:51f1ef89ec7b 165 //vorbereitet :
ED7418 0:51f1ef89ec7b 166 //7 = HH-Gaube
ED7418 0:51f1ef89ec7b 167 //8 = HH-Giebel
ED7418 0:51f1ef89ec7b 168 //9 = HH-Dach
ED7418 0:51f1ef89ec7b 169
ED7418 0:51f1ef89ec7b 170 //angedacht :
ED7418 0:51f1ef89ec7b 171 //10 = Simu-Bad
ED7418 0:51f1ef89ec7b 172 //11 = Simu-Gäste-WC
ED7418 0:51f1ef89ec7b 173
ED7418 0:51f1ef89ec7b 174
ED7418 0:51f1ef89ec7b 175 //****************************************** Anfang Subroutinen ********************************************
ED7418 0:51f1ef89ec7b 176
ED7418 0:51f1ef89ec7b 177 class Watchdog {
ED7418 0:51f1ef89ec7b 178 public:
ED7418 0:51f1ef89ec7b 179 // Load timeout value in watchdog timer and enable
ED7418 0:51f1ef89ec7b 180 void kick(float s) {
ED7418 0:51f1ef89ec7b 181 LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK
ED7418 0:51f1ef89ec7b 182 uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4
ED7418 0:51f1ef89ec7b 183 LPC_WDT->WDTC = s * (float)clk;
ED7418 0:51f1ef89ec7b 184 LPC_WDT->WDMOD = 0x3; // Enabled and Reset
ED7418 0:51f1ef89ec7b 185 kick();
ED7418 0:51f1ef89ec7b 186 }
ED7418 0:51f1ef89ec7b 187 // "kick" or "feed" the dog - reset the watchdog timer
ED7418 0:51f1ef89ec7b 188 // by writing this required bit pattern
ED7418 0:51f1ef89ec7b 189 void kick() {
ED7418 0:51f1ef89ec7b 190 LPC_WDT->WDFEED = 0xAA;
ED7418 0:51f1ef89ec7b 191 LPC_WDT->WDFEED = 0x55;
ED7418 0:51f1ef89ec7b 192 }
ED7418 0:51f1ef89ec7b 193 };
ED7418 0:51f1ef89ec7b 194 // Setup the watchdog timer
ED7418 0:51f1ef89ec7b 195 Watchdog wdt;
ED7418 0:51f1ef89ec7b 196
ED7418 0:51f1ef89ec7b 197 void get_NTPtime(){
ED7418 0:51f1ef89ec7b 198 time_t ctTime;
ED7418 0:51f1ef89ec7b 199 //printf("NTP setTime...\n\r");
ED7418 0:51f1ef89ec7b 200 Host server(IpAddr(), 123, "pool.ntp.org");
ED7418 0:51f1ef89ec7b 201 ntp.setTime(server);
ED7418 0:51f1ef89ec7b 202 ctTime = time(NULL);
ED7418 0:51f1ef89ec7b 203 ctTime = ctTime+7200;// +2:00 in sec Sommerzeit Deutschland
ED7418 0:51f1ef89ec7b 204 //printf("\n\rTime is now (UTC): %d %s\n\r",ctTime,ctime(&ctTime));
ED7418 0:51f1ef89ec7b 205 printf("Time is now : %s\n\r", ctime(&ctTime));// anzeige der aktuellen ntp-zeit
ED7418 0:51f1ef89ec7b 206 }
ED7418 0:51f1ef89ec7b 207
ED7418 0:51f1ef89ec7b 208 char test_sd(){
ED7418 0:51f1ef89ec7b 209 // test SD card (TFTP server can work without it)
ED7418 0:51f1ef89ec7b 210 sd_ok=0; // 0 = noch kein sd-test durchgeführt
ED7418 0:51f1ef89ec7b 211 sd_status_led = 0; // sd-status-led ausschalten
ED7418 0:51f1ef89ec7b 212 //printf("TEST SD...\n\r");
ED7418 0:51f1ef89ec7b 213 FILE *fp = fopen("/sd/test.txt", "wb");
ED7418 0:51f1ef89ec7b 214 if ( fp == NULL ){
ED7418 0:51f1ef89ec7b 215 sd_ok=99;}// 99 = signalisiert sd-fehler
ED7418 0:51f1ef89ec7b 216 else {
ED7418 0:51f1ef89ec7b 217 sd_ok=1;// 1 = sd-test ok
ED7418 0:51f1ef89ec7b 218 sd_status_led = 1; // sd-status-led einschalten
ED7418 0:51f1ef89ec7b 219 fclose(fp);
ED7418 0:51f1ef89ec7b 220 }
ED7418 0:51f1ef89ec7b 221 remove("/sd/test.txt");
ED7418 0:51f1ef89ec7b 222 return sd_ok;
ED7418 0:51f1ef89ec7b 223 }
ED7418 0:51f1ef89ec7b 224
ED7418 0:51f1ef89ec7b 225 void write_defconfig_sd(){
ED7418 0:51f1ef89ec7b 226 //default-configuration auf sd in datei -cfg.dat- schreiben
ED7418 0:51f1ef89ec7b 227 if(sd_ok==1){
ED7418 0:51f1ef89ec7b 228 //printf("Write DefConfig to SD...\n\r");
ED7418 0:51f1ef89ec7b 229 FILE *fp = fopen("/sd/cfg.dat", "wb");
ED7418 0:51f1ef89ec7b 230 tmp1_char=0;fputc(tmp1_char,fp);//einstellung für >en_tftp_srv<
ED7418 0:51f1ef89ec7b 231 fclose(fp);
ED7418 0:51f1ef89ec7b 232 }
ED7418 0:51f1ef89ec7b 233 }
ED7418 0:51f1ef89ec7b 234
ED7418 0:51f1ef89ec7b 235 void write_config_sd(){
ED7418 0:51f1ef89ec7b 236 //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben
ED7418 0:51f1ef89ec7b 237 if(sd_ok==1){
ED7418 0:51f1ef89ec7b 238 //printf("Write ActConfig to SD...\n\r");
ED7418 0:51f1ef89ec7b 239 FILE *fp = fopen("/sd/cfg.dat", "wb");
ED7418 0:51f1ef89ec7b 240 fputc(en_tftp_srv,fp);//gegnwärtige einstellung für >en_tftp_srv<
ED7418 0:51f1ef89ec7b 241 fclose(fp);
ED7418 0:51f1ef89ec7b 242 }
ED7418 0:51f1ef89ec7b 243 }
ED7418 0:51f1ef89ec7b 244
ED7418 0:51f1ef89ec7b 245 void read_config_sd(){
ED7418 0:51f1ef89ec7b 246 //gegenwärtige configuration auf sd in datei -cfg.txt- schreiben
ED7418 0:51f1ef89ec7b 247 if(sd_ok==1){
ED7418 0:51f1ef89ec7b 248 //printf("Load Config from SD...\n\r");
ED7418 0:51f1ef89ec7b 249 FILE *fp = fopen("/sd/cfg.dat", "rb");
ED7418 0:51f1ef89ec7b 250 en_tftp_srv=fgetc(fp);//einstellung für >en_tftp_srv< laden
ED7418 0:51f1ef89ec7b 251 fclose(fp);
ED7418 0:51f1ef89ec7b 252 }
ED7418 0:51f1ef89ec7b 253 }
ED7418 0:51f1ef89ec7b 254
ED7418 0:51f1ef89ec7b 255
ED7418 0:51f1ef89ec7b 256 void getdipadr()//ermittelt die gegenwärtig mit dip schalter eingestellte adresse
ED7418 0:51f1ef89ec7b 257 {
ED7418 0:51f1ef89ec7b 258 fb_adr=0;
ED7418 0:51f1ef89ec7b 259 if (adr_bit3>0){fb_adr_strg[0]='1';fb_adr=fb_adr+8;} else {fb_adr_strg[0]='0';}
ED7418 0:51f1ef89ec7b 260 if (adr_bit2>0){fb_adr_strg[1]='1';fb_adr=fb_adr+4;} else {fb_adr_strg[1]='0';}
ED7418 0:51f1ef89ec7b 261 if (adr_bit1>0){fb_adr_strg[2]='1';fb_adr=fb_adr+2;} else {fb_adr_strg[2]='0';}
ED7418 0:51f1ef89ec7b 262 if (adr_bit0>0){fb_adr_strg[3]='1';fb_adr=fb_adr+1;} else {fb_adr_strg[3]='0';}
ED7418 0:51f1ef89ec7b 263 }
ED7418 0:51f1ef89ec7b 264
ED7418 0:51f1ef89ec7b 265 void getwebadr()//ermttelt die via web-commando ermittelte adresse und ueberschreibt >fb_adr_strg< mit aktuellem wert
ED7418 0:51f1ef89ec7b 266 {
ED7418 0:51f1ef89ec7b 267 fb_adr=0;
ED7418 0:51f1ef89ec7b 268 if (rpc_ab_web>0){fb_adr = rpc_ab_web-1;}
ED7418 0:51f1ef89ec7b 269 if (rpc_stp_web>0){fb_adr = rpc_stp_web-1;}
ED7418 0:51f1ef89ec7b 270 if (rpc_auf_web>0){fb_adr = rpc_auf_web-1;}
ED7418 0:51f1ef89ec7b 271 switch(fb_adr) {
ED7418 0:51f1ef89ec7b 272 case 0: strcpy(fb_adr_strg,"0000"); break;
ED7418 0:51f1ef89ec7b 273 case 1: strcpy(fb_adr_strg,"0001"); break;
ED7418 0:51f1ef89ec7b 274 case 2: strcpy(fb_adr_strg,"0010"); break;
ED7418 0:51f1ef89ec7b 275 case 3: strcpy(fb_adr_strg,"0011"); break;
ED7418 0:51f1ef89ec7b 276 case 4: strcpy(fb_adr_strg,"0100"); break;
ED7418 0:51f1ef89ec7b 277 case 5: strcpy(fb_adr_strg,"0101"); break;
ED7418 0:51f1ef89ec7b 278 case 6: strcpy(fb_adr_strg,"0110"); break;
ED7418 0:51f1ef89ec7b 279 default: strcpy(fb_adr_strg,"1111"); break;
ED7418 0:51f1ef89ec7b 280 }
ED7418 0:51f1ef89ec7b 281 }
ED7418 0:51f1ef89ec7b 282
ED7418 0:51f1ef89ec7b 283 void sample_sub() //timer-isr
ED7418 0:51f1ef89ec7b 284 {
ED7418 0:51f1ef89ec7b 285 test_out1 = 1;//test_out-ausgang setzen
ED7418 0:51f1ef89ec7b 286 wait_us(10);
ED7418 0:51f1ef89ec7b 287 test_out1 = 0;//test_out-ausgang löschen
ED7418 0:51f1ef89ec7b 288
ED7418 0:51f1ef89ec7b 289 if (snd_start){//snd_req_activ >0 spiegelt eine anforderung zum senden wieder
ED7418 0:51f1ef89ec7b 290 if (snd_req_activ==0){snd_req_activ=1;}
ED7418 0:51f1ef89ec7b 291 }
ED7418 0:51f1ef89ec7b 292 else
ED7418 0:51f1ef89ec7b 293 if (snd_req_activ==1){
ED7418 0:51f1ef89ec7b 294 snd_req_activ=2;
ED7418 0:51f1ef89ec7b 295 act_frame_cnt=0;
ED7418 0:51f1ef89ec7b 296 }
ED7418 0:51f1ef89ec7b 297
ED7418 0:51f1ef89ec7b 298 if(snd_req_activ>1){snd_req_activ++;}
ED7418 0:51f1ef89ec7b 299
ED7418 0:51f1ef89ec7b 300 if (snd_req_activ==3){//startpuls beginnen ~5.2ms lang mit anpassung des isr-zeitintervals
ED7418 0:51f1ef89ec7b 301 test_out2 = 1;sample1.attach(&sample_sub,0.000522);
ED7418 0:51f1ef89ec7b 302 act_frame_cnt++;
ED7418 0:51f1ef89ec7b 303 }
ED7418 0:51f1ef89ec7b 304 if (snd_req_activ==13){//startpuls beenden mit anpassung des isr-zeitintervals bis zum 1.Datenbit
ED7418 0:51f1ef89ec7b 305 test_out2 = 0;
ED7418 0:51f1ef89ec7b 306 sample1.attach(&sample_sub,0.000425);
ED7418 0:51f1ef89ec7b 307 hlp_bit_idx=0;
ED7418 0:51f1ef89ec7b 308 bit_index=0;
ED7418 0:51f1ef89ec7b 309 cmd_str_len=strlen(cmd_strg_buffer);
ED7418 0:51f1ef89ec7b 310 cmd_str_len1=cmd_str_len*2;
ED7418 0:51f1ef89ec7b 311 cmd_str_len=cmd_str_len1+17;
ED7418 0:51f1ef89ec7b 312 }
ED7418 0:51f1ef89ec7b 313
ED7418 0:51f1ef89ec7b 314 if (snd_req_activ<cmd_str_len){//vorher 97
ED7418 0:51f1ef89ec7b 315
ED7418 0:51f1ef89ec7b 316 if (snd_req_activ>=17){
ED7418 0:51f1ef89ec7b 317 hlp_bit_idx=!hlp_bit_idx;
ED7418 0:51f1ef89ec7b 318
ED7418 0:51f1ef89ec7b 319 if (hlp_bit_idx!=0){
ED7418 0:51f1ef89ec7b 320 strg1[0]=cmd_strg_buffer [bit_index];
ED7418 0:51f1ef89ec7b 321 bit_val= atoi(strg1);
ED7418 0:51f1ef89ec7b 322 bit_index++;
ED7418 0:51f1ef89ec7b 323 test_out2 = 1;
ED7418 0:51f1ef89ec7b 324 if (bit_val==0){sample1.attach(&sample_sub,0.000345);} else {sample1.attach(&sample_sub,0.000710);}
ED7418 0:51f1ef89ec7b 325
ED7418 0:51f1ef89ec7b 326 }
ED7418 0:51f1ef89ec7b 327 else {
ED7418 0:51f1ef89ec7b 328 test_out2 = 0;
ED7418 0:51f1ef89ec7b 329 if (bit_val==0){sample1.attach(&sample_sub,0.000715);} else {sample1.attach(&sample_sub,0.000350);}
ED7418 0:51f1ef89ec7b 330 }
ED7418 0:51f1ef89ec7b 331
ED7418 0:51f1ef89ec7b 332 }
ED7418 0:51f1ef89ec7b 333
ED7418 0:51f1ef89ec7b 334 }
ED7418 0:51f1ef89ec7b 335
ED7418 0:51f1ef89ec7b 336 if (snd_req_activ==cmd_str_len+23){//defineirt laenge vom low-pegel zwischen 2 frames
ED7418 0:51f1ef89ec7b 337 if (act_frame_cnt<target_frame_cnt){snd_req_activ=2;led2=!led2;}
ED7418 0:51f1ef89ec7b 338 else{
ED7418 0:51f1ef89ec7b 339 led2=0;led3=0;led4=0;}
ED7418 0:51f1ef89ec7b 340 }
ED7418 0:51f1ef89ec7b 341
ED7418 0:51f1ef89ec7b 342 if (snd_req_activ>200){
ED7418 0:51f1ef89ec7b 343 snd_req_activ = 0;
ED7418 0:51f1ef89ec7b 344 test_out2 = 0;
ED7418 0:51f1ef89ec7b 345 sample1.attach(&sample_sub,0.0005);
ED7418 0:51f1ef89ec7b 346 }
ED7418 0:51f1ef89ec7b 347
ED7418 0:51f1ef89ec7b 348 }
ED7418 0:51f1ef89ec7b 349
ED7418 0:51f1ef89ec7b 350 //****************************************** Ende Subroutinen ********************************************
ED7418 0:51f1ef89ec7b 351
ED7418 0:51f1ef89ec7b 352 int main() {
ED7418 0:51f1ef89ec7b 353
ED7418 0:51f1ef89ec7b 354 // configure serial terminal
ED7418 0:51f1ef89ec7b 355 serial = new Serial(USBTX, USBRX);
ED7418 0:51f1ef89ec7b 356 serial->baud(9600);
ED7418 0:51f1ef89ec7b 357
ED7418 0:51f1ef89ec7b 358 // Watchdog auslösegrund auslesen und wd-timeout initialisieren
ED7418 0:51f1ef89ec7b 359 if ((LPC_WDT->WDMOD >> 2) & 1)
ED7418 0:51f1ef89ec7b 360 wd_tim_cause = 1; else wd_tim_cause = 2;
ED7418 0:51f1ef89ec7b 361 wdt.kick(30.0);// setzen des wd-timeout in sec
ED7418 0:51f1ef89ec7b 362
ED7418 0:51f1ef89ec7b 363 test_sd(); // sd-speicher testen
ED7418 0:51f1ef89ec7b 364 read_config_sd(); // configuration von sd einlesen
ED7418 0:51f1ef89ec7b 365
ED7418 0:51f1ef89ec7b 366
ED7418 0:51f1ef89ec7b 367
ED7418 0:51f1ef89ec7b 368
ED7418 0:51f1ef89ec7b 369 //terminalausgabe beim start
ED7418 0:51f1ef89ec7b 370 printf("\x1B\x48"); //cursor home
ED7418 0:51f1ef89ec7b 371 printf("\x1B\x4A"); //lösche bildschirm
ED7418 0:51f1ef89ec7b 372 printf("\n\r");
ED7418 0:51f1ef89ec7b 373 printf("RMFWeb (Rev25042014.0700) is starting...\n\r"); //Textausgabe mit zeilenvorschub
ED7418 0:51f1ef89ec7b 374 if (sd_ok==1)printf("SD:Filesystem ok\n\r");else printf("SD:Filesystem fail\n\r");// info über wd-cause ausgeben
ED7418 0:51f1ef89ec7b 375 if (wd_tim_cause==1)printf("WDT:SoftReset\n\r");else printf("WDT:HardReset\n\r");// info über wd-cause ausgeben
ED7418 0:51f1ef89ec7b 376 if (en_tftp_srv==0)printf("TFTPmode:off\n\r");else printf("TFTPmode:activ\n\r");//info betriebsart TFTP oder Funk ausgeben
ED7418 0:51f1ef89ec7b 377
ED7418 0:51f1ef89ec7b 378
ED7418 0:51f1ef89ec7b 379 // Ethernet verbindungsaufbau
ED7418 0:51f1ef89ec7b 380 EthernetNetIf eth;
ED7418 0:51f1ef89ec7b 381 EthernetErr ethErr;
ED7418 0:51f1ef89ec7b 382 try_net=1;net_ok=0;
ED7418 0:51f1ef89ec7b 383 do {
ED7418 0:51f1ef89ec7b 384 printf("Looking for Ethernet %d...\n\r", try_net);
ED7418 0:51f1ef89ec7b 385 wdt.kick();// watchdog aufziehen
ED7418 0:51f1ef89ec7b 386 ethErr = eth.setup();
ED7418 0:51f1ef89ec7b 387 if(ethErr==0){net_ok=1;break;}
ED7418 0:51f1ef89ec7b 388 ++try_net;
ED7418 0:51f1ef89ec7b 389 } while (try_net<=3);
ED7418 0:51f1ef89ec7b 390
ED7418 0:51f1ef89ec7b 391
ED7418 0:51f1ef89ec7b 392 if (net_ok==1){// netzwerk verbunden
ED7418 0:51f1ef89ec7b 393 http.bind(port_adr);
ED7418 0:51f1ef89ec7b 394 printf("Connected-Status: OK \n\r");
ED7418 0:51f1ef89ec7b 395 const char* hwAddr = eth.getHwAddr();
ED7418 0:51f1ef89ec7b 396 IpAddr ethIp = eth.getIp();
ED7418 0:51f1ef89ec7b 397 snprintf(ip_adr_str,27,"http://%d.%d.%d.%d:%d", ethIp[0], ethIp[1], ethIp[2], ethIp[3],port_adr);//url-string erzegen
ED7418 0:51f1ef89ec7b 398 printf("%s",ip_adr_str);;printf("\n\r");//ip/url ausgeben
ED7418 0:51f1ef89ec7b 399 printf("Server is online! \n\r");// info das server nicht verbunden ist
ED7418 0:51f1ef89ec7b 400 get_NTPtime();
ED7418 0:51f1ef89ec7b 401 }
ED7418 0:51f1ef89ec7b 402 else{//netzwerk nicht verbunden
ED7418 0:51f1ef89ec7b 403 printf("Ethernet Error %d\n\r", ethErr);// sonstiger fehler
ED7418 0:51f1ef89ec7b 404 printf("Server is offline! \n\r");// info das server nicht verbunden ist
ED7418 0:51f1ef89ec7b 405 rpc_browser_con=0;
ED7418 0:51f1ef89ec7b 406 en_tftp_srv=0;//tftp-server ausschalten
ED7418 0:51f1ef89ec7b 407 }
ED7418 0:51f1ef89ec7b 408
ED7418 0:51f1ef89ec7b 409
ED7418 0:51f1ef89ec7b 410 FSHandler::mount("/local", "/web"); // mounting /web als MBED root pfad
ED7418 0:51f1ef89ec7b 411 FSHandler::mount("/sd", "/sd"); // mounting /SD als SD-Card root pfad
ED7418 0:51f1ef89ec7b 412
ED7418 0:51f1ef89ec7b 413 Base::add_rpc_class<DigitalOut>();
ED7418 0:51f1ef89ec7b 414 Base::add_rpc_class<DigitalIn>();
ED7418 0:51f1ef89ec7b 415 Base::add_rpc_class<AnalogIn>();
ED7418 0:51f1ef89ec7b 416
ED7418 0:51f1ef89ec7b 417 http.addHandler<SimpleHandler>("/hello");
ED7418 0:51f1ef89ec7b 418 http.addHandler<FSHandler>("/");// default handler
ED7418 0:51f1ef89ec7b 419 http.addHandler<FSHandler>("/web");
ED7418 0:51f1ef89ec7b 420 http.addHandler<FSHandler>("/sd");// default handler
ED7418 0:51f1ef89ec7b 421
ED7418 0:51f1ef89ec7b 422 http.addHandler<RPCHandler>("/rpc");
ED7418 0:51f1ef89ec7b 423
ED7418 0:51f1ef89ec7b 424 RPCVariable<char> RPCrpc_ab_web(&rpc_ab_web, "ab_rpc");//URL --> http://10.68.139.239:8020/rpc/ab_rpc/write%201
ED7418 0:51f1ef89ec7b 425 RPCVariable<char> RPCrpc_stp_web(&rpc_stp_web, "stp_rpc");//URL --> http://10.68.139.239:8020/rpc/stp_rpc/write%201
ED7418 0:51f1ef89ec7b 426 RPCVariable<char> RPCrpc_auf_web(&rpc_auf_web, "auf_rpc");//URL --> http://10.68.139.239:8020/rpc/auf_rpc/write%201
ED7418 0:51f1ef89ec7b 427 RPCVariable<int> RPCrpc_data_web(&rpc_data_web, "data_rpc");//URL --> http://10.68.139.239:8020/rpc/data_rpc/write%201
ED7418 0:51f1ef89ec7b 428 RPCVariable<int> RPCrpc_mbed_con(&rpc_mbed_con, "mbed_rpc"); // eine art watchdog damit website eine stehende verbindung zum mbed erkennt
ED7418 0:51f1ef89ec7b 429 RPCVariable<char> RPCrpc_browser_con(&rpc_browser_con, "brow_rpc"); // eine rt watchdog um gegenwärtigen browswerzugriff zu erkennen
ED7418 0:51f1ef89ec7b 430 RPCVariable<char> RPCrpc_cmd_web(&rpc_cmd_web, "cmd_rpc");// zum übergeben von kommandos der website an mbed, z.b. resetanforderung
ED7418 0:51f1ef89ec7b 431 //via auf dem MBED liegender Website URL --> http://10.68.139.239:8020/web/rmf.htm
ED7418 0:51f1ef89ec7b 432 //via auf der SD-Card liegender Website URL --> http://10.68.139.239:8020/sd/rmf.htm
ED7418 0:51f1ef89ec7b 433
ED7418 0:51f1ef89ec7b 434
ED7418 0:51f1ef89ec7b 435
ED7418 0:51f1ef89ec7b 436 wdt.kick(5.0);// setzen des wd-timeout in sec
ED7418 0:51f1ef89ec7b 437
ED7418 0:51f1ef89ec7b 438 target_frame_cnt=16;//anzahl der zu sendenen frames nach einer anforderung
ED7418 0:51f1ef89ec7b 439 web_access_led =0;// webaccess-led ausschalten
ED7418 0:51f1ef89ec7b 440 browser_connected=0;
ED7418 0:51f1ef89ec7b 441 old_browser_connected=0;
ED7418 0:51f1ef89ec7b 442 main_loop_cnt=0;
ED7418 0:51f1ef89ec7b 443 test_out2 = 0;
ED7418 0:51f1ef89ec7b 444 fb_adr=0;
ED7418 0:51f1ef89ec7b 445
ED7418 0:51f1ef89ec7b 446
ED7418 0:51f1ef89ec7b 447
ED7418 0:51f1ef89ec7b 448
ED7418 0:51f1ef89ec7b 449
ED7418 0:51f1ef89ec7b 450 if(en_tftp_srv>0){
ED7418 0:51f1ef89ec7b 451 sample1.detach();
ED7418 0:51f1ef89ec7b 452 srv = new TFTPServer("/sd/");
ED7418 0:51f1ef89ec7b 453 printf("TFTP:Server listen...\n\r");
ED7418 0:51f1ef89ec7b 454 }
ED7418 0:51f1ef89ec7b 455 else{
ED7418 0:51f1ef89ec7b 456 printf("RMF-Mode activ...\n\r");
ED7418 0:51f1ef89ec7b 457 sample1.attach(&sample_sub,0.0005);//500us timer-isr
ED7418 0:51f1ef89ec7b 458 ptim.reset(); //timer löschen
ED7418 0:51f1ef89ec7b 459 }
ED7418 0:51f1ef89ec7b 460
ED7418 0:51f1ef89ec7b 461
ED7418 0:51f1ef89ec7b 462 t.start();
ED7418 0:51f1ef89ec7b 463
ED7418 0:51f1ef89ec7b 464
ED7418 0:51f1ef89ec7b 465
ED7418 0:51f1ef89ec7b 466
ED7418 0:51f1ef89ec7b 467 while (1) {
ED7418 0:51f1ef89ec7b 468 Net::poll();
ED7418 0:51f1ef89ec7b 469
ED7418 0:51f1ef89ec7b 470 if(en_tftp_srv>0){
ED7418 0:51f1ef89ec7b 471 if (serial->readable()) {
ED7418 0:51f1ef89ec7b 472 int c = serial->getc();
ED7418 0:51f1ef89ec7b 473 switch (c) {
ED7418 0:51f1ef89ec7b 474 case 's':
ED7418 0:51f1ef89ec7b 475 srv->suspend();
ED7418 0:51f1ef89ec7b 476 break;
ED7418 0:51f1ef89ec7b 477 case 'r':
ED7418 0:51f1ef89ec7b 478 srv->resume();
ED7418 0:51f1ef89ec7b 479 break;
ED7418 0:51f1ef89ec7b 480 }
ED7418 0:51f1ef89ec7b 481 }
ED7418 0:51f1ef89ec7b 482
ED7418 0:51f1ef89ec7b 483
ED7418 0:51f1ef89ec7b 484 if (srv->fileCnt() > filecounter) {
ED7418 0:51f1ef89ec7b 485 filecounter = srv->fileCnt();
ED7418 0:51f1ef89ec7b 486 srv->getFilename(filename);
ED7418 0:51f1ef89ec7b 487 printf("TFTP:New file: %s\n\r", filename);
ED7418 0:51f1ef89ec7b 488 }
ED7418 0:51f1ef89ec7b 489 }
ED7418 0:51f1ef89ec7b 490
ED7418 0:51f1ef89ec7b 491
ED7418 0:51f1ef89ec7b 492 if (t.read() > 0.5) {
ED7418 0:51f1ef89ec7b 493 t.reset();
ED7418 0:51f1ef89ec7b 494
ED7418 0:51f1ef89ec7b 495 snd_start=0;
ED7418 0:51f1ef89ec7b 496 myled1 = !myled1;//alive-led und variable hochzählen -> wird im browser angezeigt
ED7418 0:51f1ef89ec7b 497 rpc_mbed_con++;// variable einfach nur fortwaehrend inkrementieren damit website stehende verbindung zum mbed erkennen kann
ED7418 0:51f1ef89ec7b 498 if (rpc_mbed_con>255){rpc_mbed_con=0;}
ED7418 0:51f1ef89ec7b 499 // einen verbundenen browser detektieren
ED7418 0:51f1ef89ec7b 500 old_browser_connected = browser_connected;
ED7418 0:51f1ef89ec7b 501 browser_connected=0;
ED7418 0:51f1ef89ec7b 502 if (rpc_browser_con>1){// rpc_browser_con wird vom verbundenen browser immer wieder auf 3 gesetzt
ED7418 0:51f1ef89ec7b 503 rpc_browser_con--;// hier wird der wert immer wieder dekrementert
ED7418 0:51f1ef89ec7b 504 browser_connected=1;}// sofern wert >1 bleibt, gilt verbindung als hergestellt
ED7418 0:51f1ef89ec7b 505 if (old_browser_connected>browser_connected){printf("WebBrowser disconnected \n\r");}
ED7418 0:51f1ef89ec7b 506 if (browser_connected>old_browser_connected){printf("WebBrowser connected \n\r");}
ED7418 0:51f1ef89ec7b 507 if (browser_connected==1){web_access_led=1;} else {web_access_led=0;}// brwoser-verbindung via led anzeige
ED7418 0:51f1ef89ec7b 508
ED7418 0:51f1ef89ec7b 509 if(en_tftp_srv==0){
ED7418 0:51f1ef89ec7b 510 if (rpc_ab_web>0 or ser_code1){//ser_code1 --> ABWAERTS
ED7418 0:51f1ef89ec7b 511 getdipadr(); //DIP-Schalter decodieren
ED7418 0:51f1ef89ec7b 512 if (rpc_ab_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln
ED7418 0:51f1ef89ec7b 513 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren
ED7418 0:51f1ef89ec7b 514 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen
ED7418 0:51f1ef89ec7b 515 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen
ED7418 0:51f1ef89ec7b 516 strcat(cmd_strg_buffer,fb_cmd_dn_strg);//auf-Kommando anhaengen
ED7418 0:51f1ef89ec7b 517 if (ser_code1){printf("AB-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster
ED7418 0:51f1ef89ec7b 518 if (rpc_ab_web>0){printf("AB-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command
ED7418 0:51f1ef89ec7b 519 printf(fb_adr_strg);printf("\n\r");
ED7418 0:51f1ef89ec7b 520 snd_start=1;
ED7418 0:51f1ef89ec7b 521 rpc_ab_web=0;//web-request löschen
ED7418 0:51f1ef89ec7b 522 led3=1;
ED7418 0:51f1ef89ec7b 523 }
ED7418 0:51f1ef89ec7b 524 }
ED7418 0:51f1ef89ec7b 525
ED7418 0:51f1ef89ec7b 526 if(en_tftp_srv==0){
ED7418 0:51f1ef89ec7b 527 if (rpc_stp_web>0 or ser_code3){//ser_code3 --> STOP
ED7418 0:51f1ef89ec7b 528 getdipadr(); //DIP-Schalter decodieren
ED7418 0:51f1ef89ec7b 529 if (rpc_stp_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln
ED7418 0:51f1ef89ec7b 530 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren
ED7418 0:51f1ef89ec7b 531 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen
ED7418 0:51f1ef89ec7b 532 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen
ED7418 0:51f1ef89ec7b 533 strcat(cmd_strg_buffer,fb_cmd_stp_strg);//auf-Kommando anhaengen
ED7418 0:51f1ef89ec7b 534 if (ser_code3){printf("STOP-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster
ED7418 0:51f1ef89ec7b 535 if (rpc_stp_web>0){printf("STOP-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command
ED7418 0:51f1ef89ec7b 536 printf(fb_adr_strg);printf("\n\r");
ED7418 0:51f1ef89ec7b 537 snd_start=1;
ED7418 0:51f1ef89ec7b 538 rpc_stp_web=0;//web-request löschen
ED7418 0:51f1ef89ec7b 539 led3=1;led4=1;
ED7418 0:51f1ef89ec7b 540 }
ED7418 0:51f1ef89ec7b 541 }
ED7418 0:51f1ef89ec7b 542
ED7418 0:51f1ef89ec7b 543 if(en_tftp_srv==0){
ED7418 0:51f1ef89ec7b 544 if (rpc_auf_web>0 or ser_code2){//ser_code2 --> AUFWAERTS
ED7418 0:51f1ef89ec7b 545 getdipadr(); //DIP-Schalter decodieren
ED7418 0:51f1ef89ec7b 546 if (rpc_auf_web>0){getwebadr();} // wenn web-commando vorliegt, diese ermitteln
ED7418 0:51f1ef89ec7b 547 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren
ED7418 0:51f1ef89ec7b 548 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen
ED7418 0:51f1ef89ec7b 549 strcat(cmd_strg_buffer,"0");//Lern-Bit loeschen
ED7418 0:51f1ef89ec7b 550 strcat(cmd_strg_buffer,fb_cmd_up_strg);//auf-Kommando anhaengen
ED7418 0:51f1ef89ec7b 551 if (ser_code2){printf("AUF-Taste <Adresse:>" );} // ausgabe der befehlsquelle, hier taster
ED7418 0:51f1ef89ec7b 552 if (rpc_auf_web>0){printf("AUF-WebCommand <Adresse:>" );}// ausgabe der befehlsquelle, hier web-command
ED7418 0:51f1ef89ec7b 553 printf(fb_adr_strg);printf("\n\r");
ED7418 0:51f1ef89ec7b 554 snd_start=1;
ED7418 0:51f1ef89ec7b 555 rpc_auf_web=0;//web-request löschen
ED7418 0:51f1ef89ec7b 556 led4=1;
ED7418 0:51f1ef89ec7b 557 }
ED7418 0:51f1ef89ec7b 558 }
ED7418 0:51f1ef89ec7b 559
ED7418 0:51f1ef89ec7b 560 if(en_tftp_srv==0){
ED7418 0:51f1ef89ec7b 561 if (learn_button){//Ausgabe info wenn learn-button betätigt wird
ED7418 0:51f1ef89ec7b 562 printf("LearnButton pressed\n\r");
ED7418 0:51f1ef89ec7b 563 getdipadr(); //DIP-Schalter decodieren
ED7418 0:51f1ef89ec7b 564 if (fb_adr>0){
ED7418 0:51f1ef89ec7b 565 strcpy(cmd_strg_buffer,fb_id_strg); //FB-Code in buffer kopieren
ED7418 0:51f1ef89ec7b 566 strcat(cmd_strg_buffer,fb_adr_strg);//FB-Adresse anhaengen
ED7418 0:51f1ef89ec7b 567 strcat(cmd_strg_buffer,"1");//Lern-Bit anhaengen
ED7418 0:51f1ef89ec7b 568 strcat(cmd_strg_buffer,fb_cmd_lrn_strg);//Lern-Kommando anhaengen
ED7418 0:51f1ef89ec7b 569 snd_start=1;
ED7418 0:51f1ef89ec7b 570 led2=1;led3=1;led4=1;
ED7418 0:51f1ef89ec7b 571 printf(cmd_strg_buffer);printf("\n\r");
ED7418 0:51f1ef89ec7b 572 }
ED7418 0:51f1ef89ec7b 573 else {printf("Adresse muss <> NULL sein! \n\r");}
ED7418 0:51f1ef89ec7b 574 }
ED7418 0:51f1ef89ec7b 575 }
ED7418 0:51f1ef89ec7b 576
ED7418 0:51f1ef89ec7b 577 // kommandoverarbeitung via rpc-variable via browser gesetzt
ED7418 0:51f1ef89ec7b 578 if (rpc_cmd_web!=1){wdt.kick();}// watchdog zyklisch aufziehen (nur wenn rpc_cmd_web <> 1 ist)
ED7418 0:51f1ef89ec7b 579 if (old_rpc_cmd_web!=rpc_cmd_web){//ausgabe des commandos welcher vom browser übermittelt wird
ED7418 0:51f1ef89ec7b 580 if (rpc_cmd_web==1){printf("WebCmd:Reset request... \n\r");}//Resetrequest mit (=1)
ED7418 0:51f1ef89ec7b 581 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)
ED7418 0:51f1ef89ec7b 582 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
ED7418 0:51f1ef89ec7b 583 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)
ED7418 0:51f1ef89ec7b 584 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)
ED7418 0:51f1ef89ec7b 585 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)
ED7418 0:51f1ef89ec7b 586 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)
ED7418 0:51f1ef89ec7b 587 old_rpc_cmd_web=rpc_cmd_web;
ED7418 0:51f1ef89ec7b 588 }
ED7418 0:51f1ef89ec7b 589
ED7418 0:51f1ef89ec7b 590
ED7418 0:51f1ef89ec7b 591 if(en_tftp_srv>0){
ED7418 0:51f1ef89ec7b 592 TFTPServerState state = srv->State();
ED7418 0:51f1ef89ec7b 593 switch(state) {
ED7418 0:51f1ef89ec7b 594 case listen:
ED7418 0:51f1ef89ec7b 595 //printf("MAIN: TFTP listen\n\r");
ED7418 0:51f1ef89ec7b 596 break;
ED7418 0:51f1ef89ec7b 597 case reading:
ED7418 0:51f1ef89ec7b 598 srv->getFilename(filename);
ED7418 0:51f1ef89ec7b 599 printf("TFTP:Reading file: %s\n\r", filename);
ED7418 0:51f1ef89ec7b 600 break;
ED7418 0:51f1ef89ec7b 601 case writing:
ED7418 0:51f1ef89ec7b 602 srv->getFilename(filename);
ED7418 0:51f1ef89ec7b 603 printf("TFTP:Writing file: %s\n\r", filename);
ED7418 0:51f1ef89ec7b 604 break;
ED7418 0:51f1ef89ec7b 605 case error:
ED7418 0:51f1ef89ec7b 606 printf("TFTP:Error\n\r");
ED7418 0:51f1ef89ec7b 607 break;
ED7418 0:51f1ef89ec7b 608 case suspended:
ED7418 0:51f1ef89ec7b 609 printf("TFTP:Suspended\n\r");
ED7418 0:51f1ef89ec7b 610 break;
ED7418 0:51f1ef89ec7b 611 default:
ED7418 0:51f1ef89ec7b 612 printf("TFTP:Unknown status\n\r");
ED7418 0:51f1ef89ec7b 613 break;
ED7418 0:51f1ef89ec7b 614 }
ED7418 0:51f1ef89ec7b 615 }
ED7418 0:51f1ef89ec7b 616 }
ED7418 0:51f1ef89ec7b 617 }
ED7418 0:51f1ef89ec7b 618 }