Dependencies:   EthernetNetIf mbed NetServicesMin

main.c

Committer:
alpsayin
Date:
2011-09-21
Revision:
0:be9ccd3a915d

File content as of revision 0:be9ccd3a915d:


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

#define DHCP_ENABLE 1

#define LOCAL_IP_ADDRESS IpAddr(192,168,1,110)
#define NETWORK_MASK IpAddr(255,255,255,0)
#define GATEWAY_ADDRESS IpAddr(192,168,1,1)
#define DNS_ADDRESS IpAddr(8,8,8,8)

DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);

Serial pc(USBTX, USBRX);

#if DHCP_ENABLE==1
#warning DHCP is enabled
EthernetNetIf eth;
#else
#warning Static IP is used
EthernetNetIf eth(
    LOCAL_IP_ADDRESS, 
    NETWORK_MASK,
    GATEWAY_ADDRESS, 
    DNS_ADDRESS
);
#endif

#define TCP_LISTENING_PORT 12345

TCPSocket ListeningSock;
TCPSocket* pConnectedSock; // for ConnectedSock
Host client;
TCPSocketErr err;

messageHandlerFunction(ledGetter)
{
    char newMsg[5];
    if(led1)
        newMsg[0] = '1';
    else
        newMsg[0] = '0';
    
    if(led2)
        newMsg[1] = '1';
    else
        newMsg[1] = '0';
        
    if(led3)
        newMsg[2] = '1';
    else
        newMsg[2] = '0';
        
    newMsg[3] = '\r';
    newMsg[4] = '\n';
    
    vSendMessage(pConnectedSocket, newMsg, 5);
}
messageHandlerFunction(ledLighter)
{
    led1 = msg[0]&0x01;
    led2 = msg[1]&0x02;
    led3 = msg[2]&0x03;   
    ledGetter(pConnectedSocket, msg, len);
}

void onConnectedTCPSocketEvent(TCPSocketEvent e)
{
   switch(e)
    {
    case TCPSOCKET_CONNECTED:
        printf("TCP Socket Connected\r\n");
        break;
    case TCPSOCKET_WRITEABLE:
      //Can now write some data...
        //printf("TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
      //Can now read dome data...
        //printf("TCP Socket Readable\r\n");
       // Read in any available data into the buffer
       vGetMessage(pConnectedSock);
       break;
    case TCPSOCKET_CONTIMEOUT:
        printf("TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("TCP Socket Disconnected\r\n");        
        pConnectedSock->close();
        break;
    default:
        printf("DEFAULT\r\n"); 
      }
}


void onListeningTCPSocketEvent(TCPSocketEvent e)
{
    switch(e)
    {
    case TCPSOCKET_ACCEPT:
        printf("Listening: TCP Socket Accepted\r\n");
        // Accepts connection from client and gets connected socket.   
        err=ListeningSock.accept(&client, &pConnectedSock);
        if (err) {
            printf("onListeningTcpSocketEvent : Could not accept connection.\r\n");
            return; //Error in accept, discard connection
        }
        // Setup the new socket events
        pConnectedSock->setOnEvent(&onConnectedTCPSocketEvent);
        // We can find out from where the connection is coming by looking at the
        // Host parameter of the accept() method
        IpAddr clientIp = client.getIp();
        printf("Listening: Incoming TCP connection from %d.%d.%d.%d\r\n", 
           clientIp[0], clientIp[1], clientIp[2], clientIp[3]);
       break;
    // the following cases will not happen
    case TCPSOCKET_CONNECTED:
        printf("Listening: TCP Socket Connected\r\n");
        break;
    case TCPSOCKET_WRITEABLE:
        printf("Listening: TCP Socket Writable\r\n");
        break;
    case TCPSOCKET_READABLE:
        printf("Listening: TCP Socket Readable\r\n");
        break;
    case TCPSOCKET_CONTIMEOUT:
        printf("Listening: TCP Socket Timeout\r\n");
        break;
    case TCPSOCKET_CONRST:
        printf("Listening: TCP Socket CONRST\r\n");
        break;
    case TCPSOCKET_CONABRT:
        printf("Listening: TCP Socket CONABRT\r\n");
        break;
    case TCPSOCKET_ERROR:
        printf("Listening: TCP Socket Error\r\n");
        break;
    case TCPSOCKET_DISCONNECTED:
    //Close socket...
        printf("Listening: TCP Socket Disconnected\r\n");        
        ListeningSock.close();
        break;
    default:
        printf("DEFAULT\r\n"); 
     };
}


int main() {
  printf("\r\n");
  printf("Setting up...\r\n");
  
  return 0;
  EthernetErr ethErr = eth.setup();//initialisation of ethernet stack
  if(ethErr)
  {
    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]);//address of server

    //Set the get message handler function
  vSetMessageHandler(TYPE_POST, ledLighter);
  vSetMessageHandler(TYPE_GET, ledGetter);
  
  // Set the callbacks for Listening
  ListeningSock.setOnEvent(&onListeningTCPSocketEvent); 
  
  // bind and listen on TCP
  err=ListeningSock.bind(Host(IpAddr(), TCP_LISTENING_PORT));
  printf("Binding..\r\n");
  
  if(err)
  {
   //Deal with that error...
    printf("Binding Error\n");
  }
   err=ListeningSock.listen(); // Starts listening
   printf("Listening...\r\n");
   if(err)
   {
    printf("Listening Error\r\n");
   }
 
  Timer tmr;
  tmr.start();
  
  while(true)
  {
    Net::poll();
    if(tmr.read() > 4) // sec
    {       
      led4=!led4; //Show that we are alive
      tmr.reset();
    }
  }  
}