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
Revision 13:1a7e0594c25a, committed 2017-12-15
- 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
--- /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
--- 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
--- 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[])
--- 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
