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.
Fork of Impedance_Fast_Circuitry by
Diff: main.cpp
- Revision:
- 17:2f978f823020
- Parent:
- 16:c3f922f61b8f
- Child:
- 18:b17ddeeb1c09
--- a/main.cpp Fri Nov 14 18:26:39 2014 +0000 +++ b/main.cpp Fri Nov 14 18:30:54 2014 +0000 @@ -1,223 +1,162 @@ -/* -#include "mbed.h" -#include "EthernetInterface.h" - -#define IP "127.0.0.5" -#define MASK "255.255.255.0" -#define GATEWAY "10.1.1.1" -#define DES_ADDR "127.0.0.6" - -#define PORT 80 - -Serial pc(USBTX, USBRX); -EthernetInterface eth; -UDPSocket point1; +#define SERVER 0 -int main () { - wait_ms(500); - // intitialize Serial connection - pc.baud(230400); - - // initialize IP connection - eth.init(IP, MASK, GATEWAY); - wait_ms(100); - - // setup UDP socket - point1.init(); - wait_ms(1); - point1.bind(PORT); - - -} -*/ + +#if SERVER == 1 #include "mbed.h" #include "EthernetInterface.h" - - -#define SWITCHER 0 -#if SWITCHER == 1 - -#define IP "127.0.0.5" -#define MASK "255.255.255.0" -#define GATEWAY "10.1.1.1" -#define DES_ADDR "127.0.0.6" -//#define DES_ADDR "128.187.113.146" //"utcnist.colorado.edu" -#define PORT 80 - -DigitalOut led_blue(LED_BLUE); -EthernetInterface eth; -Serial pc(USBTX, USBRX); -Timer timer; - + +#include "NetworkAPI/buffer.hpp" +#include "NetworkAPI/select.hpp" +#include "NetworkAPI/ip/address.hpp" +#include "NetworkAPI/tcp/socket.hpp" +using namespace network; + +#define MAX_CLIENTS 5 + int main() { - led_blue = 1; - pc.baud(230400); - - timer.stop(); - pc.printf("\r\nStarting program1...\r\n"); - - eth.init(IP, MASK, GATEWAY); //Use DHCP - eth.connect(); - - pc.printf("IP Address is %s\r\n", eth.getIPAddress()); - - if(1) - { - UDPSocket sock; - sock.init(); - - Endpoint nist; - nist.set_address(DES_ADDR, PORT)? pc.printf("Endpoint address NOT set\r\n") : pc.printf("Endpoint address set\r\n"); - led_blue = 0; - while(!pc.getc()); - led_blue = 1; - char out_buffer[] = "password"; // Does not matter - int returnVar = sock.sendTo(nist, out_buffer, sizeof(out_buffer)); - led_blue = 0; - switch(returnVar) { - case -1: - pc.printf("Password send failure\r\n"); + EthernetInterface interface; + interface.init(); + interface.connect(); + printf("IP Address is %s\n\r", interface.getIPAddress()); + + Select select; + tcp::Socket server; + tcp::Socket client[MAX_CLIENTS]; + tcp::Socket *socket = NULL; + + int result = 0; + int index = 0; + + network::Buffer buffer(256); + std::string message("Hello world!"); + + // Configure the server socket (assume everty thing works) + server.open(); + server.bind(1234); + server.listen(MAX_CLIENTS); + + // Add sockets to the select api + select.set(&server, Select::Read); + for (index = 0; index < MAX_CLIENTS; index++) { + select.set(&client[index], Select::Read); + } + + do { + // Wait for activity + result = select.wait(); + if (result < -1) { + printf("Failed to select\n\r"); break; - default: - pc.printf("Password sent %i chars\r\n", returnVar); } - wait(1); - led_blue = 1; - char in_buffer[400]; - int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer)); - - unsigned int timeRes = ntohl( *((unsigned int*)in_buffer)); - pc.printf("Received %d bytes from server %s on port %d: %u seconds since 1/01/1900 00:00 GMT\n", n, nist.get_address(), nist.get_port(), timeRes); - sock.close(); - } - else - { - TCPSocketConnection sock; - //sock.connect("mbed.org", 80); - sock.connect(DES_ADDR, 80); - - char http_cmd[] = "GET htdocs/index.html HTTP/1.1"; - sock.send_all(http_cmd, sizeof(http_cmd)-1); - - char buffer[30000]; - int ret; - while (true) { - timer.reset(); - timer.start(); - ret = sock.receive(buffer, sizeof(buffer)-1); - timer.stop(); - pc.printf("Timer: %i\r\n", timer.read()); - if (ret <= 0) - break; - buffer[ret] = '\0'; - pc.printf("Received %d chars from server:\n%s\n", ret, buffer); + + // Get the first socket + socket = (tcp::Socket *)select.getReadable(); + + for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) { + // Check if there was a connection request. + if (socket->getHandle() == server.getHandle()) { + // Find an unused client + for (index = 0; index < MAX_CLIENTS; index++) { + if (client[index].getStatus() == network::Socket::Closed) { + break; + } + } + + // Maximum connections reached + if (index == MAX_CLIENTS) { + printf("Maximum connections reached\n\r"); + continue; + } + + // Accept the client + socket->accept(client[index]); + printf("Client connected %s:%d\n\r", + client[index].getRemoteEndpoint().getAddress().toString().c_str(), + client[index].getRemoteEndpoint().getPort()); + + // Send a nice message to the client + client[index].write((void *)message.data(), message.size()); + continue; } - sock.close(); + + // It was not the server socket, so it must be a client talking to us. + switch (socket->read(buffer)) { + case 0: + // Remote end disconnected + printf("Client disconnected %s:%d\n\r", + socket->getRemoteEndpoint().getAddress().toString().c_str(), + socket->getRemoteEndpoint().getPort()); + + // Close socket + socket->close(); + break; + + case -1: + printf("Error while reading data from socket\n\r"); + socket->close(); + break; + + default: + printf("Message from %s:%d\n\r", + socket->getRemoteEndpoint().getAddress().toString().c_str(), + socket->getRemoteEndpoint().getPort()); + + printf("%s\n\r", (char *)buffer.data()); + break; + } } - - eth.disconnect(); - pc.printf("\r\nEnding program\r\n"); - while(1) {} - + + } while (server.getStatus() == network::Socket::Listening); } - - - - - - - - - #else -#define IP "127.0.0.6" -#define MASK "255.255.255.0" -#define GATEWAY "10.1.1.1" -#define DES_ADDR "127.0.0.5" -//#define DES_ADDR "128.187.113.146" //"utcnist.colorado.edu" -#define PORT 80 - -DigitalOut led_blue(LED_BLUE); -EthernetInterface eth; -Serial pc(USBTX, USBRX); -Timer timer; - +#include "mbed.h" +#include "EthernetInterface.h" + +#include "NetworkAPI/buffer.hpp" +#include "NetworkAPI/ip/address.hpp" +#include "NetworkAPI/tcp/socket.hpp" + int main() { - led_blue = 1; - pc.baud(230400); - - timer.stop(); - pc.printf("\r\nStarting program2...\r\n"); + EthernetInterface interface; + interface.init(); + interface.connect(); + printf("IP Address is %s\n\r", interface.getIPAddress()); + + int result; + + network::tcp::Socket socket; + network::Buffer buffer(256); + std::string request("GET /media/uploads/donatien/hello.txt HTTP/1.1\r\nHost: %s\r\n\r\n"); - eth.init(IP, MASK, GATEWAY); //Use DHCP - eth.connect(); + if (socket.open() < 0) { + printf("Failed to open TCP Socket\n\r"); + return -1; + } - pc.printf("IP Address is %s\r\n", eth.getIPAddress()); + if (socket.connect("mbed.org", 80) < 0) { + printf("Failed to connect with mbed.org\n\r"); + return -1; + } - if(1) + if (socket.write((void *)request.data(), request.size()) < 0) { + printf("Failed to write HTTP request\n\r"); + return -1; + } + + do { - UDPSocket sock; - sock.init(); - - Endpoint nist; - nist.set_address(DES_ADDR, PORT)? pc.printf("Endpoint address NOT set\r\n") : pc.printf("Endpoint address set\r\n"); - led_blue = 0; - while(!pc.getc()); - led_blue = 1; - char out_buffer[] = "blah"; // Does not matter - int returnVar = sock.sendTo(nist, out_buffer, sizeof(out_buffer)); - led_blue = 0; - switch(returnVar) { - case -1: - pc.printf("Password send failure\r\n"); - break; - default: - pc.printf("Password sent %i chars\r\n", returnVar); - } - wait(1); - led_blue = 1; - - char in_buffer[400]; - int n = sock.receiveFrom(nist, in_buffer, sizeof(in_buffer)); - - unsigned int timeRes = ntohl( *((unsigned int*)in_buffer)); - pc.printf("Received %d bytes from server %s on port %d: %u seconds since 1/01/1900 00:00 GMT\n", n, nist.get_address(), nist.get_port(), timeRes); - sock.close(); - } - else - { - TCPSocketConnection sock; - //sock.connect("mbed.org", 80); - sock.connect(DES_ADDR, 80); - - char http_cmd[] = "GET htdocs/index.html HTTP/1.1"; - sock.send_all(http_cmd, sizeof(http_cmd)-1); - - char buffer[30000]; - int ret; - while (true) { - timer.reset(); - timer.start(); - ret = sock.receive(buffer, sizeof(buffer)-1); - timer.stop(); - pc.printf("Timer: %i\r\n", timer.read()); - if (ret <= 0) - break; - buffer[ret] = '\0'; - pc.printf("Received %d chars from server:\n%s\n", ret, buffer); - } - sock.close(); - } + result = socket.read(buffer); + printf("Received %d bytes:\n\r%s\n\r", result, (char *)buffer.pointer()); + } while(result > 0); - eth.disconnect(); - pc.printf("\r\nEnding program\r\n"); - while(1) {} + socket.close(); + return 0; +} -} #endif \ No newline at end of file