This is FlexLEDTape on TCP/IP Program
Dependencies: EthernetNetIf HTTPServer TextLCD a101 mbed
Fork of ethernet_test_http by
main.cpp@1:a505df26eceb, 2012-12-28 (annotated)
- 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?
User | Revision | Line number | New 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 |