Jared Baxter / Mbed 2 deprecated Impedance_Fast_Circuitry_print_V_I

Dependencies:   mbed-dsp mbed

Fork of Impedance_Fast_Circuitry by Jared Baxter

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