Tadao Iida / Mbed 2 deprecated TCPCtrlServer

Dependencies:   EthernetNetIf TextLCD mbed

main.cpp

Committer:
sunifu
Date:
2010-10-10
Revision:
0:b75f48b4f752
Child:
1:cb49bd07d33d

File content as of revision 0:b75f48b4f752:

#include "mbed.h"
#include "EthernetNetIf.h"
#include "TCPSocket.h"

#define TCP_LISTENING_PORT 50505

BusOut myleds(LED1, LED2, LED3, LED4);

void onTCPSocketEvent(TCPSocketEvent e) ;
void onConnectedTCPSocketEvent(TCPSocketEvent e) ;

EthernetNetIf eth ;   
TCPSocketErr tcpErr ;
TCPSocket tcpSock ;
TCPSocket* pConnectedSock ;
Host client ;

int main() {
   
    printf("Setting up...\r\n");    
    EthernetErr ethErr = eth.setup();
    if( ethErr != ETH_OK )
    {
        printf("Error %d in setup.\r\n", ethErr);
        return -1;
    }
    printf("Setup OK\r\n");
    
    IpAddr ip = eth.getIp() ;
    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");
}