Dependencies:   EthernetNetIf mbed

Revision:
0:fa3fb9be66e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Feb 15 21:59:52 2012 +0000
@@ -0,0 +1,275 @@
+#include "mbed.h"
+#include "EthernetNetIf.h"
+#include "TCPSocket.h"
+DigitalOut led1(LED1, "led1");
+DigitalOut led2(LED2, "led2");
+DigitalOut led3(LED3, "led3");
+DigitalOut led4(LED4, "led4");
+AnalogIn ana_x(p19, "ana_x");
+AnalogIn ana_y(p20, "ana_y");
+DigitalIn init(p5);
+DigitalIn garbage(p6);
+DigitalIn closesock(p7);
+EthernetNetIf eth(
+  IpAddr(192,168,0,16), //IP Address
+  IpAddr(255,255,255,0), //Network Mask
+  IpAddr(192,168,0,1), //Gateway
+  IpAddr(192,168,0,1)  //DNS
+);
+
+
+// == stability vars
+Ticker routine;
+
+int base_x_0 = 50;
+int base_y_0 = 50;
+int base_x_1 = 50;
+int base_y_1 = 50;
+int base_x_2 = 50;
+int base_y_2 = 50;
+int base_x_3 = 50;
+int base_y_3 = 50;
+
+int motor_0 = 50;
+int motor_1 = 50;
+int motor_2 = 50;
+int motor_3 = 50;
+
+int a_motor_0 = motor_0;
+int a_motor_1 = motor_1;
+int a_motor_2 = motor_2;
+int a_motor_3 = motor_3;
+
+int x = 50;
+int y = 50;
+
+// == end
+
+int go = 0;
+
+#define TCP_LISTENING_PORT 1337
+
+TCPSocket ListeningSock; //Listener
+TCPSocket* pConnectedSock; // for ConnectedSock
+Host client; 
+TCPSocketErr err;
+char data[128];
+
+void sender(const char*);
+void interrupt();
+void onConnectedTCPSocketEvent( TCPSocketEvent );
+void onListeningTCPSocketEvent( TCPSocketEvent );
+
+int main() {
+
+    EthernetErr ethErr = eth.setup();
+      if(ethErr)
+      {
+        led3 = 1;
+        return -1;
+      }
+    // Set the callbacks for Listening
+    ListeningSock.setOnEvent(&onListeningTCPSocketEvent); 
+    // bind and listen on TCP
+    err=ListeningSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)); // listen on own ipaddres, port 1337
+    if(err)
+    {
+    //Deal with that error...
+        led3 = 1;
+    }
+    err=ListeningSock.listen(); // Starts listening
+    if(err)
+    {
+         led3 = 1;
+    }
+    routine.attach(&interrupt, 1);
+    Timer timer;
+    timer.start();
+    while(true)
+    {
+        Net::poll(); //poll TCPstack
+        while(init) {
+            if(!init){
+                sender("220 Connected\n");
+                go=1;
+                break;
+                
+            }
+        }
+        while(garbage) {
+            if(!garbage){
+                sender("RAndomstuff\n");
+                break;
+            }
+        }
+        while(closesock) {
+            if(!closesock){
+                pConnectedSock->close();
+                led1=0;
+                break;
+            }
+        }
+        if(go){
+            char buffer [16];
+            sprintf (buffer, "x: %d\n", x);
+            sender(buffer);
+            sprintf (buffer, "y: %d\n", y);
+            sender(buffer);
+            sprintf (buffer, "motor_0: %d\n", motor_0);
+            sender(buffer);
+            sprintf (buffer, "motor_1: %d\n", motor_1);
+            sender(buffer);
+            sprintf (buffer, "motor_2: %d\n", motor_2);
+            sender(buffer);
+            sprintf (buffer, "motor_3: %d\n", motor_3);
+            sender(buffer);
+        }
+        if(timer.read() > 0.2) 
+        {
+            led4=!led4; //Status light toggle
+            timer.reset();
+        }
+  }
+}
+
+void sender( const char* data ){
+    int len = strlen(data);
+    pConnectedSock->send(data, len);
+}
+
+
+void interrupt() 
+{
+    x = ana_x.read()*100;
+    y = ana_y.read()*100;
+
+    a_motor_0 = a_motor_0-((base_x_0-x)/2)+((base_x_0-y)/2);
+    if(a_motor_0>99){
+        motor_0 = 100;}
+    else if(a_motor_0 < 1){
+        motor_0 = 0;}
+    else{
+        motor_0 = a_motor_0;}
+    a_motor_1 = a_motor_1-((base_x_1-x)/2)-((base_x_1-y)/2);
+    if(a_motor_1>99){
+        motor_1 = 100;}
+    else if(a_motor_1 < 1){
+        motor_1 = 0;}
+    else{
+        motor_1 = a_motor_1;}
+    a_motor_2 = a_motor_2+((base_x_2-x)/2)-((base_x_2-y)/2);
+    if(a_motor_2>99){
+        motor_2 = 100;}
+    else if(a_motor_2 < 1){
+        motor_2 = 0;}
+    else{
+        motor_2 = a_motor_2;}
+    a_motor_3 = a_motor_3+((base_x_3-x)/2)+((base_x_3-y)/2);
+    if(a_motor_3>99){
+        motor_3 = 100;}
+    else if(a_motor_3 < 1){
+        motor_3 = 0;}
+    else{
+        motor_3 = a_motor_3;}
+}
+
+void onConnectedTCPSocketEvent(TCPSocketEvent e)
+{
+   switch(e)
+    {
+    case TCPSOCKET_CONNECTED:
+        led1 = 1;
+        break;
+    case TCPSOCKET_WRITEABLE:
+      //Can now write some data...
+        led1 = 1;
+        break;
+    case TCPSOCKET_READABLE:
+      //Can now read dome data...
+        led1 = 1;
+       // Read in any available data into the buffer
+       char buff[128];
+       while ( int len = pConnectedSock->recv(buff, 128) ) {
+       // And send straight back out again
+           
+           //pConnectedSock->send(buff, len);
+           //buff[len]=0; // make terminater
+           led2 != led2;
+           strcpy(data,buff); 
+       }
+       break;
+    case TCPSOCKET_CONTIMEOUT:
+        printf("TCP Socket Timeout\r\n");
+        break;
+    case TCPSOCKET_CONRST:
+        printf("TCP Socket CONRST\r\n");
+        break;
+    case TCPSOCKET_CONABRT:
+        printf("TCP Socket CONABRT\r\n");
+        break;
+    case TCPSOCKET_ERROR:
+        printf("TCP Socket Error\r\n");
+        break;
+    case TCPSOCKET_DISCONNECTED:
+    //Close socket...
+        printf("TCP Socket Disconnected\r\n");        
+        pConnectedSock->close();
+        led1=0;
+        break;
+    default:
+        printf("DEFAULT\r\n"); 
+      }
+}
+
+
+void onListeningTCPSocketEvent(TCPSocketEvent e)
+{
+    switch(e)
+    {
+    case TCPSOCKET_ACCEPT:
+        printf("Listening: TCP Socket Accepted\r\n");
+        // Accepts connection from client and gets connected socket.   
+        err=ListeningSock.accept(&client, &pConnectedSock);
+        if (err) {
+            led3 = 1;
+            return; //Error in accept, discard connection
+        }
+        // Setup the new socket events
+        pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent);
+        // We can find out from where the connection is coming by looking at the
+        // Host parameter of the accept() method
+        IpAddr clientIp = client.getIp();
+        printf("Listening: Incoming TCP connection from %d.%d.%d.%d\r\n", 
+           clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
+       break;
+    // the following cases will not happen
+    case TCPSOCKET_CONNECTED:
+        printf("Listening: TCP Socket Connected\r\n");
+        break;
+    case TCPSOCKET_WRITEABLE:
+        printf("Listening: TCP Socket Writable\r\n");
+        break;
+    case TCPSOCKET_READABLE:
+        printf("Listening: TCP Socket Readable\r\n");
+        break;
+    case TCPSOCKET_CONTIMEOUT:
+        printf("Listening: TCP Socket Timeout\r\n");
+        break;
+    case TCPSOCKET_CONRST:
+        printf("Listening: TCP Socket CONRST\r\n");
+        break;
+    case TCPSOCKET_CONABRT:
+        printf("Listening: TCP Socket CONABRT\r\n");
+        break;
+    case TCPSOCKET_ERROR:
+        led3 = 1;
+        break;
+    case TCPSOCKET_DISCONNECTED:
+    //Close socket...
+        printf("Listening: TCP Socket Disconnected\r\n");        
+        ListeningSock.close();
+        break;
+    default:
+        printf("DEFAULT\r\n"); 
+     };
+}