mbed/ARM 活用事例 第6章 mbedをネットワークにつなげよう!
Dependencies: EthernetNetIf TextLCD mbed
main.cpp@1:cb49bd07d33d, 2011-10-04 (annotated)
- Committer:
- sunifu
- Date:
- Tue Oct 04 13:29:48 2011 +0000
- Revision:
- 1:cb49bd07d33d
- Parent:
- 0:b75f48b4f752
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 | 1:cb49bd07d33d | 4 | #include "TextLCD.h" |
sunifu | 0:b75f48b4f752 | 5 | |
sunifu | 0:b75f48b4f752 | 6 | #define TCP_LISTENING_PORT 50505 |
sunifu | 0:b75f48b4f752 | 7 | |
sunifu | 0:b75f48b4f752 | 8 | BusOut myleds(LED1, LED2, LED3, LED4); |
sunifu | 1:cb49bd07d33d | 9 | TextLCD lcd(p24, p26, p27, p28, p29, p30); |
sunifu | 0:b75f48b4f752 | 10 | |
sunifu | 0:b75f48b4f752 | 11 | void onTCPSocketEvent(TCPSocketEvent e) ; |
sunifu | 0:b75f48b4f752 | 12 | void onConnectedTCPSocketEvent(TCPSocketEvent e) ; |
sunifu | 0:b75f48b4f752 | 13 | |
sunifu | 0:b75f48b4f752 | 14 | EthernetNetIf eth ; |
sunifu | 0:b75f48b4f752 | 15 | TCPSocketErr tcpErr ; |
sunifu | 0:b75f48b4f752 | 16 | TCPSocket tcpSock ; |
sunifu | 0:b75f48b4f752 | 17 | TCPSocket* pConnectedSock ; |
sunifu | 0:b75f48b4f752 | 18 | Host client ; |
sunifu | 0:b75f48b4f752 | 19 | |
sunifu | 0:b75f48b4f752 | 20 | int main() { |
sunifu | 1:cb49bd07d33d | 21 | lcd.locate(0,0); |
sunifu | 1:cb49bd07d33d | 22 | lcd.printf("Setting up..."); |
sunifu | 1:cb49bd07d33d | 23 | EthernetNetIf eth; //(1) |
sunifu | 1:cb49bd07d33d | 24 | //EthernetNetIf eth( // (2) -- static IP address |
sunifu | 1:cb49bd07d33d | 25 | // IpAddr(192,168,0,6), // IP Address |
sunifu | 1:cb49bd07d33d | 26 | // IpAddr(255,255,255,0), // Subnet Mask |
sunifu | 1:cb49bd07d33d | 27 | // IpAddr(192,168,0,1), // Default Gateway |
sunifu | 1:cb49bd07d33d | 28 | // IpAddr(192,168,0,1) // DNS Server |
sunifu | 1:cb49bd07d33d | 29 | //) ; |
sunifu | 1:cb49bd07d33d | 30 | |
sunifu | 1:cb49bd07d33d | 31 | EthernetErr ethErr = eth.setup(); |
sunifu | 0:b75f48b4f752 | 32 | if( ethErr != ETH_OK ) |
sunifu | 0:b75f48b4f752 | 33 | { |
sunifu | 1:cb49bd07d33d | 34 | lcd.locate(0,0); |
sunifu | 0:b75f48b4f752 | 35 | printf("Error %d in setup.\r\n", ethErr); |
sunifu | 1:cb49bd07d33d | 36 | lcd.printf("NW Setup Error!", ethErr); |
sunifu | 0:b75f48b4f752 | 37 | return -1; |
sunifu | 0:b75f48b4f752 | 38 | } |
sunifu | 1:cb49bd07d33d | 39 | lcd.locate(0,0); |
sunifu | 1:cb49bd07d33d | 40 | lcd.printf("Setup OK "); |
sunifu | 0:b75f48b4f752 | 41 | printf("Setup OK\r\n"); |
sunifu | 0:b75f48b4f752 | 42 | |
sunifu | 0:b75f48b4f752 | 43 | IpAddr ip = eth.getIp() ; |
sunifu | 1:cb49bd07d33d | 44 | |
sunifu | 1:cb49bd07d33d | 45 | lcd.locate(0,1); |
sunifu | 1:cb49bd07d33d | 46 | lcd.printf("%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]); |
sunifu | 1:cb49bd07d33d | 47 | |
sunifu | 0:b75f48b4f752 | 48 | printf("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3]) ; |
sunifu | 0:b75f48b4f752 | 49 | |
sunifu | 0:b75f48b4f752 | 50 | tcpSock.setOnEvent(&onTCPSocketEvent) ; |
sunifu | 0:b75f48b4f752 | 51 | |
sunifu | 0:b75f48b4f752 | 52 | printf("Bindding...\r\n") ; |
sunifu | 0:b75f48b4f752 | 53 | tcpErr = tcpSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)); |
sunifu | 0:b75f48b4f752 | 54 | if ( tcpErr != ETH_OK ){ |
sunifu | 0:b75f48b4f752 | 55 | printf("Bindding Error.\r\n") ; |
sunifu | 0:b75f48b4f752 | 56 | return -1 ; |
sunifu | 0:b75f48b4f752 | 57 | } |
sunifu | 0:b75f48b4f752 | 58 | |
sunifu | 0:b75f48b4f752 | 59 | printf("Listen...\r\n"); |
sunifu | 0:b75f48b4f752 | 60 | tcpErr = tcpSock.listen() ; |
sunifu | 0:b75f48b4f752 | 61 | if ( tcpErr != ETH_OK ){ |
sunifu | 0:b75f48b4f752 | 62 | printf("Listen Error.\r\n") ; |
sunifu | 0:b75f48b4f752 | 63 | return -1 ; |
sunifu | 0:b75f48b4f752 | 64 | } |
sunifu | 0:b75f48b4f752 | 65 | |
sunifu | 0:b75f48b4f752 | 66 | while(1) { |
sunifu | 0:b75f48b4f752 | 67 | Net::poll(); |
sunifu | 0:b75f48b4f752 | 68 | } |
sunifu | 0:b75f48b4f752 | 69 | } |
sunifu | 0:b75f48b4f752 | 70 | |
sunifu | 0:b75f48b4f752 | 71 | void onTCPSocketEvent(TCPSocketEvent e) |
sunifu | 0:b75f48b4f752 | 72 | { |
sunifu | 0:b75f48b4f752 | 73 | printf("---IN TCPSocketEvent ---\r\n"); |
sunifu | 0:b75f48b4f752 | 74 | |
sunifu | 0:b75f48b4f752 | 75 | if ( e == TCPSOCKET_ACCEPT ){ |
sunifu | 0:b75f48b4f752 | 76 | printf("Listening: TCP Socket Accepted\r\n"); |
sunifu | 0:b75f48b4f752 | 77 | tcpErr=tcpSock.accept(&client, &pConnectedSock); |
sunifu | 0:b75f48b4f752 | 78 | |
sunifu | 0:b75f48b4f752 | 79 | if ( tcpErr != TCPSOCKET_OK ) { |
sunifu | 0:b75f48b4f752 | 80 | printf("onTcpSocketEvent Error \r\n"); |
sunifu | 0:b75f48b4f752 | 81 | return; |
sunifu | 0:b75f48b4f752 | 82 | } |
sunifu | 0:b75f48b4f752 | 83 | pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent); |
sunifu | 0:b75f48b4f752 | 84 | IpAddr clientIp = client.getIp(); |
sunifu | 0:b75f48b4f752 | 85 | printf("Controler IP Address is [%d.%d.%d.%d].\r\n", |
sunifu | 0:b75f48b4f752 | 86 | clientIp[0], clientIp[1], clientIp[2], clientIp[3]); |
sunifu | 0:b75f48b4f752 | 87 | } |
sunifu | 0:b75f48b4f752 | 88 | printf("--- OUT TCPSocketEvent ---\r\n\r\n") ; |
sunifu | 0:b75f48b4f752 | 89 | } |
sunifu | 0:b75f48b4f752 | 90 | |
sunifu | 0:b75f48b4f752 | 91 | void onConnectedTCPSocketEvent(TCPSocketEvent e) |
sunifu | 0:b75f48b4f752 | 92 | { |
sunifu | 0:b75f48b4f752 | 93 | printf("--- IN ConnectEvent ---\r\n"); |
sunifu | 0:b75f48b4f752 | 94 | char buf[128] ; |
sunifu | 0:b75f48b4f752 | 95 | |
sunifu | 0:b75f48b4f752 | 96 | switch(e) |
sunifu | 0:b75f48b4f752 | 97 | { |
sunifu | 0:b75f48b4f752 | 98 | case TCPSOCKET_CONNECTED: |
sunifu | 0:b75f48b4f752 | 99 | printf("Connected to host.\r\n") ; |
sunifu | 0:b75f48b4f752 | 100 | break; |
sunifu | 0:b75f48b4f752 | 101 | case TCPSOCKET_WRITEABLE: |
sunifu | 0:b75f48b4f752 | 102 | printf("Can write data to buf.\r\n"); |
sunifu | 0:b75f48b4f752 | 103 | break; |
sunifu | 0:b75f48b4f752 | 104 | case TCPSOCKET_READABLE: |
sunifu | 0:b75f48b4f752 | 105 | printf("Data in buf.\r\n"); |
sunifu | 0:b75f48b4f752 | 106 | pConnectedSock->recv(buf,sizeof(buf)) ; |
sunifu | 0:b75f48b4f752 | 107 | printf("n = %s\r\n",buf) ; |
sunifu | 0:b75f48b4f752 | 108 | myleds = atoi(buf) ; |
sunifu | 0:b75f48b4f752 | 109 | break; |
sunifu | 0:b75f48b4f752 | 110 | case TCPSOCKET_CONTIMEOUT: |
sunifu | 0:b75f48b4f752 | 111 | printf("Connection timed out.\r\n"); |
sunifu | 0:b75f48b4f752 | 112 | break ; |
sunifu | 0:b75f48b4f752 | 113 | case TCPSOCKET_CONRST: |
sunifu | 0:b75f48b4f752 | 114 | printf("Connection was reset by remote host.\r\n"); |
sunifu | 0:b75f48b4f752 | 115 | break ; |
sunifu | 0:b75f48b4f752 | 116 | case TCPSOCKET_CONABRT: |
sunifu | 0:b75f48b4f752 | 117 | printf("Connection was aborted.\r\n") ; |
sunifu | 0:b75f48b4f752 | 118 | break ; |
sunifu | 0:b75f48b4f752 | 119 | case TCPSOCKET_ERROR: |
sunifu | 0:b75f48b4f752 | 120 | printf("Unknown error.\r\n") ; |
sunifu | 0:b75f48b4f752 | 121 | break ; |
sunifu | 0:b75f48b4f752 | 122 | case TCPSOCKET_DISCONNECTED: |
sunifu | 0:b75f48b4f752 | 123 | printf("Tcp Socket Disconnected\r\n") ; |
sunifu | 0:b75f48b4f752 | 124 | pConnectedSock->close() ; |
sunifu | 0:b75f48b4f752 | 125 | break; |
sunifu | 0:b75f48b4f752 | 126 | } |
sunifu | 0:b75f48b4f752 | 127 | printf("--- OUT ConnectEvent ---\r\n\r\n"); |
sunifu | 0:b75f48b4f752 | 128 | } |