Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetNetIf TextLCD mbed
main.cpp@0:b75f48b4f752, 2010-10-10 (annotated)
- Committer:
- sunifu
- Date:
- Sun Oct 10 10:59:30 2010 +0000
- Revision:
- 0:b75f48b4f752
- Child:
- 1:cb49bd07d33d
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| sunifu | 0:b75f48b4f752 | 1 | #include "mbed.h" |
| sunifu | 0:b75f48b4f752 | 2 | #include "EthernetNetIf.h" |
| sunifu | 0:b75f48b4f752 | 3 | #include "TCPSocket.h" |
| sunifu | 0:b75f48b4f752 | 4 | |
| sunifu | 0:b75f48b4f752 | 5 | #define TCP_LISTENING_PORT 50505 |
| sunifu | 0:b75f48b4f752 | 6 | |
| sunifu | 0:b75f48b4f752 | 7 | BusOut myleds(LED1, LED2, LED3, LED4); |
| sunifu | 0:b75f48b4f752 | 8 | |
| sunifu | 0:b75f48b4f752 | 9 | void onTCPSocketEvent(TCPSocketEvent e) ; |
| sunifu | 0:b75f48b4f752 | 10 | void onConnectedTCPSocketEvent(TCPSocketEvent e) ; |
| sunifu | 0:b75f48b4f752 | 11 | |
| sunifu | 0:b75f48b4f752 | 12 | EthernetNetIf eth ; |
| sunifu | 0:b75f48b4f752 | 13 | TCPSocketErr tcpErr ; |
| sunifu | 0:b75f48b4f752 | 14 | TCPSocket tcpSock ; |
| sunifu | 0:b75f48b4f752 | 15 | TCPSocket* pConnectedSock ; |
| sunifu | 0:b75f48b4f752 | 16 | Host client ; |
| sunifu | 0:b75f48b4f752 | 17 | |
| sunifu | 0:b75f48b4f752 | 18 | int main() { |
| sunifu | 0:b75f48b4f752 | 19 | |
| sunifu | 0:b75f48b4f752 | 20 | printf("Setting up...\r\n"); |
| sunifu | 0:b75f48b4f752 | 21 | EthernetErr ethErr = eth.setup(); |
| sunifu | 0:b75f48b4f752 | 22 | if( ethErr != ETH_OK ) |
| sunifu | 0:b75f48b4f752 | 23 | { |
| sunifu | 0:b75f48b4f752 | 24 | printf("Error %d in setup.\r\n", ethErr); |
| sunifu | 0:b75f48b4f752 | 25 | return -1; |
| sunifu | 0:b75f48b4f752 | 26 | } |
| sunifu | 0:b75f48b4f752 | 27 | printf("Setup OK\r\n"); |
| sunifu | 0:b75f48b4f752 | 28 | |
| sunifu | 0:b75f48b4f752 | 29 | IpAddr ip = eth.getIp() ; |
| sunifu | 0:b75f48b4f752 | 30 | printf("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3]) ; |
| sunifu | 0:b75f48b4f752 | 31 | |
| sunifu | 0:b75f48b4f752 | 32 | tcpSock.setOnEvent(&onTCPSocketEvent) ; |
| sunifu | 0:b75f48b4f752 | 33 | |
| sunifu | 0:b75f48b4f752 | 34 | printf("Bindding...\r\n") ; |
| sunifu | 0:b75f48b4f752 | 35 | tcpErr = tcpSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)); |
| sunifu | 0:b75f48b4f752 | 36 | if ( tcpErr != ETH_OK ){ |
| sunifu | 0:b75f48b4f752 | 37 | printf("Bindding Error.\r\n") ; |
| sunifu | 0:b75f48b4f752 | 38 | return -1 ; |
| sunifu | 0:b75f48b4f752 | 39 | } |
| sunifu | 0:b75f48b4f752 | 40 | |
| sunifu | 0:b75f48b4f752 | 41 | printf("Listen...\r\n"); |
| sunifu | 0:b75f48b4f752 | 42 | tcpErr = tcpSock.listen() ; |
| sunifu | 0:b75f48b4f752 | 43 | if ( tcpErr != ETH_OK ){ |
| sunifu | 0:b75f48b4f752 | 44 | printf("Listen Error.\r\n") ; |
| sunifu | 0:b75f48b4f752 | 45 | return -1 ; |
| sunifu | 0:b75f48b4f752 | 46 | } |
| sunifu | 0:b75f48b4f752 | 47 | |
| sunifu | 0:b75f48b4f752 | 48 | while(1) { |
| sunifu | 0:b75f48b4f752 | 49 | Net::poll(); |
| sunifu | 0:b75f48b4f752 | 50 | } |
| sunifu | 0:b75f48b4f752 | 51 | } |
| sunifu | 0:b75f48b4f752 | 52 | |
| sunifu | 0:b75f48b4f752 | 53 | void onTCPSocketEvent(TCPSocketEvent e) |
| sunifu | 0:b75f48b4f752 | 54 | { |
| sunifu | 0:b75f48b4f752 | 55 | printf("---IN TCPSocketEvent ---\r\n"); |
| sunifu | 0:b75f48b4f752 | 56 | |
| sunifu | 0:b75f48b4f752 | 57 | if ( e == TCPSOCKET_ACCEPT ){ |
| sunifu | 0:b75f48b4f752 | 58 | printf("Listening: TCP Socket Accepted\r\n"); |
| sunifu | 0:b75f48b4f752 | 59 | tcpErr=tcpSock.accept(&client, &pConnectedSock); |
| sunifu | 0:b75f48b4f752 | 60 | |
| sunifu | 0:b75f48b4f752 | 61 | if ( tcpErr != TCPSOCKET_OK ) { |
| sunifu | 0:b75f48b4f752 | 62 | printf("onTcpSocketEvent Error \r\n"); |
| sunifu | 0:b75f48b4f752 | 63 | return; |
| sunifu | 0:b75f48b4f752 | 64 | } |
| sunifu | 0:b75f48b4f752 | 65 | pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent); |
| sunifu | 0:b75f48b4f752 | 66 | IpAddr clientIp = client.getIp(); |
| sunifu | 0:b75f48b4f752 | 67 | printf("Controler IP Address is [%d.%d.%d.%d].\r\n", |
| sunifu | 0:b75f48b4f752 | 68 | clientIp[0], clientIp[1], clientIp[2], clientIp[3]); |
| sunifu | 0:b75f48b4f752 | 69 | } |
| sunifu | 0:b75f48b4f752 | 70 | printf("--- OUT TCPSocketEvent ---\r\n\r\n") ; |
| sunifu | 0:b75f48b4f752 | 71 | } |
| sunifu | 0:b75f48b4f752 | 72 | |
| sunifu | 0:b75f48b4f752 | 73 | void onConnectedTCPSocketEvent(TCPSocketEvent e) |
| sunifu | 0:b75f48b4f752 | 74 | { |
| sunifu | 0:b75f48b4f752 | 75 | printf("--- IN ConnectEvent ---\r\n"); |
| sunifu | 0:b75f48b4f752 | 76 | char buf[128] ; |
| sunifu | 0:b75f48b4f752 | 77 | |
| sunifu | 0:b75f48b4f752 | 78 | switch(e) |
| sunifu | 0:b75f48b4f752 | 79 | { |
| sunifu | 0:b75f48b4f752 | 80 | case TCPSOCKET_CONNECTED: |
| sunifu | 0:b75f48b4f752 | 81 | printf("Connected to host.\r\n") ; |
| sunifu | 0:b75f48b4f752 | 82 | break; |
| sunifu | 0:b75f48b4f752 | 83 | case TCPSOCKET_WRITEABLE: |
| sunifu | 0:b75f48b4f752 | 84 | printf("Can write data to buf.\r\n"); |
| sunifu | 0:b75f48b4f752 | 85 | break; |
| sunifu | 0:b75f48b4f752 | 86 | case TCPSOCKET_READABLE: |
| sunifu | 0:b75f48b4f752 | 87 | printf("Data in buf.\r\n"); |
| sunifu | 0:b75f48b4f752 | 88 | pConnectedSock->recv(buf,sizeof(buf)) ; |
| sunifu | 0:b75f48b4f752 | 89 | printf("n = %s\r\n",buf) ; |
| sunifu | 0:b75f48b4f752 | 90 | myleds = atoi(buf) ; |
| sunifu | 0:b75f48b4f752 | 91 | break; |
| sunifu | 0:b75f48b4f752 | 92 | case TCPSOCKET_CONTIMEOUT: |
| sunifu | 0:b75f48b4f752 | 93 | printf("Connection timed out.\r\n"); |
| sunifu | 0:b75f48b4f752 | 94 | break ; |
| sunifu | 0:b75f48b4f752 | 95 | case TCPSOCKET_CONRST: |
| sunifu | 0:b75f48b4f752 | 96 | printf("Connection was reset by remote host.\r\n"); |
| sunifu | 0:b75f48b4f752 | 97 | break ; |
| sunifu | 0:b75f48b4f752 | 98 | case TCPSOCKET_CONABRT: |
| sunifu | 0:b75f48b4f752 | 99 | printf("Connection was aborted.\r\n") ; |
| sunifu | 0:b75f48b4f752 | 100 | break ; |
| sunifu | 0:b75f48b4f752 | 101 | case TCPSOCKET_ERROR: |
| sunifu | 0:b75f48b4f752 | 102 | printf("Unknown error.\r\n") ; |
| sunifu | 0:b75f48b4f752 | 103 | break ; |
| sunifu | 0:b75f48b4f752 | 104 | case TCPSOCKET_DISCONNECTED: |
| sunifu | 0:b75f48b4f752 | 105 | printf("Tcp Socket Disconnected\r\n") ; |
| sunifu | 0:b75f48b4f752 | 106 | pConnectedSock->close() ; |
| sunifu | 0:b75f48b4f752 | 107 | break; |
| sunifu | 0:b75f48b4f752 | 108 | } |
| sunifu | 0:b75f48b4f752 | 109 | printf("--- OUT ConnectEvent ---\r\n\r\n"); |
| sunifu | 0:b75f48b4f752 | 110 | } |