A simple echo server for LINAC MO Monitor TCP function test; can be run with hercules_3_2_8 as the test client

Dependencies:   TextLCD WIZnetInterface mbed

Fork of TCP_LED_Control-WIZwiki-W7500 by Kiyong Lee

Files at this revision

API Documentation at this revision

Comitter:
mahengjie
Date:
Fri Dec 15 20:54:59 2017 +0000
Parent:
12:aee11a1d7f14
Commit message:
LINAC MO Monitor TCP function test with a simple echo server. Hercules_3_2_8.exe can be used as the test client

Changed in this revision

TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
WIZnetInterface.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
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r aee11a1d7f14 -r 1a7e0594c25a TextLCD.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TextLCD.lib	Fri Dec 15 20:54:59 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/V8/code/TextLCD/#8d296e48e6a7
diff -r aee11a1d7f14 -r 1a7e0594c25a WIZnetInterface.lib
--- a/WIZnetInterface.lib	Mon Jul 20 07:54:18 2015 +0000
+++ b/WIZnetInterface.lib	Fri Dec 15 20:54:59 2017 +0000
@@ -1,1 +1,1 @@
-http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#24a9f2df2145
+http://developer.mbed.org/teams/WIZnet/code/WIZnetInterface/#c91884bd2713
diff -r aee11a1d7f14 -r 1a7e0594c25a main.cpp
--- a/main.cpp	Mon Jul 20 07:54:18 2015 +0000
+++ b/main.cpp	Fri Dec 15 20:54:59 2017 +0000
@@ -1,45 +1,71 @@
+// TCP test of LINAC MO Monitor
+// Hengjie Ma
+// BNL, NSLS-II, RF
+// Nov. 2, 2017
+//
 #include "mbed.h"
 #include "EthernetInterface.h"
+#include "TextLCD.h"
+#include <stdio.h>
 
+// set TCP parameters
 #define ECHO_SERVER_PORT   7
+#define MAC_ADDRESS        {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}
 
-DigitalOut myled(LED1);
+DigitalOut myled(LED1);  // on-board blue LED, an idiot light for TCP sanity check
+char lcd_buffer[20];
 
+// set up 2004 LCD display panel, 4-bit production wiring
+// RS, E, D4-D7, LCDType=LCD16x2, BL=NC, E2=NC, LCDTCtrl=US2066
+TextLCD lcd(P9, P10, P5,P8, P7, P6, TextLCD::LCD20x4D, NC, NC, TextLCD::US2066_3V3); 
+
+int buffer_length = 256;
 int compare_strings(char [], char []); 
 
 int main (void) 
 {
     myled = 1; // LED OFF in WIZwiki-W7500
     int flag=1;
-
-    printf("Wait a second...\r\n");
-    uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x55, 0x51, 0x52}; 
+    lcd.cls();
+    printf("Wait a second...\r\n"); 
+    lcd.printf("Wait a second...\r\n"); 
+    // TCP initialization
+    uint8_t mac_addr[6] = MAC_ADDRESS;
     EthernetInterface eth;
-    eth.init(mac_addr); //Use DHCP
+    eth.init(mac_addr);       //Use DHCP
     eth.connect();
-    printf("Server IP Address is %s\r\n", eth.getIPAddress());
+    // annouce DHCP set echo-sever IP address
+    printf("Server IP Address is %s\r\n\n", eth.getIPAddress());
+    lcd.locate(0,0);
+    lcd.printf("ServerIP:%s\r\n", eth.getIPAddress());
+    // command for LED turn-on/off
+    printf("Usage: \r\n  Client command to turn on  LED: LED_ON \r\n");
+    printf("  Client command to turn off LED: any other string. \r\n\n");
     
     TCPSocketServer server;
     server.bind(ECHO_SERVER_PORT);
-    server.listen();
-    
-    while (true) 
+    server.listen();  
+    while(true)
     {
-        printf("Wait for new connection...\r\n");
+        printf("Wait for new connection...\r\n"); 
+        lcd.locate(0,3); 
+        lcd.printf("Wait for connect...");  
         TCPSocketConnection client;
         server.accept(client);
-        client.set_blocking(false, 15000); // Timeout after (1.5)s
-        
-        printf("Connection from: %s\r\n", client.get_address());
-        char buffer[256];
+        client.set_blocking(false, 3000); // Timeout after (3)s
+        printf("Connect from: %s\r\n", client.get_address());
+        lcd.locate(0,3);
+        lcd.printf("Connect:%s", client.get_address());
+        char buffer[buffer_length];
         while (true) {
             int n = client.receive(buffer, sizeof(buffer));
             if (n <= 0) break;
-            
             // print received message to terminal
             buffer[n] = '\0';
             printf("Received message from Client :'%s'\r\n",buffer);
-
+            lcd.locate(0,1);
+            memcpy(lcd_buffer, buffer, 20);
+            lcd.printf("Client msg:'%s'\r",lcd_buffer);
           
             // LED control if received message matches pre-defined command
             /*
@@ -48,26 +74,23 @@
             else
               myled = 1;
             */
-            
+                     
             // LED control if received message matches pre-defined command
             char command_buf[256] = {'L', 'E', 'D', '_', 'O', 'N', '\0'};
 
-            char string[256];
-            strcpy (string, command_buf);
-            printf("Received command : %s\n", string);
-
+            // char string[256];
+            // strcpy (string, command_buf);
+            // printf("Is received command : %s  ??? \r\n", string);
             flag = compare_strings(buffer, command_buf);
             
             if (flag == 0) {
               myled = 0; // LED ON in WIZwiki-W7500
-              printf("LED is turned on!\r\n");
+              printf("Yes, command = LED_ON, LED is turned on!\r\n\n");
             }
             else {
               myled = 1;
-              printf("LED is turned off!\r\n");
+              printf("No, command does not match, LED is turned off!\r\n\n");
             }
-
-
             // LED blink one time                        
             //myled = 0; // LED ON in WIZwiki-W7500
             //wait(1.0);
@@ -80,18 +103,18 @@
                 buffer[f] = buffer[l];
                 buffer[l] = temp;
                 }
-            
             // print reversed message to terminal
-            printf("Sending message to Client: '%s'\r\n",buffer);
-            
+            printf("Sending reversed message to Client: '%s'\r\n",buffer);
+            memcpy(lcd_buffer, buffer, 20);
+            lcd.locate(0,2);
+            lcd.printf("ServerEcho:'%s'",lcd_buffer);
+            //          123456789abcdef1234
             // Echo received message back to client
             client.send_all(buffer, n);
             if (n <= 0) break;
-        }
-        
+        }      
         client.close();
     }
-    
 }
 
 int compare_strings(char a[], char b[])
diff -r aee11a1d7f14 -r 1a7e0594c25a mbed.bld
--- a/mbed.bld	Mon Jul 20 07:54:18 2015 +0000
+++ b/mbed.bld	Fri Dec 15 20:54:59 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7
\ No newline at end of file
+https://mbed.org/users/mbed_official/code/mbed/builds/64910690c574
\ No newline at end of file