Webserver only w/o any other functions, single thread. Running on STM32F013+W5500

Dependencies:   NTPClient W5500Interface Watchdog device_configuration eeprom_flash mbed-rpc-nucleo mbed-rtos mbed

Fork of F103-Serial-to-Ethernet by Chau Vo

Committer:
olympux
Date:
Sun Sep 21 20:25:35 2014 +0000
Revision:
8:64848959adb9
Parent:
7:d45bd480e90f
Child:
9:d2534ecf88c6
Added first run flag (0xA5A5 at 15th variable in eeprom)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
olympux 0:c2eac797face 1 /*
olympux 0:c2eac797face 2 *
olympux 2:18f10e7209f4 3 * Alarm and Monitoring application
olympux 0:c2eac797face 4
olympux 0:c2eac797face 5 */
olympux 0:c2eac797face 6 #include "mbed.h"
olympux 6:d054e394fba3 7 //#include "eeprom.h"
olympux 0:c2eac797face 8 #include "EthernetInterface.h"
olympux 0:c2eac797face 9 #include "rtos.h"
olympux 0:c2eac797face 10
olympux 0:c2eac797face 11
olympux 2:18f10e7209f4 12 /*
olympux 2:18f10e7209f4 13 * Hardware defines
olympux 0:c2eac797face 14 */
olympux 2:18f10e7209f4 15 #define ST_NUCLEO // hardware pin mapping
olympux 0:c2eac797face 16
olympux 0:c2eac797face 17 #ifdef ST_NUCLEO
olympux 0:c2eac797face 18 // ST Nucleo
olympux 0:c2eac797face 19 SPI spi(PA_7, PA_6, PA_5); // mosi, miso, sclk
olympux 0:c2eac797face 20 EthernetInterface eth(&spi, PC_8, PC_9); // spi, cs, reset
olympux 0:c2eac797face 21 #endif
olympux 0:c2eac797face 22
olympux 2:18f10e7209f4 23 Serial uart(USBTX,USBRX);
olympux 2:18f10e7209f4 24
olympux 6:d054e394fba3 25 // Variables' number
olympux 8:64848959adb9 26 #define NumbOfVar ((uint8_t)0x0F) // REMEMBER: update this variable in eeprom.h too
olympux 6:d054e394fba3 27 // Virtual address defined by the user: 0xFFFF value is prohibited
olympux 6:d054e394fba3 28 uint16_t VirtAddVarTab[NumbOfVar] = {0x1212, 0x1313, 0x1414, 0x1515, // IP_Addr
olympux 6:d054e394fba3 29 0x2212, 0x2313, 0x2414, 0x2515, // IP_Subnet
olympux 6:d054e394fba3 30 0x3212, 0x3313, 0x3414, 0x3515, // IP_Gateway
olympux 6:d054e394fba3 31 0x4212, // TCP server port, not used
olympux 8:64848959adb9 32 0x5212, // UDP server port, not used
olympux 8:64848959adb9 33 0x8888 // 1st run?
olympux 6:d054e394fba3 34 };
olympux 6:d054e394fba3 35 extern "C" uint16_t EE_Init(void);
olympux 6:d054e394fba3 36 extern "C" uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data);
olympux 6:d054e394fba3 37 extern "C" uint16_t EE_WriteVariable(uint16_t VirtAddress, uint16_t Data);
olympux 4:568c97f2a407 38
olympux 0:c2eac797face 39
olympux 2:18f10e7209f4 40 /*
olympux 2:18f10e7209f4 41 * Network configuration
olympux 2:18f10e7209f4 42 */
olympux 4:568c97f2a407 43 #define TCP_SERVER
olympux 4:568c97f2a407 44 //#define TCP_CLIENT
olympux 4:568c97f2a407 45 #define UDP_SERVER
olympux 4:568c97f2a407 46 //#define UDP_CLIENT
olympux 4:568c97f2a407 47 //#define NTP
olympux 4:568c97f2a407 48
olympux 8:64848959adb9 49 #define DEFAULT_IP_ADDRESS "192.168.0.249"
olympux 8:64848959adb9 50 #define DEFAULT_IP_SUBNET "255.255.255.0"
olympux 8:64848959adb9 51 #define DEFAULT_IP_GATEWAY "192.168.0.1"
olympux 8:64848959adb9 52
olympux 4:568c97f2a407 53 #define TCP_SERVER_WAIT_CLIENT_TIMEOUT 200
olympux 4:568c97f2a407 54 #define TCP_SERVER_RECEIVE_TIMEOUT 3000
olympux 4:568c97f2a407 55 #define UDP_SERVER_RECEIVE_TIMEOUT 200
olympux 4:568c97f2a407 56
olympux 0:c2eac797face 57 // for static IP setting
olympux 7:d45bd480e90f 58 char * IP_Addr;
olympux 7:d45bd480e90f 59 char * IP_Subnet;
olympux 7:d45bd480e90f 60 char * IP_Gateway;
olympux 6:d054e394fba3 61 char ip_addr[16], ip_subnet[16], ip_gateway[16]; // loaded from eeprom
olympux 6:d054e394fba3 62
olympux 6:d054e394fba3 63 uint16_t tcp_server_port = 10000; // fixed
olympux 6:d054e394fba3 64 uint16_t udp_server_port = 11000; // fixed
olympux 0:c2eac797face 65
olympux 3:972ed747474c 66 char buffer[256]; // socket buffer
olympux 3:972ed747474c 67
olympux 0:c2eac797face 68
olympux 2:18f10e7209f4 69
olympux 2:18f10e7209f4 70 /*
olympux 2:18f10e7209f4 71 * RTOS
olympux 2:18f10e7209f4 72 */
olympux 2:18f10e7209f4 73 struct message_t {
olympux 2:18f10e7209f4 74 int len;
olympux 2:18f10e7209f4 75 char *msg;
olympux 2:18f10e7209f4 76 };
olympux 3:972ed747474c 77 Queue<message_t, 16> uart_queue;
olympux 2:18f10e7209f4 78
olympux 3:972ed747474c 79 Mutex uart_mutex;
olympux 2:18f10e7209f4 80
olympux 2:18f10e7209f4 81
olympux 2:18f10e7209f4 82 /*
olympux 2:18f10e7209f4 83 * Threads
olympux 2:18f10e7209f4 84 */
olympux 0:c2eac797face 85 void uart_thread(void const *args) {
olympux 2:18f10e7209f4 86 message_t *p_message;
olympux 0:c2eac797face 87
olympux 0:c2eac797face 88 while (true) {
olympux 3:972ed747474c 89 osEvent evt = uart_queue.get();
olympux 2:18f10e7209f4 90 if (evt.status == osEventMessage) {
olympux 2:18f10e7209f4 91 p_message = (message_t*)evt.value.p;
olympux 3:972ed747474c 92 uart_mutex.lock();
olympux 3:972ed747474c 93 //uart.printf("len=%d\n", p_message->len);
olympux 3:972ed747474c 94 uart.printf("%s\n", p_message->msg);
olympux 3:972ed747474c 95 uart_mutex.unlock();
olympux 2:18f10e7209f4 96 }
olympux 0:c2eac797face 97 }
olympux 0:c2eac797face 98 }
olympux 0:c2eac797face 99
olympux 0:c2eac797face 100
olympux 6:d054e394fba3 101 /*
olympux 6:d054e394fba3 102 * Ethernet init
olympux 6:d054e394fba3 103 */
olympux 4:568c97f2a407 104 int ethernet_init(void) {
olympux 3:972ed747474c 105 uint8_t mac[6];
olympux 3:972ed747474c 106
olympux 0:c2eac797face 107 mbed_mac_address((char *)mac); // using the MAC address in LPC11U24 or LPC1178
olympux 0:c2eac797face 108 mac[0] = 0x00; mac[1] = 0x08; mac[2] = 0xDC; mac[3] = 0x00; mac[4] = 0x00; mac[5] = 0x00;
olympux 0:c2eac797face 109
olympux 4:568c97f2a407 110
olympux 7:d45bd480e90f 111 //printf("Start\n");
olympux 6:d054e394fba3 112 int ret = eth.init(mac, IP_Addr, IP_Subnet, IP_Gateway); // static
olympux 0:c2eac797face 113
olympux 0:c2eac797face 114 if (!ret) {
olympux 7:d45bd480e90f 115 //uart.printf("Initialized, MAC: %s\n", eth.getMACAddress());
olympux 0:c2eac797face 116 } else {
olympux 2:18f10e7209f4 117 uart.printf("Error eth.init() - ret = %d\n", ret);
olympux 0:c2eac797face 118 return -1;
olympux 0:c2eac797face 119 }
olympux 0:c2eac797face 120
olympux 0:c2eac797face 121 ret = eth.connect();
olympux 0:c2eac797face 122 if (!ret) {
olympux 8:64848959adb9 123 uart.printf("IP: %s, MASK: %s, GW: %s\n", eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
olympux 0:c2eac797face 124 } else {
olympux 2:18f10e7209f4 125 uart.printf("Error eth.connect() - ret = %d\n", ret);
olympux 0:c2eac797face 126 return -1;
olympux 0:c2eac797face 127 }
olympux 3:972ed747474c 128
olympux 4:568c97f2a407 129 return 0;
olympux 4:568c97f2a407 130 }
olympux 4:568c97f2a407 131
olympux 4:568c97f2a407 132
olympux 6:d054e394fba3 133 /*
olympux 6:d054e394fba3 134 * EEPROM functions
olympux 6:d054e394fba3 135 */
olympux 6:d054e394fba3 136 void write_eeprom(char *buffer) {
olympux 6:d054e394fba3 137 // Unlock the Flash Program Erase controller */
olympux 6:d054e394fba3 138 FLASH_Unlock();
olympux 6:d054e394fba3 139 // EEPROM Init
olympux 6:d054e394fba3 140 EE_Init();
olympux 6:d054e394fba3 141 // IP address
olympux 6:d054e394fba3 142 EE_WriteVariable(VirtAddVarTab[0], *buffer++);
olympux 6:d054e394fba3 143 EE_WriteVariable(VirtAddVarTab[1], *buffer++);
olympux 6:d054e394fba3 144 EE_WriteVariable(VirtAddVarTab[2], *buffer++);
olympux 6:d054e394fba3 145 EE_WriteVariable(VirtAddVarTab[3], *buffer++);
olympux 6:d054e394fba3 146 // IP subnet
olympux 6:d054e394fba3 147 EE_WriteVariable(VirtAddVarTab[4], *buffer++);
olympux 6:d054e394fba3 148 EE_WriteVariable(VirtAddVarTab[5], *buffer++);
olympux 6:d054e394fba3 149 EE_WriteVariable(VirtAddVarTab[6], *buffer++);
olympux 6:d054e394fba3 150 EE_WriteVariable(VirtAddVarTab[7], *buffer++);
olympux 6:d054e394fba3 151 // IP gateway
olympux 6:d054e394fba3 152 EE_WriteVariable(VirtAddVarTab[8], *buffer++);
olympux 6:d054e394fba3 153 EE_WriteVariable(VirtAddVarTab[9], *buffer++);
olympux 6:d054e394fba3 154 EE_WriteVariable(VirtAddVarTab[10], *buffer++);
olympux 6:d054e394fba3 155 EE_WriteVariable(VirtAddVarTab[11], *buffer++);
olympux 6:d054e394fba3 156 //// TCP server port
olympux 6:d054e394fba3 157 //EE_WriteVariable(VirtAddVarTab[12], *buffer++);
olympux 6:d054e394fba3 158 //// UDP server port
olympux 6:d054e394fba3 159 //EE_WriteVariable(VirtAddVarTab[13], *buffer++);
olympux 8:64848959adb9 160
olympux 8:64848959adb9 161 // erase first_run flag
olympux 8:64848959adb9 162 EE_WriteVariable(VirtAddVarTab[14], 0xA5A5);
olympux 6:d054e394fba3 163 FLASH_Lock();
olympux 6:d054e394fba3 164 }
olympux 6:d054e394fba3 165
olympux 6:d054e394fba3 166
olympux 6:d054e394fba3 167 void load_eeprom(void) {
olympux 6:d054e394fba3 168 uint16_t u16ip_addr[4], u16ip_subnet[4], u16ip_gateway[4];
olympux 8:64848959adb9 169 uint16_t first_run = 0;
olympux 8:64848959adb9 170
olympux 6:d054e394fba3 171 EE_Init();
olympux 8:64848959adb9 172
olympux 8:64848959adb9 173 // check if 1st run
olympux 8:64848959adb9 174 EE_ReadVariable(VirtAddVarTab[14], &first_run);
olympux 8:64848959adb9 175 // if not first run, load network config
olympux 8:64848959adb9 176 if (first_run == 0xA5A5) {
olympux 8:64848959adb9 177 // IP address
olympux 8:64848959adb9 178 EE_ReadVariable(VirtAddVarTab[0], &u16ip_addr[0]);
olympux 8:64848959adb9 179 EE_ReadVariable(VirtAddVarTab[1], &u16ip_addr[1]);
olympux 8:64848959adb9 180 EE_ReadVariable(VirtAddVarTab[2], &u16ip_addr[2]);
olympux 8:64848959adb9 181 EE_ReadVariable(VirtAddVarTab[3], &u16ip_addr[3]);
olympux 8:64848959adb9 182 // IP subnet
olympux 8:64848959adb9 183 EE_ReadVariable(VirtAddVarTab[4], &u16ip_subnet[0]);
olympux 8:64848959adb9 184 EE_ReadVariable(VirtAddVarTab[5], &u16ip_subnet[1]);
olympux 8:64848959adb9 185 EE_ReadVariable(VirtAddVarTab[6], &u16ip_subnet[2]);
olympux 8:64848959adb9 186 EE_ReadVariable(VirtAddVarTab[7], &u16ip_subnet[3]);
olympux 8:64848959adb9 187 // IP gateway
olympux 8:64848959adb9 188 EE_ReadVariable(VirtAddVarTab[8], &u16ip_gateway[0]);
olympux 8:64848959adb9 189 EE_ReadVariable(VirtAddVarTab[9], &u16ip_gateway[1]);
olympux 8:64848959adb9 190 EE_ReadVariable(VirtAddVarTab[10], &u16ip_gateway[2]);
olympux 8:64848959adb9 191 EE_ReadVariable(VirtAddVarTab[11], &u16ip_gateway[3]);
olympux 8:64848959adb9 192 //// TCP server port
olympux 8:64848959adb9 193 //EE_ReadVariable(VirtAddVarTab[12], &tcp_server_port);
olympux 8:64848959adb9 194 //// UDP server port
olympux 8:64848959adb9 195 //EE_ReadVariable(VirtAddVarTab[13], &udp_server_port);
olympux 8:64848959adb9 196 //FLASH_Lock();
olympux 8:64848959adb9 197 sprintf(ip_addr, "%d.%d.%d.%d", (uint8_t)u16ip_addr[0], (uint8_t)u16ip_addr[1], (uint8_t)u16ip_addr[2], (uint8_t)u16ip_addr[3]);
olympux 8:64848959adb9 198 sprintf(ip_subnet, "%d.%d.%d.%d", (uint8_t)u16ip_subnet[0], (uint8_t)u16ip_subnet[1], (uint8_t)u16ip_subnet[2], (uint8_t)u16ip_subnet[3]);
olympux 8:64848959adb9 199 sprintf(ip_gateway, "%d.%d.%d.%d", (uint8_t)u16ip_gateway[0], (uint8_t)u16ip_gateway[1], (uint8_t)u16ip_gateway[2], (uint8_t)u16ip_gateway[3]);
olympux 8:64848959adb9 200 }
olympux 8:64848959adb9 201 // if 1st run, use default addresses
olympux 8:64848959adb9 202 else {
olympux 8:64848959adb9 203 sprintf(ip_addr, DEFAULT_IP_ADDRESS);
olympux 8:64848959adb9 204 sprintf(ip_subnet, DEFAULT_IP_SUBNET);
olympux 8:64848959adb9 205 sprintf(ip_gateway, DEFAULT_IP_GATEWAY);
olympux 8:64848959adb9 206 }
olympux 7:d45bd480e90f 207 //printf("IP: %s\n", ip_addr);
olympux 7:d45bd480e90f 208 //printf("MASK: %s\n", ip_subnet);
olympux 7:d45bd480e90f 209 //printf("GW: %s\n", ip_gateway);
olympux 7:d45bd480e90f 210 //printf("TCP: %d\n", tcp_server_port);
olympux 7:d45bd480e90f 211 //printf("UDP: %d\n", udp_server_port);
olympux 6:d054e394fba3 212 }
olympux 6:d054e394fba3 213
olympux 6:d054e394fba3 214
olympux 4:568c97f2a407 215
olympux 4:568c97f2a407 216 int main()
olympux 4:568c97f2a407 217 {
olympux 4:568c97f2a407 218 message_t message;
olympux 6:d054e394fba3 219 int ret;
olympux 4:568c97f2a407 220
olympux 4:568c97f2a407 221 /*
olympux 4:568c97f2a407 222 * configure
olympux 4:568c97f2a407 223 */
olympux 4:568c97f2a407 224 uart.baud(115200);
olympux 4:568c97f2a407 225
olympux 4:568c97f2a407 226
olympux 4:568c97f2a407 227 /*
olympux 4:568c97f2a407 228 * UI threads
olympux 4:568c97f2a407 229 */
olympux 4:568c97f2a407 230 Thread t1(uart_thread);
olympux 4:568c97f2a407 231
olympux 6:d054e394fba3 232
olympux 6:d054e394fba3 233 /*
olympux 6:d054e394fba3 234 * FLASH
olympux 6:d054e394fba3 235 */
olympux 6:d054e394fba3 236 load_eeprom();
olympux 6:d054e394fba3 237 IP_Addr = ip_addr;
olympux 6:d054e394fba3 238 IP_Subnet = ip_subnet;
olympux 6:d054e394fba3 239 IP_Gateway = ip_gateway;
olympux 6:d054e394fba3 240
olympux 4:568c97f2a407 241
olympux 4:568c97f2a407 242 /*
olympux 4:568c97f2a407 243 * Ethernet
olympux 4:568c97f2a407 244 */
olympux 6:d054e394fba3 245 ret = ethernet_init();
olympux 4:568c97f2a407 246 if (ret) {
olympux 4:568c97f2a407 247 printf("App halted\n");
olympux 4:568c97f2a407 248 while (true) {};
olympux 4:568c97f2a407 249 }
olympux 4:568c97f2a407 250
olympux 3:972ed747474c 251
olympux 3:972ed747474c 252 #ifdef TCP_SERVER
olympux 3:972ed747474c 253 TCPSocketServer tcp_server;
olympux 3:972ed747474c 254 TCPSocketConnection tcp_client;
olympux 3:972ed747474c 255
olympux 6:d054e394fba3 256 tcp_server.bind(tcp_server_port);
olympux 3:972ed747474c 257 tcp_server.listen();
olympux 7:d45bd480e90f 258 //uart.printf("\nWait for new connection...\n");
olympux 4:568c97f2a407 259 tcp_server.set_blocking(false, TCP_SERVER_WAIT_CLIENT_TIMEOUT);
olympux 3:972ed747474c 260 #endif
olympux 3:972ed747474c 261
olympux 3:972ed747474c 262 #ifdef UDP_SERVER
olympux 3:972ed747474c 263 UDPSocket udp_server;
olympux 3:972ed747474c 264 Endpoint ep_udp_client;
olympux 3:972ed747474c 265
olympux 6:d054e394fba3 266 ret = udp_server.bind(udp_server_port);
olympux 7:d45bd480e90f 267 //printf("sock.bind = %d\n", ret);
olympux 4:568c97f2a407 268 udp_server.set_blocking(false, UDP_SERVER_RECEIVE_TIMEOUT);
olympux 3:972ed747474c 269 #endif
olympux 3:972ed747474c 270
olympux 3:972ed747474c 271
olympux 4:568c97f2a407 272 // Network processor
olympux 0:c2eac797face 273 while (true) {
olympux 4:568c97f2a407 274 #ifdef TCP_SERVER
olympux 4:568c97f2a407 275 // no tcp client connected
olympux 4:568c97f2a407 276 if (!tcp_client.is_connected())
olympux 4:568c97f2a407 277 {
olympux 4:568c97f2a407 278 // wait for client within timeout
olympux 4:568c97f2a407 279 ret = tcp_server.accept(tcp_client);
olympux 2:18f10e7209f4 280
olympux 4:568c97f2a407 281 // tcp client connected
olympux 4:568c97f2a407 282 if (ret > -1) {
olympux 7:d45bd480e90f 283 //uart.printf("Connection from: %s\n", tcp_client.get_address());
olympux 4:568c97f2a407 284
olympux 4:568c97f2a407 285 // loop waiting and receiving data within timeout
olympux 4:568c97f2a407 286 tcp_client.set_blocking(false, TCP_SERVER_RECEIVE_TIMEOUT); // Timeout after x seconds
olympux 4:568c97f2a407 287 while (true) {
olympux 4:568c97f2a407 288 int n = tcp_client.receive(buffer, sizeof(buffer));
olympux 4:568c97f2a407 289 if (n <= 0) break;
olympux 4:568c97f2a407 290
olympux 4:568c97f2a407 291 // got data, process it
olympux 4:568c97f2a407 292 // send to uart
olympux 4:568c97f2a407 293 buffer[n] = '\0';
olympux 4:568c97f2a407 294 message.len = n;
olympux 4:568c97f2a407 295 message.msg = buffer;
olympux 4:568c97f2a407 296 uart_queue.put(&message);
olympux 4:568c97f2a407 297
olympux 4:568c97f2a407 298 // echo to tcp client
olympux 4:568c97f2a407 299 tcp_client.send_all(buffer, n);
olympux 4:568c97f2a407 300 if (n <= 0) break;
olympux 4:568c97f2a407 301 } // end loop if no data received within timeout
olympux 4:568c97f2a407 302 tcp_client.close();
olympux 4:568c97f2a407 303 } // if client connected
olympux 4:568c97f2a407 304 } // if no client connected
olympux 3:972ed747474c 305 #endif
olympux 3:972ed747474c 306
olympux 4:568c97f2a407 307
olympux 7:d45bd480e90f 308 #ifdef UDP_SERVER // used for setting configuration
olympux 4:568c97f2a407 309 // wait for udp packet within timeout
olympux 3:972ed747474c 310 int n = udp_server.receiveFrom(ep_udp_client, buffer, sizeof(buffer));
olympux 3:972ed747474c 311 if (n < 0) continue;
olympux 3:972ed747474c 312
olympux 4:568c97f2a407 313 // got some data, process it
olympux 3:972ed747474c 314 // send to uart
olympux 7:d45bd480e90f 315 //buffer[n] = '\0';
olympux 7:d45bd480e90f 316 //message.len = n;
olympux 7:d45bd480e90f 317 //message.msg = buffer;
olympux 7:d45bd480e90f 318 //uart_queue.put(&message);
olympux 3:972ed747474c 319
olympux 3:972ed747474c 320 // echo
olympux 3:972ed747474c 321 //printf("Received packet from: %s\n", client.get_address());
olympux 7:d45bd480e90f 322 //udp_server.sendTo(ep_udp_client, buffer, n);
olympux 4:568c97f2a407 323
olympux 6:d054e394fba3 324 // process received data
olympux 6:d054e394fba3 325 switch (n) {
olympux 7:d45bd480e90f 326 // length = 4, may be this is a discovery command, TCP port, or UDP port
olympux 7:d45bd480e90f 327 // Format: NNDS, NNTP or NNUP
olympux 7:d45bd480e90f 328 case 4:
olympux 7:d45bd480e90f 329 // discovery command
olympux 7:d45bd480e90f 330 if (strstr(buffer, "NNDS") != NULL) {
olympux 7:d45bd480e90f 331 udp_server.sendTo(ep_udp_client, ip_addr, strlen(ip_addr));
olympux 7:d45bd480e90f 332 }
olympux 7:d45bd480e90f 333 // ask for TCP server port
olympux 7:d45bd480e90f 334 else if (strstr(buffer, "NNTP") != NULL) {
olympux 7:d45bd480e90f 335 char port[5];
olympux 7:d45bd480e90f 336 sprintf(port, "%5d", tcp_server_port);
olympux 7:d45bd480e90f 337 udp_server.sendTo(ep_udp_client, port, strlen(port));
olympux 7:d45bd480e90f 338 }
olympux 7:d45bd480e90f 339 // ask for UDP server port
olympux 7:d45bd480e90f 340 else if (strstr(buffer, "NNUP") != NULL) {
olympux 7:d45bd480e90f 341 char port[5];
olympux 7:d45bd480e90f 342 sprintf(port, "%5d", udp_server_port);
olympux 7:d45bd480e90f 343 udp_server.sendTo(ep_udp_client, port, strlen(port));
olympux 7:d45bd480e90f 344 }
olympux 7:d45bd480e90f 345 break;
olympux 6:d054e394fba3 346 // length = 14, maybe this is a command to set network configuration
olympux 6:d054e394fba3 347 // Format: 4E 4E C0 A8 00 78 FF FF FF 00 C0 A8 0 1 (NN 192.168.0.120; 255.255.255.0; 192.168.0.1)
olympux 6:d054e394fba3 348 case 14:
olympux 6:d054e394fba3 349 // check if two first chars = NN
olympux 6:d054e394fba3 350 if (strstr(buffer, "NN") != NULL) {
olympux 7:d45bd480e90f 351 //printf("Received new network configuration\n");
olympux 6:d054e394fba3 352 write_eeprom(&buffer[2]); // parameters from 3rd char
olympux 6:d054e394fba3 353 }
olympux 6:d054e394fba3 354 break;
olympux 6:d054e394fba3 355 default:
olympux 6:d054e394fba3 356 break;
olympux 4:568c97f2a407 357 }
olympux 3:972ed747474c 358 #endif
olympux 4:568c97f2a407 359 } // network processor
olympux 4:568c97f2a407 360 }