diff --git a/libraries/tests/net/echo/tcp_client/main.cpp b/libraries/tests/net/echo/tcp_client/main.cpp index 6ffea386ca..de41b35e5d 100644 --- a/libraries/tests/net/echo/tcp_client/main.cpp +++ b/libraries/tests/net/echo/tcp_client/main.cpp @@ -1,31 +1,55 @@ #include "mbed.h" #include "EthernetInterface.h" -const char* ECHO_SERVER_ADDRESS = "192.168.0.51"; -const int ECHO_PORT = 7; +struct s_ip_address +{ + int ip_1; + int ip_2; + int ip_3; + int ip_4; +}; int main() { + char buffer[256] = {0}; + char out_buffer[] = "Hello World\n"; + char out_success[] = "{{success}}\n{{end}}\n"; + char out_failure[] = "{{failure}}\n{{end}}\n"; + + s_ip_address ip_addr = {0, 0, 0, 0}; + int port = 0; + + printf("TCPCllient waiting for server IP and port...\r\n"); + scanf("%d.%d.%d.%d:%d", &ip_addr.ip_1, &ip_addr.ip_2, &ip_addr.ip_3, &ip_addr.ip_4, &port); + printf("Address received:%d.%d.%d.%d:%d\r\n", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4, port); + EthernetInterface eth; eth.init(); //Use DHCP eth.connect(); - printf("IP Address is %s\n", eth.getIPAddress()); + printf("TCPClient IP Address is %s\r\n", eth.getIPAddress()); + sprintf(buffer, "%d.%d.%d.%d", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4); + TCPSocketConnection socket; - while (socket.connect(ECHO_SERVER_ADDRESS, ECHO_PORT) < 0) { - printf("Unable to connect to (%s) on port (%d)\n", ECHO_SERVER_ADDRESS, ECHO_PORT); + while (socket.connect(buffer, port) < 0) { + printf("TCPCllient unable to connect to %s:%d\r\n", buffer, port); wait(1); } - - char hello[] = "Hello World\n"; - socket.send_all(hello, sizeof(hello) - 1); - - char buf[256]; - int n = socket.receive(buf, 256); - buf[n] = '\0'; - printf("%s", buf); - + + socket.send_all(out_buffer, sizeof(out_buffer) - 1); + + int n = socket.receive(buffer, sizeof(buffer)); + if (n > 0) + { + buffer[n] = '\0'; + printf("%s", buffer); + if (strncmp(out_buffer, buffer, sizeof(out_buffer) - 1) == 0) { + socket.send_all(out_success, sizeof(out_success) - 1); + } + } + + socket.send_all(out_failure, sizeof(out_failure) - 1); + socket.close(); eth.disconnect(); - - while(true) {} + return 0; } diff --git a/libraries/tests/net/echo/udp_client/main.cpp b/libraries/tests/net/echo/udp_client/main.cpp index 8595b1c305..dffc5e5392 100644 --- a/libraries/tests/net/echo/udp_client/main.cpp +++ b/libraries/tests/net/echo/udp_client/main.cpp @@ -2,54 +2,64 @@ #include "rtos.h" #include "EthernetInterface.h" -const char* ECHO_SERVER_ADDRESS = "10.2.200.94"; -const int ECHO_SERVER_PORT = 7195; - -const char* LOCAL_IP_ADDRESS = "10.2.200.70"; -const char* NETWORK_MASK = "255.255.255.0"; -const char* GATEWAY = "10.2.200.1"; - -char out_buffer[] = "Hello World\n"; -char in_buffer[256]; - #define CHECK(RC, STEP) if (RC < 0) error(STEP": %d\n", RC) +struct s_ip_address +{ + int ip_1; + int ip_2; + int ip_3; + int ip_4; +}; + int main() { - int rc = 0; + char buffer[256] = {0}; + char out_buffer[] = "Hello World\n"; + char out_success[] = "{{success}}\n{{end}}\n"; + char out_failure[] = "{{failure}}\n{{end}}\n"; + s_ip_address ip_addr = {0, 0, 0, 0}; + int port = 0; + + printf("UDPCllient waiting for server IP and port...\r\n"); + scanf("%d.%d.%d.%d:%d", &ip_addr.ip_1, &ip_addr.ip_2, &ip_addr.ip_3, &ip_addr.ip_4, &port); + printf("Address received:%d.%d.%d.%d:%d\r\n", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4, port); + EthernetInterface eth; - - rc = eth.init(); //Use DHCP - // rc = eth.init(LOCAL_IP_ADDRESS, NETWORK_MASK, GATEWAY); + int rc = eth.init(); //Use DHCP CHECK(rc, "eth init"); - + rc = eth.connect(); CHECK(rc, "connect"); printf("IP: %s\n", eth.getIPAddress()); - + UDPSocket sock; rc = sock.init(); CHECK(rc, "sock init"); + + printf("UDPClient IP Address is %s\r\n", eth.getIPAddress()); + sprintf(buffer, "%d.%d.%d.%d", ip_addr.ip_1, ip_addr.ip_2, ip_addr.ip_3, ip_addr.ip_4); Endpoint echo_server; - rc = echo_server.set_address(ECHO_SERVER_ADDRESS, ECHO_SERVER_PORT); + rc = echo_server.set_address(buffer, port); CHECK(rc, "set_address"); - + rc = sock.sendTo(echo_server, out_buffer, sizeof(out_buffer)); CHECK(rc, "sendTo"); - - int n = sock.receiveFrom(echo_server, in_buffer, sizeof(in_buffer)); + + int n = sock.receiveFrom(echo_server, buffer, sizeof(buffer)); CHECK(n, "receiveFrom"); - - in_buffer[n] = '\0'; - printf("%s\n", in_buffer); - - sock.close(); - - eth.disconnect(); - - DigitalOut led(LED1); - while (true) { - led = !led; - Thread::wait(1000); + if (n > 0) + { + buffer[n] = '\0'; + printf("%s", buffer); + if (strncmp(out_buffer, buffer, sizeof(out_buffer) - 1) == 0) { + sock.sendTo(echo_server, out_success, sizeof(out_success) - 1); + } } + + sock.sendTo(echo_server, out_failure, sizeof(out_failure) - 1); + + sock.close(); + eth.disconnect(); + return 0; } diff --git a/workspace_tools/host_tests/host_test.py b/workspace_tools/host_tests/host_test.py index 66f4b6d74d..d43a3a5e9f 100644 --- a/workspace_tools/host_tests/host_test.py +++ b/workspace_tools/host_tests/host_test.py @@ -14,48 +14,48 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. """ + from optparse import OptionParser from serial import Serial from time import sleep from sys import stdout - class Mbed: """ Base class for a host driven test """ def __init__(self): parser = OptionParser() - + parser.add_option("-m", "--micro", dest="micro", help="The target microcontroller ", metavar="MICRO") - + parser.add_option("-p", "--port", dest="port", help="The serial port of the target mbed (ie: COM3)", metavar="PORT") - + parser.add_option("-d", "--disk", dest="disk", help="The target disk path", metavar="DISK_PATH") - + parser.add_option("-t", "--timeout", dest="timeout", help="Timeout", metavar="TIMEOUT") parser.add_option("-e", "--extra", dest="extra", help="Extra serial port (used by some tests)", metavar="EXTRA") - + (self.options, _) = parser.parse_args() - + if self.options.port is None: raise Exception("The serial port of the target mbed have to be provided as command line arguments") - + self.port = self.options.port self.disk = self.options.disk self.extra_port = self.options.extra self.extra_serial = None self.serial = None self.timeout = 10 if self.options.timeout is None else self.options.timeout - + print 'Mbed: "%s" "%s"' % (self.port, self.disk) - + def init_serial(self, baud=9600, extra_baud=9600): self.serial = Serial(self.port, timeout = 1) self.serial.setBaudrate(baud) @@ -63,12 +63,12 @@ class Mbed: self.extra_serial = Serial(self.extra_port, timeout = 1) self.extra_serial.setBaudrate(extra_baud) self.flush() - + def reset(self): self.serial.sendBreak() # Give time to wait for the image loading sleep(2) - + def flush(self): self.serial.flushInput() self.serial.flushOutput() @@ -79,7 +79,7 @@ class Mbed: class Test: def __init__(self): self.mbed = Mbed() - + def run(self): try: result = self.test() @@ -87,11 +87,11 @@ class Test: except Exception, e: print str(e) self.print_result("error") - + def notify(self, message): print message stdout.flush() - + def print_result(self, result): self.notify("\n{%s}\n{end}" % result) diff --git a/workspace_tools/host_tests/tcpecho_client_auto.py b/workspace_tools/host_tests/tcpecho_client_auto.py new file mode 100644 index 0000000000..f57d6f24b6 --- /dev/null +++ b/workspace_tools/host_tests/tcpecho_client_auto.py @@ -0,0 +1,60 @@ +""" +mbed SDK +Copyright (c) 2011-2013 ARM Limited + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" + +from SocketServer import BaseRequestHandler, TCPServer +import socket +from host_test import Test, DefaultTest +from sys import stdout + +SERVER_IP = str(socket.gethostbyname(socket.getfqdn())) +SERVER_PORT = 7 + +class TCPEchoClientTest(Test): + def __init__(self): + Test.__init__(self) + self.mbed.init_serial() + + def send_server_ip_port(self, ip_address, port_no): + print "Resetting target..." + self.mbed.reset() + print "Sending server IP Address to target..." + connection_str = ip_address + ":" + str(port_no) + "\n" + self.mbed.serial.write(connection_str) + + +class TCPEchoClient_Handler(BaseRequestHandler): + def print_result(self, result): + print "\n{%s}\n{end}" % result + + def handle(self): + """ One handle per connection """ + print "connection received" + while True: + data = self.request.recv(1024) + if not data: break + self.request.sendall(data) + print "echo: " + repr(data) + stdout.flush() + + +server = TCPServer((SERVER_IP, SERVER_PORT), TCPEchoClient_Handler) +print "listening for connections: " + SERVER_IP + ":" + str(SERVER_PORT) + +mbed_test = TCPEchoClientTest(); +mbed_test.send_server_ip_port(SERVER_IP, SERVER_PORT) + +server.serve_forever() diff --git a/workspace_tools/host_tests/udpecho_client_auto.py b/workspace_tools/host_tests/udpecho_client_auto.py new file mode 100644 index 0000000000..22b1ce3081 --- /dev/null +++ b/workspace_tools/host_tests/udpecho_client_auto.py @@ -0,0 +1,58 @@ +""" +mbed SDK +Copyright (c) 2011-2013 ARM Limited + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +""" +from SocketServer import BaseRequestHandler, UDPServer +from host_test import Test, DefaultTest +import socket +from sys import stdout + +SERVER_IP = str(socket.gethostbyname(socket.getfqdn())) +SERVER_PORT = 7 + +class UDPEchoClientTest(Test): + def __init__(self): + Test.__init__(self) + self.mbed.init_serial() + + def send_server_ip_port(self, ip_address, port_no): + print "Resetting target..." + self.mbed.reset() + print "Sending server IP Address to target..." + connection_str = ip_address + ":" + str(port_no) + "\n" + self.mbed.serial.write(connection_str) + + +class UDPEchoClient_Handler(BaseRequestHandler): + def print_result(self, result): + print "\n{%s}\n{end}" % result + + def handle(self): + """ One handle per connection """ + print "connection received" + data, socket = self.request + print "client: ", self.client_address + print "data: ", data + socket.sendto(data, self.client_address) + stdout.flush() + + +server = UDPServer((SERVER_IP, SERVER_PORT), UDPEchoClient_Handler) +print "listening for connections" + +mbed_test = UDPEchoClientTest(); +mbed_test.send_server_ip_port(SERVER_IP, SERVER_PORT) + +server.serve_forever() diff --git a/workspace_tools/singletest.py b/workspace_tools/singletest.py index 713db0b093..56cf0ee795 100644 --- a/workspace_tools/singletest.py +++ b/workspace_tools/singletest.py @@ -258,15 +258,6 @@ class SingleTestRunner(object): line = '' output = [] while (time() - start) < duration: - # Give the client a way to interrupt the test - """ - try: - c = client.recv(1) - if c == '!': - break - except Exception, _: - pass - """ try: c = obs.queue.get(block=True, timeout=1) except Empty, _: