Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: NTPClient W5500Interface Watchdog device_configuration eeprom_flash mbed-rpc-nucleo mbed-rtos mbed
Fork of F103-Serial-to-Ethernet by
Revision 4:568c97f2a407, committed 2014-09-21
- Comitter:
- olympux
- Date:
- Sun Sep 21 16:22:21 2014 +0000
- Parent:
- 3:972ed747474c
- Child:
- 5:a01dc14ec038
- Commit message:
- Adding EEPROM emulation
Changed in this revision
| eeprom.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eeprom.lib Sun Sep 21 16:22:21 2014 +0000 @@ -0,0 +1,1 @@ +eeprom#0b8e4689a075
--- a/main.cpp Sun Sep 21 08:15:57 2014 +0000
+++ b/main.cpp Sun Sep 21 16:22:21 2014 +0000
@@ -4,6 +4,7 @@
*/
#include "mbed.h"
+#include "eeprom.h"
#include "EthernetInterface.h"
#include "rtos.h"
@@ -21,6 +22,10 @@
Serial uart(USBTX,USBRX);
+/* Virtual address defined by the user: 0xFFFF value is prohibited */
+uint16_t VirtAddVarTab[NumbOfVar] = {0x5555, 0x6666, 0x7777};
+
+
/*
* Network configuration
@@ -29,19 +34,23 @@
#define UDP_LOCAL_PORT 11000
//#define USE_DHCP // DHCP or static
+#define TCP_SERVER
+//#define TCP_CLIENT
+#define UDP_SERVER
+//#define UDP_CLIENT
+//#define NTP
+
+#define TCP_SERVER_WAIT_CLIENT_TIMEOUT 200
+#define TCP_SERVER_RECEIVE_TIMEOUT 3000
+#define UDP_SERVER_RECEIVE_TIMEOUT 200
+
#ifndef USE_DHCP
// for static IP setting
-const char * IP_Addr = "192.168.0.120";
+char * IP_Addr = "192.168.0.120";
const char * IP_Subnet = "255.255.255.0";
const char * IP_Gateway = "192.168.0.1";
#endif
-#define TCP_SERVER
-//#define TCP_CLIENT
-//#define UDP_SERVER
-//#define UDP_CLIENT
-//#define NTP
-
char buffer[256]; // socket buffer
@@ -77,32 +86,13 @@
}
-int main()
-{
- message_t message;
-
- /*
- * configure
- */
- uart.baud(115200);
-
-
- /*
- * UI threads
- */
- Thread t1(uart_thread);
-
-
-
-
- /*
- * Ethernet
- */
+int ethernet_init(void) {
uint8_t mac[6];
mbed_mac_address((char *)mac); // using the MAC address in LPC11U24 or LPC1178
mac[0] = 0x00; mac[1] = 0x08; mac[2] = 0xDC; mac[3] = 0x00; mac[4] = 0x00; mac[5] = 0x00;
+
printf("Start\n");
#ifdef USE_DHCP
int ret = eth.init(mac); //Use DHCP
@@ -125,6 +115,43 @@
return -1;
}
+ return 0;
+}
+
+
+
+int main()
+{
+ message_t message;
+
+ /*
+ * configure
+ */
+ uart.baud(115200);
+
+ /*
+ * FLASH
+ */
+ // Unlock the Flash Program Erase controller */
+ FLASH_Unlock();
+ // EEPROM Init
+ EE_Init();
+
+ /*
+ * UI threads
+ */
+ Thread t1(uart_thread);
+
+
+ /*
+ * Ethernet
+ */
+ int ret = ethernet_init();
+ if (ret) {
+ printf("App halted\n");
+ while (true) {};
+ }
+
#ifdef TCP_SERVER
TCPSocketServer tcp_server;
@@ -132,6 +159,8 @@
tcp_server.bind(TCP_SERVER_PORT);
tcp_server.listen();
+ uart.printf("\nWait for new connection...\n");
+ tcp_server.set_blocking(false, TCP_SERVER_WAIT_CLIENT_TIMEOUT);
#endif
#ifdef UDP_SERVER
@@ -139,57 +168,53 @@
Endpoint ep_udp_client;
ret = udp_server.bind(UDP_LOCAL_PORT);
- //printf("sock.bind = %d\n", ret);
-#endif
-
-#ifdef TCP_CLIENT
-TCPSocketConnection tcp_socket;
-#endif
-
-#ifdef UDP_CLIENT
- UDPSocket udp_socket;
- Endpoint ep_udp_server;
+ printf("sock.bind = %d\n", ret);
+ udp_server.set_blocking(false, UDP_SERVER_RECEIVE_TIMEOUT);
#endif
-/*
-* TCP server
-*/
-#ifdef TCP_SERVER
+ // Network processor
while (true) {
- //uart.printf("\nWait for new connection...\n");
- tcp_server.accept(tcp_client);
- tcp_client.set_blocking(false, 10000); // Timeout after (10)s
-
- //uart.printf("Connection from: %s\n", client.get_address());
- while (true) {
- int n = tcp_client.receive(buffer, sizeof(buffer));
- if (n <= 0) break;
+#ifdef TCP_SERVER
+ // no tcp client connected
+ if (!tcp_client.is_connected())
+ {
+ // wait for client within timeout
+ ret = tcp_server.accept(tcp_client);
- // send to uart
- buffer[n] = '\0';
- message.len = n;
- message.msg = buffer;
- uart_queue.put(&message);
-
- // echo to tcp client
- tcp_client.send_all(buffer, n);
- if (n <= 0) break;
- }
-
- tcp_client.close();
- }
+ // tcp client connected
+ if (ret > -1) {
+ uart.printf("Connection from: %s\n", tcp_client.get_address());
+
+ // loop waiting and receiving data within timeout
+ tcp_client.set_blocking(false, TCP_SERVER_RECEIVE_TIMEOUT); // Timeout after x seconds
+ while (true) {
+ int n = tcp_client.receive(buffer, sizeof(buffer));
+ if (n <= 0) break;
+
+ // got data, process it
+ // send to uart
+ buffer[n] = '\0';
+ message.len = n;
+ message.msg = buffer;
+ uart_queue.put(&message);
+
+ // echo to tcp client
+ tcp_client.send_all(buffer, n);
+ if (n <= 0) break;
+ } // end loop if no data received within timeout
+ tcp_client.close();
+ } // if client connected
+ } // if no client connected
#endif
-/*
-* UDP server
-*/
+
#ifdef UDP_SERVER
- while (true) {
- //printf("\nWait for packet...\n");
+ // wait for udp packet within timeout
int n = udp_server.receiveFrom(ep_udp_client, buffer, sizeof(buffer));
if (n < 0) continue;
+ // got some data, process it
// send to uart
buffer[n] = '\0';
message.len = n;
@@ -199,94 +224,12 @@
// echo
//printf("Received packet from: %s\n", client.get_address());
udp_server.sendTo(ep_udp_client, buffer, n);
- }
-#endif
-
-
-/*
-* TCP client
-*/
-#ifdef TCP_CLIENT
- while (tcp_socket.connect(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT) < 0) {
- printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
- wait(1);
- }
-
- char hello[] = "Hello World\n";
- tcp_socket.send_all(hello, sizeof(hello) - 1);
-
- char buf[256];
- int n = tcp_socket.receive(buf, 256);
- buf[n] = '\0';
- printf("%s", buf);
-
- tcp_socket.close();
- eth.disconnect();
-
- while(true) {}
+
+ // Command = set new IP
+ if (strstr(buffer, "SetIP:")) {
+ IP_Addr = &buffer[6];
+ printf("New IP=%s\n", IP_Addr);
+ }
#endif
-
-
-/*
-* UDP client
-*/
-#ifdef UDP_CLIENT
- ret = udp_socket.init();
- udp_socket.bind(0);
- printf("sock.bind = %d\n", ret);
- if (ret == -1) printf("Socket creation Fail\n");
-
- ep_udp_server.set_address(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT);
-
- printf("\nSend UDP data\n");
-
- char out_buffer[] = "Hello World\n";
- ret = udp_socket.sendTo(ep_udp_server, out_buffer, sizeof(out_buffer));
- if (ret < 0) printf("UDP Send Error\n");
- else printf("UDP Send: %d\n", ret);
-
- char in_buffer[256];
- int n = udp_socket.receiveFrom(ep_udp_server, in_buffer, sizeof(in_buffer));
-
- in_buffer[n] = '\0';
- printf("%s\n", in_buffer);
-
- udp_socket.close();
-
- eth.disconnect();
- while(1) {}
-#endif
-
-
-/*
-* NTP
-*/
-#ifdef NTP
- time_t ctTime;
- ctTime = time(NULL);
- printf("1. Current Time is: %s\r\n", ctime(&ctTime));
-
- printf("Trying to update time...\r\n");
- if (ntp.setTime("0.pool.ntp.org") == 0) {
- ctTime = time(NULL);
- printf("2. Current Time is: %s\r\n", ctime(&ctTime));
-
- // resetting GMT+9
- set_time( time(NULL) + 32400 ); // 9x60x60
- //
- printf("Set time successfully\r\n");
- //time_t ctTime;
- ctTime = time(NULL);
- printf("Time is set to (UTC): %s\r\n", ctime(&ctTime));
- } else {
- printf("Error\r\n");
- }
-
- eth.disconnect();
-
- while(1) {
- }
-#endif
-
- while(true) {}
-}
+ } // network processor
+}
\ No newline at end of file
