ok

Dependencies:   EthernetInterfaceAA mbed-rtos mbed

Committer:
avnisha
Date:
Thu Mar 27 20:21:51 2014 +0000
Revision:
0:28aa4f51f1e2
ok

Who changed what in which revision?

UserRevisionLine numberNew contents of line
avnisha 0:28aa4f51f1e2 1
avnisha 0:28aa4f51f1e2 2 #include "mbed.h"
avnisha 0:28aa4f51f1e2 3 #include "EthernetInterface.h"
avnisha 0:28aa4f51f1e2 4 #include "Socket.h"
avnisha 0:28aa4f51f1e2 5 #include "TCPSocketServer.h"
avnisha 0:28aa4f51f1e2 6 #include "TCPSocketConnection.h"
avnisha 0:28aa4f51f1e2 7
avnisha 0:28aa4f51f1e2 8 DigitalOut myled(LED1);
avnisha 0:28aa4f51f1e2 9 Serial tty_pc(USBTX, USBRX);
avnisha 0:28aa4f51f1e2 10
avnisha 0:28aa4f51f1e2 11 void eth_main(const void *context)
avnisha 0:28aa4f51f1e2 12 {
avnisha 0:28aa4f51f1e2 13 puts("Starting " __FILE__ " " __DATE__ " " __TIME__);
avnisha 0:28aa4f51f1e2 14
avnisha 0:28aa4f51f1e2 15 Ethernet eth;
avnisha 0:28aa4f51f1e2 16 eth.set_link(eth.AutoNegotiate);
avnisha 0:28aa4f51f1e2 17
avnisha 0:28aa4f51f1e2 18 EthernetInterface ethif;
avnisha 0:28aa4f51f1e2 19 ethif.init();
avnisha 0:28aa4f51f1e2 20 ethif.connect();
avnisha 0:28aa4f51f1e2 21
avnisha 0:28aa4f51f1e2 22 printf("IP %s\n", ethif.getIPAddress());
avnisha 0:28aa4f51f1e2 23
avnisha 0:28aa4f51f1e2 24 TCPSocketServer server;
avnisha 0:28aa4f51f1e2 25 TCPSocketConnection sock;
avnisha 0:28aa4f51f1e2 26 bool active = false;
avnisha 0:28aa4f51f1e2 27 unsigned short port = 8000;
avnisha 0:28aa4f51f1e2 28
avnisha 0:28aa4f51f1e2 29 server.bind(port);
avnisha 0:28aa4f51f1e2 30 server.listen();
avnisha 0:28aa4f51f1e2 31
avnisha 0:28aa4f51f1e2 32 server.set_blocking(false, 500); // SET NON-BLOCKING
avnisha 0:28aa4f51f1e2 33
avnisha 0:28aa4f51f1e2 34 printf("listening at %s:%hu\n", ethif.getIPAddress(), port);
avnisha 0:28aa4f51f1e2 35
avnisha 0:28aa4f51f1e2 36 while(true)
avnisha 0:28aa4f51f1e2 37 {
avnisha 0:28aa4f51f1e2 38 myled = eth.link();
avnisha 0:28aa4f51f1e2 39
avnisha 0:28aa4f51f1e2 40 if (active)
avnisha 0:28aa4f51f1e2 41 {
avnisha 0:28aa4f51f1e2 42
avnisha 0:28aa4f51f1e2 43 #ifdef OLD
avnisha 0:28aa4f51f1e2 44 char c;
avnisha 0:28aa4f51f1e2 45 if (sock.receive(&c, 1) <= 0) // NON-BLOCKING (!?) RECEIVE TO CHECK IF SOCKET ACTIVE
avnisha 0:28aa4f51f1e2 46 Thread::wait(500);
avnisha 0:28aa4f51f1e2 47 #endif
avnisha 0:28aa4f51f1e2 48 if (!sock.is_connected())
avnisha 0:28aa4f51f1e2 49 {
avnisha 0:28aa4f51f1e2 50 puts("connection closed");
avnisha 0:28aa4f51f1e2 51 sock.close(true);
avnisha 0:28aa4f51f1e2 52 active = false;
avnisha 0:28aa4f51f1e2 53 server.bind(port);
avnisha 0:28aa4f51f1e2 54 server.listen();
avnisha 0:28aa4f51f1e2 55 printf("listening at %s:%hd\n", ethif.getIPAddress(), port);
avnisha 0:28aa4f51f1e2 56 }
avnisha 0:28aa4f51f1e2 57 }
avnisha 0:28aa4f51f1e2 58 else
avnisha 0:28aa4f51f1e2 59 {
avnisha 0:28aa4f51f1e2 60 if (server.accept(sock) == 0)
avnisha 0:28aa4f51f1e2 61 {
avnisha 0:28aa4f51f1e2 62 active = true;
avnisha 0:28aa4f51f1e2 63 server.close();
avnisha 0:28aa4f51f1e2 64 puts("connection established");
avnisha 0:28aa4f51f1e2 65 }
avnisha 0:28aa4f51f1e2 66 }
avnisha 0:28aa4f51f1e2 67 }
avnisha 0:28aa4f51f1e2 68 }
avnisha 0:28aa4f51f1e2 69
avnisha 0:28aa4f51f1e2 70 int main()
avnisha 0:28aa4f51f1e2 71 {
avnisha 0:28aa4f51f1e2 72 Thread eth_thread(eth_main, 0);
avnisha 0:28aa4f51f1e2 73
avnisha 0:28aa4f51f1e2 74 while (1)
avnisha 0:28aa4f51f1e2 75 {
avnisha 0:28aa4f51f1e2 76 // forever
avnisha 0:28aa4f51f1e2 77 }
avnisha 0:28aa4f51f1e2 78 }