This is FlexLEDTape on TCP/IP Program

Dependencies:   EthernetNetIf HTTPServer TextLCD a101 mbed

Fork of ethernet_test_http by Yasushi TAUCHI

Committer:
hototogisu
Date:
Fri Dec 28 10:31:58 2012 +0000
Revision:
1:a505df26eceb
Parent:
0:7dcfd77d344d
This is FlexLEDTape on TCP/IP Program

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yueee_yt 0:7dcfd77d344d 1 #include "mbed.h"
yueee_yt 0:7dcfd77d344d 2 #include "EthernetNetIf.h"
hototogisu 1:a505df26eceb 3 #include "TCPSocket.h"
hototogisu 1:a505df26eceb 4
hototogisu 1:a505df26eceb 5 #include "a101.h"
hototogisu 1:a505df26eceb 6 #include "string.h"
hototogisu 1:a505df26eceb 7
hototogisu 1:a505df26eceb 8 #define LED_LENGTH 24
hototogisu 1:a505df26eceb 9 #define TAPE_LENGTH 10
hototogisu 1:a505df26eceb 10 #define TCP_LISTENING_PORT 50505
yueee_yt 0:7dcfd77d344d 11
hototogisu 1:a505df26eceb 12
hototogisu 1:a505df26eceb 13 char color[] = "0x000000";
hototogisu 1:a505df26eceb 14 char *error;
hototogisu 1:a505df26eceb 15 int ledColors[LED_LENGTH*TAPE_LENGTH] = {0};
hototogisu 1:a505df26eceb 16 a101 ledTape(p13, p14, LED_LENGTH, TAPE_LENGTH);
yueee_yt 0:7dcfd77d344d 17
hototogisu 1:a505df26eceb 18 void onTCPSocketEvent(TCPSocketEvent e) ;
hototogisu 1:a505df26eceb 19 void onConnectedTCPSocketEvent(TCPSocketEvent e) ;
hototogisu 1:a505df26eceb 20
hototogisu 1:a505df26eceb 21 EthernetNetIf eth;
hototogisu 1:a505df26eceb 22 TCPSocketErr tcpErr ;
hototogisu 1:a505df26eceb 23 TCPSocket tcpSock ;
hototogisu 1:a505df26eceb 24 TCPSocket* pConnectedSock ;
hototogisu 1:a505df26eceb 25 Host client ;
yueee_yt 0:7dcfd77d344d 26
hototogisu 1:a505df26eceb 27 int main() {
hototogisu 1:a505df26eceb 28 printf("Setting up...\r\n");
hototogisu 1:a505df26eceb 29 EthernetErr ethErr = eth.setup() ;
hototogisu 1:a505df26eceb 30 if ( ethErr != ETH_OK ) {
hototogisu 1:a505df26eceb 31 printf("Error %d in setup.\r\n", ethErr ) ;
hototogisu 1:a505df26eceb 32 return -1 ;
hototogisu 1:a505df26eceb 33 }
hototogisu 1:a505df26eceb 34 printf("Setup OK\r\n") ;
hototogisu 1:a505df26eceb 35 IpAddr ip = eth.getIp() ;
hototogisu 1:a505df26eceb 36 printf("mbed IP Address is [%d.%d.%d.%d]\r\n", ip[0], ip[1], ip[2], ip[3] ) ;
hototogisu 1:a505df26eceb 37
hototogisu 1:a505df26eceb 38 tcpSock.setOnEvent(&onTCPSocketEvent) ;
hototogisu 1:a505df26eceb 39
hototogisu 1:a505df26eceb 40 printf("Bindding...\r\n") ;
hototogisu 1:a505df26eceb 41 tcpErr = tcpSock.bind(Host(IpAddr(), TCP_LISTENING_PORT)) ;
hototogisu 1:a505df26eceb 42 if ( tcpErr != ETH_OK ){
hototogisu 1:a505df26eceb 43 printf("Bindding Error.\r\n") ;
hototogisu 1:a505df26eceb 44 return -1 ;
hototogisu 1:a505df26eceb 45 }
yueee_yt 0:7dcfd77d344d 46
hototogisu 1:a505df26eceb 47 printf("Listen...\r\n");
hototogisu 1:a505df26eceb 48 tcpErr = tcpSock.listen() ;
hototogisu 1:a505df26eceb 49 if ( tcpErr != ETH_OK ){
hototogisu 1:a505df26eceb 50 printf("Listen Error.\r\n") ;
hototogisu 1:a505df26eceb 51 return -1 ;
hototogisu 1:a505df26eceb 52 }
yueee_yt 0:7dcfd77d344d 53
hototogisu 1:a505df26eceb 54 while(1) {
hototogisu 1:a505df26eceb 55 Net::poll() ;
hototogisu 1:a505df26eceb 56 }
hototogisu 1:a505df26eceb 57 }
yueee_yt 0:7dcfd77d344d 58
hototogisu 1:a505df26eceb 59 void onTCPSocketEvent(TCPSocketEvent e) {
hototogisu 1:a505df26eceb 60 if (e != TCPSOCKET_ACCEPT) return;
yueee_yt 0:7dcfd77d344d 61
hototogisu 1:a505df26eceb 62 printf("Listening: TCP Socket Accepted\r\n") ;
hototogisu 1:a505df26eceb 63
hototogisu 1:a505df26eceb 64 tcpErr = tcpSock.accept(&client, &pConnectedSock) ;
hototogisu 1:a505df26eceb 65 if (tcpErr != TCPSOCKET_OK) {
hototogisu 1:a505df26eceb 66 printf("onTCPSocketEvent Error\r\n") ;
hototogisu 1:a505df26eceb 67 return ;
yueee_yt 0:7dcfd77d344d 68 }
hototogisu 1:a505df26eceb 69
hototogisu 1:a505df26eceb 70 pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent) ;
hototogisu 1:a505df26eceb 71
hototogisu 1:a505df26eceb 72 IpAddr clientIp = client.getIp();
hototogisu 1:a505df26eceb 73 printf("Controler IP Address is [%d.%d.%d.%d]. \r\n", clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
yueee_yt 0:7dcfd77d344d 74 }
hototogisu 1:a505df26eceb 75
hototogisu 1:a505df26eceb 76 void onConnectedTCPSocketEvent(TCPSocketEvent e) {
hototogisu 1:a505df26eceb 77 char buf[3000];
hototogisu 1:a505df26eceb 78
hototogisu 1:a505df26eceb 79 switch(e) {
hototogisu 1:a505df26eceb 80 case TCPSOCKET_CONNECTED:
hototogisu 1:a505df26eceb 81 printf("Connected to host.\r\n");
hototogisu 1:a505df26eceb 82 break ;
hototogisu 1:a505df26eceb 83 case TCPSOCKET_WRITEABLE:
hototogisu 1:a505df26eceb 84 printf("Can write data to buf.\r\n");
hototogisu 1:a505df26eceb 85 break ;
hototogisu 1:a505df26eceb 86 case TCPSOCKET_READABLE:
hototogisu 1:a505df26eceb 87 pConnectedSock->recv(buf, sizeof(buf));
hototogisu 1:a505df26eceb 88 for (int i = 0; i < LED_LENGTH*TAPE_LENGTH; i++) {
hototogisu 1:a505df26eceb 89 for (int j = 0; j < 6; j++) {
hototogisu 1:a505df26eceb 90 color[j+2] = buf[i*6+j];
hototogisu 1:a505df26eceb 91 }
hototogisu 1:a505df26eceb 92 ledColors[i] = strtol(color, &error, 0);
hototogisu 1:a505df26eceb 93 }
hototogisu 1:a505df26eceb 94 ledTape.post(ledColors);
hototogisu 1:a505df26eceb 95 break ;
hototogisu 1:a505df26eceb 96 case TCPSOCKET_CONTIMEOUT:
hototogisu 1:a505df26eceb 97 printf("Connection timed out.\r\n");
hototogisu 1:a505df26eceb 98 break;
hototogisu 1:a505df26eceb 99 case TCPSOCKET_CONRST:
hototogisu 1:a505df26eceb 100 printf("Connection was reset by remote host.\r\n");
hototogisu 1:a505df26eceb 101 break;
hototogisu 1:a505df26eceb 102 case TCPSOCKET_CONABRT:
hototogisu 1:a505df26eceb 103 printf("Connection was aborted.\r\n");
hototogisu 1:a505df26eceb 104 break;
hototogisu 1:a505df26eceb 105 case TCPSOCKET_ERROR:
hototogisu 1:a505df26eceb 106 printf("Unknown error.\r\n");
hototogisu 1:a505df26eceb 107 break;
hototogisu 1:a505df26eceb 108 case TCPSOCKET_DISCONNECTED:
hototogisu 1:a505df26eceb 109 printf("TCP Socket Disconnected\r\n");
hototogisu 1:a505df26eceb 110 pConnectedSock->close() ;
hototogisu 1:a505df26eceb 111 break;
hototogisu 1:a505df26eceb 112 }
hototogisu 1:a505df26eceb 113 }
hototogisu 1:a505df26eceb 114