Dependencies:   mbed-dsp mbed

Fork of DSP_200kHz by Mazzeo Research Group

Committer:
timmey9
Date:
Fri Nov 14 20:39:34 2014 +0000
Revision:
18:b17ddeeb1c09
Parent:
17:2f978f823020
Child:
20:f533b3c9296f
Reverted EthernetInterface.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
timmey9 18:b17ddeeb1c09 1 #define SERVER 1
timmey9 16:c3f922f61b8f 2
timmey9 16:c3f922f61b8f 3
timmey9 17:2f978f823020 4
timmey9 17:2f978f823020 5 #if SERVER == 1
timmey9 16:c3f922f61b8f 6
donatien 0:bb128f0e952f 7 #include "mbed.h"
donatien 0:bb128f0e952f 8 #include "EthernetInterface.h"
timmey9 17:2f978f823020 9
timmey9 17:2f978f823020 10 #include "NetworkAPI/buffer.hpp"
timmey9 17:2f978f823020 11 #include "NetworkAPI/select.hpp"
timmey9 17:2f978f823020 12 #include "NetworkAPI/ip/address.hpp"
timmey9 17:2f978f823020 13 #include "NetworkAPI/tcp/socket.hpp"
timmey9 18:b17ddeeb1c09 14
timmey9 18:b17ddeeb1c09 15 Serial pc(USBTX, USBRX);
timmey9 18:b17ddeeb1c09 16 DigitalOut led_red(LED_RED);
timmey9 18:b17ddeeb1c09 17 DigitalOut led_green(LED_GREEN);
timmey9 18:b17ddeeb1c09 18 DigitalOut led_blue(LED_BLUE);
timmey9 18:b17ddeeb1c09 19
timmey9 17:2f978f823020 20 using namespace network;
timmey9 17:2f978f823020 21
timmey9 17:2f978f823020 22 #define MAX_CLIENTS 5
timmey9 17:2f978f823020 23
emilmont 7:65188f4a8c25 24 int main() {
timmey9 18:b17ddeeb1c09 25 led_red = 1;
timmey9 18:b17ddeeb1c09 26 led_green = 1;
timmey9 18:b17ddeeb1c09 27 led_blue = 1;
timmey9 18:b17ddeeb1c09 28 pc.baud(230400);
timmey9 18:b17ddeeb1c09 29 pc.printf("Starting Server\r\n");
timmey9 17:2f978f823020 30 EthernetInterface interface;
timmey9 17:2f978f823020 31 interface.init();
timmey9 17:2f978f823020 32 interface.connect();
timmey9 18:b17ddeeb1c09 33 pc.printf("IP Address is %s\n\r", interface.getIPAddress());
timmey9 17:2f978f823020 34
timmey9 17:2f978f823020 35 Select select;
timmey9 17:2f978f823020 36 tcp::Socket server;
timmey9 17:2f978f823020 37 tcp::Socket client[MAX_CLIENTS];
timmey9 17:2f978f823020 38 tcp::Socket *socket = NULL;
timmey9 17:2f978f823020 39
timmey9 17:2f978f823020 40 int result = 0;
timmey9 17:2f978f823020 41 int index = 0;
timmey9 17:2f978f823020 42
timmey9 17:2f978f823020 43 network::Buffer buffer(256);
timmey9 17:2f978f823020 44 std::string message("Hello world!");
timmey9 17:2f978f823020 45
timmey9 17:2f978f823020 46 // Configure the server socket (assume everty thing works)
timmey9 17:2f978f823020 47 server.open();
timmey9 17:2f978f823020 48 server.bind(1234);
timmey9 17:2f978f823020 49 server.listen(MAX_CLIENTS);
timmey9 17:2f978f823020 50
timmey9 17:2f978f823020 51 // Add sockets to the select api
timmey9 17:2f978f823020 52 select.set(&server, Select::Read);
timmey9 17:2f978f823020 53 for (index = 0; index < MAX_CLIENTS; index++) {
timmey9 17:2f978f823020 54 select.set(&client[index], Select::Read);
timmey9 17:2f978f823020 55 }
timmey9 17:2f978f823020 56
timmey9 17:2f978f823020 57 do {
timmey9 17:2f978f823020 58 // Wait for activity
timmey9 17:2f978f823020 59 result = select.wait();
timmey9 17:2f978f823020 60 if (result < -1) {
timmey9 18:b17ddeeb1c09 61 pc.printf("Failed to select\n\r");
emilmont 7:65188f4a8c25 62 break;
timmey9 16:c3f922f61b8f 63 }
timmey9 17:2f978f823020 64
timmey9 17:2f978f823020 65 // Get the first socket
timmey9 17:2f978f823020 66 socket = (tcp::Socket *)select.getReadable();
timmey9 17:2f978f823020 67
timmey9 17:2f978f823020 68 for (; socket != NULL; socket = (tcp::Socket *)select.getReadable()) {
timmey9 17:2f978f823020 69 // Check if there was a connection request.
timmey9 17:2f978f823020 70 if (socket->getHandle() == server.getHandle()) {
timmey9 17:2f978f823020 71 // Find an unused client
timmey9 17:2f978f823020 72 for (index = 0; index < MAX_CLIENTS; index++) {
timmey9 17:2f978f823020 73 if (client[index].getStatus() == network::Socket::Closed) {
timmey9 17:2f978f823020 74 break;
timmey9 17:2f978f823020 75 }
timmey9 17:2f978f823020 76 }
timmey9 17:2f978f823020 77
timmey9 17:2f978f823020 78 // Maximum connections reached
timmey9 17:2f978f823020 79 if (index == MAX_CLIENTS) {
timmey9 18:b17ddeeb1c09 80 pc.printf("Maximum connections reached\n\r");
timmey9 17:2f978f823020 81 continue;
timmey9 17:2f978f823020 82 }
timmey9 17:2f978f823020 83
timmey9 17:2f978f823020 84 // Accept the client
timmey9 17:2f978f823020 85 socket->accept(client[index]);
timmey9 18:b17ddeeb1c09 86 pc.printf("Client connected %s:%d\n\r",
timmey9 17:2f978f823020 87 client[index].getRemoteEndpoint().getAddress().toString().c_str(),
timmey9 17:2f978f823020 88 client[index].getRemoteEndpoint().getPort());
timmey9 17:2f978f823020 89
timmey9 17:2f978f823020 90 // Send a nice message to the client
timmey9 17:2f978f823020 91 client[index].write((void *)message.data(), message.size());
timmey9 17:2f978f823020 92 continue;
timmey9 16:c3f922f61b8f 93 }
timmey9 17:2f978f823020 94
timmey9 17:2f978f823020 95 // It was not the server socket, so it must be a client talking to us.
timmey9 17:2f978f823020 96 switch (socket->read(buffer)) {
timmey9 17:2f978f823020 97 case 0:
timmey9 17:2f978f823020 98 // Remote end disconnected
timmey9 18:b17ddeeb1c09 99 pc.printf("Client disconnected %s:%d\n\r",
timmey9 17:2f978f823020 100 socket->getRemoteEndpoint().getAddress().toString().c_str(),
timmey9 17:2f978f823020 101 socket->getRemoteEndpoint().getPort());
timmey9 17:2f978f823020 102
timmey9 17:2f978f823020 103 // Close socket
timmey9 17:2f978f823020 104 socket->close();
timmey9 17:2f978f823020 105 break;
timmey9 17:2f978f823020 106
timmey9 17:2f978f823020 107 case -1:
timmey9 18:b17ddeeb1c09 108 pc.printf("Error while reading data from socket\n\r");
timmey9 17:2f978f823020 109 socket->close();
timmey9 17:2f978f823020 110 break;
timmey9 17:2f978f823020 111
timmey9 17:2f978f823020 112 default:
timmey9 18:b17ddeeb1c09 113 pc.printf("Message from %s:%d\n\r",
timmey9 17:2f978f823020 114 socket->getRemoteEndpoint().getAddress().toString().c_str(),
timmey9 17:2f978f823020 115 socket->getRemoteEndpoint().getPort());
timmey9 17:2f978f823020 116
timmey9 18:b17ddeeb1c09 117 pc.printf("%s\n\r", (char *)buffer.data());
timmey9 17:2f978f823020 118 break;
timmey9 17:2f978f823020 119 }
timmey9 16:c3f922f61b8f 120 }
timmey9 17:2f978f823020 121
timmey9 17:2f978f823020 122 } while (server.getStatus() == network::Socket::Listening);
donatien 0:bb128f0e952f 123 }
timmey9 16:c3f922f61b8f 124
timmey9 16:c3f922f61b8f 125
timmey9 16:c3f922f61b8f 126
timmey9 18:b17ddeeb1c09 127 #else // client
timmey9 16:c3f922f61b8f 128
timmey9 17:2f978f823020 129 #include "mbed.h"
timmey9 17:2f978f823020 130 #include "EthernetInterface.h"
timmey9 17:2f978f823020 131
timmey9 17:2f978f823020 132 #include "NetworkAPI/buffer.hpp"
timmey9 17:2f978f823020 133 #include "NetworkAPI/ip/address.hpp"
timmey9 17:2f978f823020 134 #include "NetworkAPI/tcp/socket.hpp"
timmey9 18:b17ddeeb1c09 135
timmey9 18:b17ddeeb1c09 136 Serial pc(USBTX, USBRX);
timmey9 18:b17ddeeb1c09 137 DigitalOut led_red(LED_RED);
timmey9 18:b17ddeeb1c09 138 DigitalOut led_green(LED_GREEN);
timmey9 18:b17ddeeb1c09 139 DigitalOut led_blue(LED_BLUE);
timmey9 17:2f978f823020 140
timmey9 16:c3f922f61b8f 141 int main() {
timmey9 18:b17ddeeb1c09 142 led_red = 1;
timmey9 18:b17ddeeb1c09 143 led_green = 1;
timmey9 18:b17ddeeb1c09 144 led_blue = 1;
timmey9 18:b17ddeeb1c09 145 pc.baud(230400);
timmey9 18:b17ddeeb1c09 146 pc.printf("Starting Client\r\n");
timmey9 17:2f978f823020 147 EthernetInterface interface;
timmey9 17:2f978f823020 148 interface.init();
timmey9 17:2f978f823020 149 interface.connect();
timmey9 18:b17ddeeb1c09 150 pc.printf("IP Address is %s\n\r", interface.getIPAddress());
timmey9 17:2f978f823020 151
timmey9 17:2f978f823020 152 int result;
timmey9 17:2f978f823020 153
timmey9 17:2f978f823020 154 network::tcp::Socket socket;
timmey9 17:2f978f823020 155 network::Buffer buffer(256);
timmey9 17:2f978f823020 156 std::string request("GET /media/uploads/donatien/hello.txt HTTP/1.1\r\nHost: %s\r\n\r\n");
timmey9 16:c3f922f61b8f 157
timmey9 17:2f978f823020 158 if (socket.open() < 0) {
timmey9 18:b17ddeeb1c09 159 pc.printf("Failed to open TCP Socket\n\r");
timmey9 17:2f978f823020 160 return -1;
timmey9 17:2f978f823020 161 }
timmey9 16:c3f922f61b8f 162
timmey9 17:2f978f823020 163 if (socket.connect("mbed.org", 80) < 0) {
timmey9 18:b17ddeeb1c09 164 pc.printf("Failed to connect with mbed.org\n\r");
timmey9 17:2f978f823020 165 return -1;
timmey9 17:2f978f823020 166 }
timmey9 16:c3f922f61b8f 167
timmey9 17:2f978f823020 168 if (socket.write((void *)request.data(), request.size()) < 0) {
timmey9 18:b17ddeeb1c09 169 pc.printf("Failed to write HTTP request\n\r");
timmey9 17:2f978f823020 170 return -1;
timmey9 17:2f978f823020 171 }
timmey9 17:2f978f823020 172
timmey9 17:2f978f823020 173 do
timmey9 16:c3f922f61b8f 174 {
timmey9 17:2f978f823020 175 result = socket.read(buffer);
timmey9 18:b17ddeeb1c09 176 pc.printf("Received %d bytes:\n\r%s\n\r", result, (char *)buffer.data(0));
timmey9 17:2f978f823020 177 } while(result > 0);
timmey9 16:c3f922f61b8f 178
timmey9 17:2f978f823020 179 socket.close();
timmey9 17:2f978f823020 180 return 0;
timmey9 17:2f978f823020 181 }
timmey9 16:c3f922f61b8f 182
timmey9 16:c3f922f61b8f 183 #endif