SimpleSocket 1.0 examples
Dependencies: EthernetNetIf SimpleSocket 1.0 mbed
main.cpp@0:c41b68a4a296, 2011-08-16 (annotated)
- Committer:
- yamaguch
- Date:
- Tue Aug 16 02:02:54 2011 +0000
- Revision:
- 0:c41b68a4a296
- Child:
- 1:7350a2598a80
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yamaguch |
0:c41b68a4a296 | 1 | #include "mbed.h" |
yamaguch |
0:c41b68a4a296 | 2 | #include "EthernetNetIf.h" |
yamaguch |
0:c41b68a4a296 | 3 | #include "TCPSocket.h" |
yamaguch |
0:c41b68a4a296 | 4 | |
yamaguch |
0:c41b68a4a296 | 5 | EthernetNetIf eth; |
yamaguch |
0:c41b68a4a296 | 6 | DigitalOut led1(LED1); |
yamaguch |
0:c41b68a4a296 | 7 | |
yamaguch |
0:c41b68a4a296 | 8 | |
yamaguch |
0:c41b68a4a296 | 9 | TCPSocket tcp; //The listening port where requests are queued |
yamaguch |
0:c41b68a4a296 | 10 | TCPSocket* link; //The port where accepted requests can communicate |
yamaguch |
0:c41b68a4a296 | 11 | Host local(IpAddr(), 1234); // mbed |
yamaguch |
0:c41b68a4a296 | 12 | Host client; |
yamaguch |
0:c41b68a4a296 | 13 | |
yamaguch |
0:c41b68a4a296 | 14 | TCPSocketErr accErr; |
yamaguch |
0:c41b68a4a296 | 15 | |
yamaguch |
0:c41b68a4a296 | 16 | void onLinkSocketEvent(TCPSocketEvent e) { |
yamaguch |
0:c41b68a4a296 | 17 | switch (e) { |
yamaguch |
0:c41b68a4a296 | 18 | case TCPSOCKET_CONNECTED: |
yamaguch |
0:c41b68a4a296 | 19 | printf("TCP Socket Connected\r\n"); |
yamaguch |
0:c41b68a4a296 | 20 | break; |
yamaguch |
0:c41b68a4a296 | 21 | case TCPSOCKET_WRITEABLE: |
yamaguch |
0:c41b68a4a296 | 22 | //Can now write some data... |
yamaguch |
0:c41b68a4a296 | 23 | printf("TCP Socket Writable\r\n"); |
yamaguch |
0:c41b68a4a296 | 24 | break; |
yamaguch |
0:c41b68a4a296 | 25 | case TCPSOCKET_READABLE: |
yamaguch |
0:c41b68a4a296 | 26 | //Can now read dome data... |
yamaguch |
0:c41b68a4a296 | 27 | printf("TCP Socket Readable\r\n"); |
yamaguch |
0:c41b68a4a296 | 28 | // Read in any available data into the buffer |
yamaguch |
0:c41b68a4a296 | 29 | char buff[128]; |
yamaguch |
0:c41b68a4a296 | 30 | while (int len = link->recv(buff, 128)) { |
yamaguch |
0:c41b68a4a296 | 31 | // And send straight back out again |
yamaguch |
0:c41b68a4a296 | 32 | link->send(buff, len); |
yamaguch |
0:c41b68a4a296 | 33 | buff[len]=0; // make terminater |
yamaguch |
0:c41b68a4a296 | 34 | printf("Received&Wrote:%s\r\n",buff); |
yamaguch |
0:c41b68a4a296 | 35 | } |
yamaguch |
0:c41b68a4a296 | 36 | break; |
yamaguch |
0:c41b68a4a296 | 37 | case TCPSOCKET_CONTIMEOUT: |
yamaguch |
0:c41b68a4a296 | 38 | printf("TCP Socket Timeout\r\n"); |
yamaguch |
0:c41b68a4a296 | 39 | break; |
yamaguch |
0:c41b68a4a296 | 40 | case TCPSOCKET_CONRST: |
yamaguch |
0:c41b68a4a296 | 41 | printf("TCP Socket CONRST\r\n"); |
yamaguch |
0:c41b68a4a296 | 42 | break; |
yamaguch |
0:c41b68a4a296 | 43 | case TCPSOCKET_CONABRT: |
yamaguch |
0:c41b68a4a296 | 44 | printf("TCP Socket CONABRT\r\n"); |
yamaguch |
0:c41b68a4a296 | 45 | break; |
yamaguch |
0:c41b68a4a296 | 46 | case TCPSOCKET_ERROR: |
yamaguch |
0:c41b68a4a296 | 47 | printf("TCP Socket Error\r\n"); |
yamaguch |
0:c41b68a4a296 | 48 | break; |
yamaguch |
0:c41b68a4a296 | 49 | case TCPSOCKET_DISCONNECTED: |
yamaguch |
0:c41b68a4a296 | 50 | //Close socket... |
yamaguch |
0:c41b68a4a296 | 51 | printf("TCP Socket Disconnected\r\n"); |
yamaguch |
0:c41b68a4a296 | 52 | link->close(); |
yamaguch |
0:c41b68a4a296 | 53 | break; |
yamaguch |
0:c41b68a4a296 | 54 | default: |
yamaguch |
0:c41b68a4a296 | 55 | printf("DEFAULT\r\n"); |
yamaguch |
0:c41b68a4a296 | 56 | } |
yamaguch |
0:c41b68a4a296 | 57 | } |
yamaguch |
0:c41b68a4a296 | 58 | |
yamaguch |
0:c41b68a4a296 | 59 | void onTCPSocketEvent(TCPSocketEvent e) { |
yamaguch |
0:c41b68a4a296 | 60 | IpAddr clientIp; |
yamaguch |
0:c41b68a4a296 | 61 | |
yamaguch |
0:c41b68a4a296 | 62 | switch (e) { |
yamaguch |
0:c41b68a4a296 | 63 | case TCPSOCKET_CONNECTED: |
yamaguch |
0:c41b68a4a296 | 64 | printf("Connected\n"); |
yamaguch |
0:c41b68a4a296 | 65 | break; |
yamaguch |
0:c41b68a4a296 | 66 | |
yamaguch |
0:c41b68a4a296 | 67 | case TCPSOCKET_ACCEPT: |
yamaguch |
0:c41b68a4a296 | 68 | accErr = tcp.accept(&client,&link); |
yamaguch |
0:c41b68a4a296 | 69 | switch (accErr) { |
yamaguch |
0:c41b68a4a296 | 70 | case TCPSOCKET_SETUP: |
yamaguch |
0:c41b68a4a296 | 71 | printf("Err:Setup\n"); |
yamaguch |
0:c41b68a4a296 | 72 | break; //TCPSocket not properly configured. |
yamaguch |
0:c41b68a4a296 | 73 | case TCPSOCKET_TIMEOUT: |
yamaguch |
0:c41b68a4a296 | 74 | printf("Err:Timeout\n"); |
yamaguch |
0:c41b68a4a296 | 75 | break; //Connection timed out. |
yamaguch |
0:c41b68a4a296 | 76 | case TCPSOCKET_IF: |
yamaguch |
0:c41b68a4a296 | 77 | printf("Err:Interface\n"); |
yamaguch |
0:c41b68a4a296 | 78 | break; //Interface has problems, does not exist or is not initialized. |
yamaguch |
0:c41b68a4a296 | 79 | case TCPSOCKET_MEM: |
yamaguch |
0:c41b68a4a296 | 80 | printf("Err:Memory\n"); |
yamaguch |
0:c41b68a4a296 | 81 | break; //Not enough mem. |
yamaguch |
0:c41b68a4a296 | 82 | case TCPSOCKET_INUSE: |
yamaguch |
0:c41b68a4a296 | 83 | printf("Err:In use\n"); |
yamaguch |
0:c41b68a4a296 | 84 | break; //Interface / Port is in use. |
yamaguch |
0:c41b68a4a296 | 85 | case TCPSOCKET_EMPTY: |
yamaguch |
0:c41b68a4a296 | 86 | printf("Err:Empty\n"); |
yamaguch |
0:c41b68a4a296 | 87 | break; //Connections queue is empty. |
yamaguch |
0:c41b68a4a296 | 88 | case TCPSOCKET_RST: |
yamaguch |
0:c41b68a4a296 | 89 | printf("Err:Reset\n"); |
yamaguch |
0:c41b68a4a296 | 90 | break; //Connection was reset by remote host. |
yamaguch |
0:c41b68a4a296 | 91 | case TCPSOCKET_OK: |
yamaguch |
0:c41b68a4a296 | 92 | printf("Accepted: "); |
yamaguch |
0:c41b68a4a296 | 93 | break; //Success. |
yamaguch |
0:c41b68a4a296 | 94 | } |
yamaguch |
0:c41b68a4a296 | 95 | |
yamaguch |
0:c41b68a4a296 | 96 | link->setOnEvent(&onLinkSocketEvent); |
yamaguch |
0:c41b68a4a296 | 97 | clientIp = client.getIp(); |
yamaguch |
0:c41b68a4a296 | 98 | printf("Incoming TCP connection from %d.%d.%d.%d\r\n", |
yamaguch |
0:c41b68a4a296 | 99 | clientIp[0], clientIp[1], clientIp[2], clientIp[3]); |
yamaguch |
0:c41b68a4a296 | 100 | break; |
yamaguch |
0:c41b68a4a296 | 101 | case TCPSOCKET_READABLE: |
yamaguch |
0:c41b68a4a296 | 102 | printf("Readable\n"); |
yamaguch |
0:c41b68a4a296 | 103 | break; |
yamaguch |
0:c41b68a4a296 | 104 | |
yamaguch |
0:c41b68a4a296 | 105 | case TCPSOCKET_WRITEABLE: |
yamaguch |
0:c41b68a4a296 | 106 | printf("Writeable\n"); |
yamaguch |
0:c41b68a4a296 | 107 | break; |
yamaguch |
0:c41b68a4a296 | 108 | |
yamaguch |
0:c41b68a4a296 | 109 | case TCPSOCKET_CONTIMEOUT: |
yamaguch |
0:c41b68a4a296 | 110 | printf("Timeout\n"); |
yamaguch |
0:c41b68a4a296 | 111 | break; |
yamaguch |
0:c41b68a4a296 | 112 | |
yamaguch |
0:c41b68a4a296 | 113 | case TCPSOCKET_CONRST: |
yamaguch |
0:c41b68a4a296 | 114 | printf("Reset\n"); |
yamaguch |
0:c41b68a4a296 | 115 | break; |
yamaguch |
0:c41b68a4a296 | 116 | case TCPSOCKET_CONABRT: |
yamaguch |
0:c41b68a4a296 | 117 | printf("Aborted\n"); |
yamaguch |
0:c41b68a4a296 | 118 | break; |
yamaguch |
0:c41b68a4a296 | 119 | |
yamaguch |
0:c41b68a4a296 | 120 | case TCPSOCKET_ERROR: |
yamaguch |
0:c41b68a4a296 | 121 | printf("Error\n"); |
yamaguch |
0:c41b68a4a296 | 122 | break; |
yamaguch |
0:c41b68a4a296 | 123 | |
yamaguch |
0:c41b68a4a296 | 124 | case TCPSOCKET_DISCONNECTED: |
yamaguch |
0:c41b68a4a296 | 125 | printf("Disconnected\n"); |
yamaguch |
0:c41b68a4a296 | 126 | tcp.close(); |
yamaguch |
0:c41b68a4a296 | 127 | break; |
yamaguch |
0:c41b68a4a296 | 128 | } |
yamaguch |
0:c41b68a4a296 | 129 | } |
yamaguch |
0:c41b68a4a296 | 130 | |
yamaguch |
0:c41b68a4a296 | 131 | int main() { |
yamaguch |
0:c41b68a4a296 | 132 | //********Basic setup******** |
yamaguch |
0:c41b68a4a296 | 133 | printf("Welcome to wireFUSE\n"); |
yamaguch |
0:c41b68a4a296 | 134 | printf("Setting up...\n"); |
yamaguch |
0:c41b68a4a296 | 135 | EthernetErr ethErr = eth.setup(); |
yamaguch |
0:c41b68a4a296 | 136 | if (ethErr) { |
yamaguch |
0:c41b68a4a296 | 137 | printf("Error %d in setup.\n", ethErr); |
yamaguch |
0:c41b68a4a296 | 138 | return -1; |
yamaguch |
0:c41b68a4a296 | 139 | } |
yamaguch |
0:c41b68a4a296 | 140 | printf("Setup OK\n"); |
yamaguch |
0:c41b68a4a296 | 141 | //****End of basic setup***** |
yamaguch |
0:c41b68a4a296 | 142 | |
yamaguch |
0:c41b68a4a296 | 143 | tcp.setOnEvent(&onTCPSocketEvent); //Generate method to deal with requests |
yamaguch |
0:c41b68a4a296 | 144 | |
yamaguch |
0:c41b68a4a296 | 145 | //Bind to local port |
yamaguch |
0:c41b68a4a296 | 146 | printf("Init bind..\n"); |
yamaguch |
0:c41b68a4a296 | 147 | TCPSocketErr bindErr = tcp.bind(local); |
yamaguch |
0:c41b68a4a296 | 148 | switch (bindErr) { |
yamaguch |
0:c41b68a4a296 | 149 | case TCPSOCKET_SETUP: |
yamaguch |
0:c41b68a4a296 | 150 | printf("Err:Setup\n"); |
yamaguch |
0:c41b68a4a296 | 151 | break; //TCPSocket not properly configured. |
yamaguch |
0:c41b68a4a296 | 152 | case TCPSOCKET_TIMEOUT: |
yamaguch |
0:c41b68a4a296 | 153 | printf("Err:Timeout\n"); |
yamaguch |
0:c41b68a4a296 | 154 | break; //Connection timed out. |
yamaguch |
0:c41b68a4a296 | 155 | case TCPSOCKET_IF: |
yamaguch |
0:c41b68a4a296 | 156 | printf("Err:Interface\n"); |
yamaguch |
0:c41b68a4a296 | 157 | break; //Interface has problems, does not exist or is not initialized. |
yamaguch |
0:c41b68a4a296 | 158 | case TCPSOCKET_MEM: |
yamaguch |
0:c41b68a4a296 | 159 | printf("Err:Memory\n"); |
yamaguch |
0:c41b68a4a296 | 160 | break; //Not enough mem. |
yamaguch |
0:c41b68a4a296 | 161 | case TCPSOCKET_INUSE: |
yamaguch |
0:c41b68a4a296 | 162 | printf("Err:In use\n"); |
yamaguch |
0:c41b68a4a296 | 163 | break; //Interface / Port is in use. |
yamaguch |
0:c41b68a4a296 | 164 | case TCPSOCKET_EMPTY: |
yamaguch |
0:c41b68a4a296 | 165 | printf("Err:Empty\n"); |
yamaguch |
0:c41b68a4a296 | 166 | break; //Connections queue is empty. |
yamaguch |
0:c41b68a4a296 | 167 | case TCPSOCKET_RST: |
yamaguch |
0:c41b68a4a296 | 168 | printf("Err:Reset\n"); |
yamaguch |
0:c41b68a4a296 | 169 | break; //Connection was reset by remote host. |
yamaguch |
0:c41b68a4a296 | 170 | case TCPSOCKET_OK: |
yamaguch |
0:c41b68a4a296 | 171 | printf("Bound to port\n"); |
yamaguch |
0:c41b68a4a296 | 172 | break; //Success. |
yamaguch |
0:c41b68a4a296 | 173 | } |
yamaguch |
0:c41b68a4a296 | 174 | |
yamaguch |
0:c41b68a4a296 | 175 | //Listen to local port |
yamaguch |
0:c41b68a4a296 | 176 | printf("Init listen..\n"); |
yamaguch |
0:c41b68a4a296 | 177 | TCPSocketErr listenErr = tcp.listen(); |
yamaguch |
0:c41b68a4a296 | 178 | switch (listenErr) { |
yamaguch |
0:c41b68a4a296 | 179 | case TCPSOCKET_SETUP: |
yamaguch |
0:c41b68a4a296 | 180 | printf("Err:Setup\n"); |
yamaguch |
0:c41b68a4a296 | 181 | break; //TCPSocket not properly configured. |
yamaguch |
0:c41b68a4a296 | 182 | case TCPSOCKET_TIMEOUT: |
yamaguch |
0:c41b68a4a296 | 183 | printf("Err:Timeout\n"); |
yamaguch |
0:c41b68a4a296 | 184 | break; //Connection timed out. |
yamaguch |
0:c41b68a4a296 | 185 | case TCPSOCKET_IF: |
yamaguch |
0:c41b68a4a296 | 186 | printf("Err:Interface\n"); |
yamaguch |
0:c41b68a4a296 | 187 | break; //Interface has problems, does not exist or is not initialized. |
yamaguch |
0:c41b68a4a296 | 188 | case TCPSOCKET_MEM: |
yamaguch |
0:c41b68a4a296 | 189 | printf("Err:Memory\n"); |
yamaguch |
0:c41b68a4a296 | 190 | break; //Not enough mem. |
yamaguch |
0:c41b68a4a296 | 191 | case TCPSOCKET_INUSE: |
yamaguch |
0:c41b68a4a296 | 192 | printf("Err:In use\n"); |
yamaguch |
0:c41b68a4a296 | 193 | break; //Interface / Port is in use. |
yamaguch |
0:c41b68a4a296 | 194 | case TCPSOCKET_EMPTY: |
yamaguch |
0:c41b68a4a296 | 195 | printf("Err:Empty\n"); |
yamaguch |
0:c41b68a4a296 | 196 | break; //Connections queue is empty. |
yamaguch |
0:c41b68a4a296 | 197 | case TCPSOCKET_RST: |
yamaguch |
0:c41b68a4a296 | 198 | printf("Err:Reset\n"); |
yamaguch |
0:c41b68a4a296 | 199 | break; //Connection was reset by remote host. |
yamaguch |
0:c41b68a4a296 | 200 | case TCPSOCKET_OK: |
yamaguch |
0:c41b68a4a296 | 201 | printf("Listening\n"); |
yamaguch |
0:c41b68a4a296 | 202 | break; //Success. |
yamaguch |
0:c41b68a4a296 | 203 | } |
yamaguch |
0:c41b68a4a296 | 204 | Timer tmr; |
yamaguch |
0:c41b68a4a296 | 205 | tmr.start(); |
yamaguch |
0:c41b68a4a296 | 206 | while (1) { |
yamaguch |
0:c41b68a4a296 | 207 | Net::poll(); |
yamaguch |
0:c41b68a4a296 | 208 | if (tmr.read() > 10) { |
yamaguch |
0:c41b68a4a296 | 209 | tmr.reset(); |
yamaguch |
0:c41b68a4a296 | 210 | led1 = !led1; //Show that we are alive |
yamaguch |
0:c41b68a4a296 | 211 | //Wait for a connection request |
yamaguch |
0:c41b68a4a296 | 212 | printf("waiting for client on port 1234\n"); |
yamaguch |
0:c41b68a4a296 | 213 | } |
yamaguch |
0:c41b68a4a296 | 214 | } |
yamaguch |
0:c41b68a4a296 | 215 | } |