mbed/ARM 活用事例 第6章 mbedをネットワークにつなげよう!
Dependencies: EthernetNetIf TextLCD mbed
main.cpp
- Committer:
- sunifu
- Date:
- 2011-10-04
- Revision:
- 1:cb49bd07d33d
- Parent:
- 0:b75f48b4f752
File content as of revision 1:cb49bd07d33d:
#include "mbed.h" #include "EthernetNetIf.h" #include "TCPSocket.h" #include "TextLCD.h" #define TCP_LISTENING_PORT 50505 BusOut myleds(LED1, LED2, LED3, LED4); TextLCD lcd(p24, p26, p27, p28, p29, p30); void onTCPSocketEvent(TCPSocketEvent e) ; void onConnectedTCPSocketEvent(TCPSocketEvent e) ; EthernetNetIf eth ; TCPSocketErr tcpErr ; TCPSocket tcpSock ; TCPSocket* pConnectedSock ; Host client ; int main() { lcd.locate(0,0); lcd.printf("Setting up..."); EthernetNetIf eth; //(1) //EthernetNetIf eth( // (2) -- static IP address // IpAddr(192,168,0,6), // IP Address // IpAddr(255,255,255,0), // Subnet Mask // IpAddr(192,168,0,1), // Default Gateway // IpAddr(192,168,0,1) // DNS Server //) ; EthernetErr ethErr = eth.setup(); if( ethErr != ETH_OK ) { lcd.locate(0,0); printf("Error %d in setup.\r\n", ethErr); lcd.printf("NW Setup Error!", ethErr); return -1; } lcd.locate(0,0); lcd.printf("Setup OK "); printf("Setup OK\r\n"); IpAddr ip = eth.getIp() ; lcd.locate(0,1); lcd.printf("%d.%d.%d.%d",ip[0],ip[1],ip[2],ip[3]); printf("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3]) ; tcpSock.setOnEvent(&onTCPSocketEvent) ; printf("Bindding...\r\n") ; tcpErr = tcpSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)); if ( tcpErr != ETH_OK ){ printf("Bindding Error.\r\n") ; return -1 ; } printf("Listen...\r\n"); tcpErr = tcpSock.listen() ; if ( tcpErr != ETH_OK ){ printf("Listen Error.\r\n") ; return -1 ; } while(1) { Net::poll(); } } void onTCPSocketEvent(TCPSocketEvent e) { printf("---IN TCPSocketEvent ---\r\n"); if ( e == TCPSOCKET_ACCEPT ){ printf("Listening: TCP Socket Accepted\r\n"); tcpErr=tcpSock.accept(&client, &pConnectedSock); if ( tcpErr != TCPSOCKET_OK ) { printf("onTcpSocketEvent Error \r\n"); return; } pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent); IpAddr clientIp = client.getIp(); printf("Controler IP Address is [%d.%d.%d.%d].\r\n", clientIp[0], clientIp[1], clientIp[2], clientIp[3]); } printf("--- OUT TCPSocketEvent ---\r\n\r\n") ; } void onConnectedTCPSocketEvent(TCPSocketEvent e) { printf("--- IN ConnectEvent ---\r\n"); char buf[128] ; switch(e) { case TCPSOCKET_CONNECTED: printf("Connected to host.\r\n") ; break; case TCPSOCKET_WRITEABLE: printf("Can write data to buf.\r\n"); break; case TCPSOCKET_READABLE: printf("Data in buf.\r\n"); pConnectedSock->recv(buf,sizeof(buf)) ; printf("n = %s\r\n",buf) ; myleds = atoi(buf) ; break; case TCPSOCKET_CONTIMEOUT: printf("Connection timed out.\r\n"); break ; case TCPSOCKET_CONRST: printf("Connection was reset by remote host.\r\n"); break ; case TCPSOCKET_CONABRT: printf("Connection was aborted.\r\n") ; break ; case TCPSOCKET_ERROR: printf("Unknown error.\r\n") ; break ; case TCPSOCKET_DISCONNECTED: printf("Tcp Socket Disconnected\r\n") ; pConnectedSock->close() ; break; } printf("--- OUT ConnectEvent ---\r\n\r\n"); }