BUG:EtherNetIf -> UDP code

17 Nov 2010

Hello

I imported  EtherNetIf from this page[http://mbed.org/users/donatien/programs/EthernetNetIf/5z422], then hacked Donatien's UDPexample code to what you see here.

Calls to bind and sendto both return UDPSOCKET_MEM errors

regards

Dave

#include "mbed.h"
#include "EthernetNetIf.h"
#include "UDPSocket.h"

DigitalOut myled(LED1);
Serial pc(USBTX, USBRX);

EthernetNetIf eth;
UDPSocket     cfgSocket;

void ShowError (UDPSocketErr udpErr)
{
    switch ( udpErr )
    {
        case UDPSOCKET_OK:    
            pc.printf ("UDPSocket OK.\n");                      
            break;
        case UDPSOCKET_SETUP:
            pc.printf ("UDPSocket not properly configured.\n"); 
            break;
        case UDPSOCKET_IF:
            pc.printf ("Interface has problems, does not exist or is not initialized.\n");
            break;
        case UDPSOCKET_MEM:
            pc.printf ("Not enough mem.\n");
            break;
        case UDPSOCKET_INUSE:
            pc.printf ("Interface / Port is in use.\n");
            break;
        default:            
            pc.printf ("UNKnown UDP error\n");
            break;
    }            
}

void onUDPSocketEvent(UDPSocketEvent e)
{
    if ( e == UDPSOCKET_READABLE )
    {
        char buf[64] = {0};
        Host host;
        while( int len = cfgSocket.recvfrom( buf, 63, &host ) )
        {
            if( len <= 0 )
                break;
            pc.printf("From %d.%d.%d.%d: %s\n", host.getIp()[0], host.getIp()[1], host.getIp()[2], host.getIp()[3], buf);
        }
    }
}

int main() 
{
    pc.baud(115200);
    pc.printf ("HEllo World - 7 *\n");
    
    EthernetErr ethErr = eth.setup();
    if( ethErr == ETH_OK )
    {
        IpAddr ip = eth.getIp();
        pc.printf("mbed IP Address is %d.%d.%d.%d\r\n", ip[0], ip[1], ip[2], ip[3]);
    }
    else pc.printf ("ETHERNETSETUP FAILED\n");

    cfgSocket.setOnEvent(&onUDPSocketEvent);
    UDPSocketErr udpErr = cfgSocket.bind( Host(IpAddr(),5555) );
    if ( udpErr != UDPSOCKET_OK )
        ShowError(udpErr);

    int i = 0;
    Host brdHost(IpAddr(255,255,255,255), 5555);                    //broadcast test msg
    char cfgRqstMsg[]="SERVER CONFIG REQUEST";
    
    Timer tmr;
    tmr.start();
    while(1) 
    {
        Net::poll();
        if( tmr.read() > 5)
        {
            tmr.reset();
            int nSent = cfgSocket.sendto(cfgRqstMsg,strlen(cfgRqstMsg),&brdHost);
            pc.printf("PLONKER %d :: %d\n",++i,nSent);
            if ( nSent < 0 )
                ShowError((UDPSocketErr)nSent);
        }            
    }
}