mbed/ARM 活用事例 第6章 mbedをネットワークにつなげよう!

Dependencies:   EthernetNetIf TextLCD mbed

Committer:
sunifu
Date:
Tue Oct 04 13:29:48 2011 +0000
Revision:
1:cb49bd07d33d
Parent:
0:b75f48b4f752

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }