SimpleSocket 1.0 examples
Dependencies: EthernetNetIf SimpleSocket 1.0 mbed
Diff: main.cpp
- Revision:
- 0:c41b68a4a296
- Child:
- 1:7350a2598a80
diff -r 000000000000 -r c41b68a4a296 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Aug 16 02:02:54 2011 +0000 @@ -0,0 +1,215 @@ +#include "mbed.h" +#include "EthernetNetIf.h" +#include "TCPSocket.h" + +EthernetNetIf eth; +DigitalOut led1(LED1); + + +TCPSocket tcp; //The listening port where requests are queued +TCPSocket* link; //The port where accepted requests can communicate +Host local(IpAddr(), 1234); // mbed +Host client; + +TCPSocketErr accErr; + +void onLinkSocketEvent(TCPSocketEvent e) { + switch (e) { + case TCPSOCKET_CONNECTED: + printf("TCP Socket Connected\r\n"); + break; + case TCPSOCKET_WRITEABLE: + //Can now write some data... + printf("TCP Socket Writable\r\n"); + break; + case TCPSOCKET_READABLE: + //Can now read dome data... + printf("TCP Socket Readable\r\n"); + // Read in any available data into the buffer + char buff[128]; + while (int len = link->recv(buff, 128)) { + // And send straight back out again + link->send(buff, len); + buff[len]=0; // make terminater + printf("Received&Wrote:%s\r\n",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"); + link->close(); + break; + default: + printf("DEFAULT\r\n"); + } +} + +void onTCPSocketEvent(TCPSocketEvent e) { + IpAddr clientIp; + + switch (e) { + case TCPSOCKET_CONNECTED: + printf("Connected\n"); + break; + + case TCPSOCKET_ACCEPT: + accErr = tcp.accept(&client,&link); + switch (accErr) { + case TCPSOCKET_SETUP: + printf("Err:Setup\n"); + break; //TCPSocket not properly configured. + case TCPSOCKET_TIMEOUT: + printf("Err:Timeout\n"); + break; //Connection timed out. + case TCPSOCKET_IF: + printf("Err:Interface\n"); + break; //Interface has problems, does not exist or is not initialized. + case TCPSOCKET_MEM: + printf("Err:Memory\n"); + break; //Not enough mem. + case TCPSOCKET_INUSE: + printf("Err:In use\n"); + break; //Interface / Port is in use. + case TCPSOCKET_EMPTY: + printf("Err:Empty\n"); + break; //Connections queue is empty. + case TCPSOCKET_RST: + printf("Err:Reset\n"); + break; //Connection was reset by remote host. + case TCPSOCKET_OK: + printf("Accepted: "); + break; //Success. + } + + link->setOnEvent(&onLinkSocketEvent); + clientIp = client.getIp(); + printf("Incoming TCP connection from %d.%d.%d.%d\r\n", + clientIp[0], clientIp[1], clientIp[2], clientIp[3]); + break; + case TCPSOCKET_READABLE: + printf("Readable\n"); + break; + + case TCPSOCKET_WRITEABLE: + printf("Writeable\n"); + break; + + case TCPSOCKET_CONTIMEOUT: + printf("Timeout\n"); + break; + + case TCPSOCKET_CONRST: + printf("Reset\n"); + break; + case TCPSOCKET_CONABRT: + printf("Aborted\n"); + break; + + case TCPSOCKET_ERROR: + printf("Error\n"); + break; + + case TCPSOCKET_DISCONNECTED: + printf("Disconnected\n"); + tcp.close(); + break; + } +} + +int main() { + //********Basic setup******** + printf("Welcome to wireFUSE\n"); + printf("Setting up...\n"); + EthernetErr ethErr = eth.setup(); + if (ethErr) { + printf("Error %d in setup.\n", ethErr); + return -1; + } + printf("Setup OK\n"); + //****End of basic setup***** + + tcp.setOnEvent(&onTCPSocketEvent); //Generate method to deal with requests + + //Bind to local port + printf("Init bind..\n"); + TCPSocketErr bindErr = tcp.bind(local); + switch (bindErr) { + case TCPSOCKET_SETUP: + printf("Err:Setup\n"); + break; //TCPSocket not properly configured. + case TCPSOCKET_TIMEOUT: + printf("Err:Timeout\n"); + break; //Connection timed out. + case TCPSOCKET_IF: + printf("Err:Interface\n"); + break; //Interface has problems, does not exist or is not initialized. + case TCPSOCKET_MEM: + printf("Err:Memory\n"); + break; //Not enough mem. + case TCPSOCKET_INUSE: + printf("Err:In use\n"); + break; //Interface / Port is in use. + case TCPSOCKET_EMPTY: + printf("Err:Empty\n"); + break; //Connections queue is empty. + case TCPSOCKET_RST: + printf("Err:Reset\n"); + break; //Connection was reset by remote host. + case TCPSOCKET_OK: + printf("Bound to port\n"); + break; //Success. + } + + //Listen to local port + printf("Init listen..\n"); + TCPSocketErr listenErr = tcp.listen(); + switch (listenErr) { + case TCPSOCKET_SETUP: + printf("Err:Setup\n"); + break; //TCPSocket not properly configured. + case TCPSOCKET_TIMEOUT: + printf("Err:Timeout\n"); + break; //Connection timed out. + case TCPSOCKET_IF: + printf("Err:Interface\n"); + break; //Interface has problems, does not exist or is not initialized. + case TCPSOCKET_MEM: + printf("Err:Memory\n"); + break; //Not enough mem. + case TCPSOCKET_INUSE: + printf("Err:In use\n"); + break; //Interface / Port is in use. + case TCPSOCKET_EMPTY: + printf("Err:Empty\n"); + break; //Connections queue is empty. + case TCPSOCKET_RST: + printf("Err:Reset\n"); + break; //Connection was reset by remote host. + case TCPSOCKET_OK: + printf("Listening\n"); + break; //Success. + } + Timer tmr; + tmr.start(); + while (1) { + Net::poll(); + if (tmr.read() > 10) { + tmr.reset(); + led1 = !led1; //Show that we are alive + //Wait for a connection request + printf("waiting for client on port 1234\n"); + } + } +} \ No newline at end of file