Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

eth.h

Committer:
klauss
Date:
2014-09-30
Revision:
33:735fd60e96d8
Child:
34:f19d9735428e

File content as of revision 33:735fd60e96d8:

#ifndef __ETH_H__
#define __ETH_H__

#include "prompt.h"
#include "debug.h"

#define UDP_PORT_LISTENER 11406

char * listen_eth_udp( char * buffer, int *length ){
    UDPSocket server;
    server.set_blocking( false, 1 );
    server.bind( UDP_PORT_LISTENER );
    Endpoint client;
    static Timer t;
    static int count = 0;
    static int param = 100;
    
    *length = server.receiveFrom( client, buffer, sizeof(buffer ) );
        
    if( *length > 0){
        buffer[ *length ] = '\0';
        t.start();
        if( count >= 0 ){
           if( count == 0 ); // enviar pacote de "entendi o request de volta" 
            
            if( atoi( buffer ) == 0 ) count++;
            
            else count = 0;
        }        
        if( count == param ){
            debug_msg( "Received start pkgs" );
            if( t.read() < 10 ){
                param = 1000;
                server.set_blocking( true, 10 );
                t.reset();
                
                count = 0;
                while( atoi( buffer ) == 0 && t.read() < 10 ){
                    *length = server.receiveFrom( client, buffer, sizeof( buffer ) );
                    wdt.kick();
                }
                
                if( t.read() > 10 ) return( NULL );
                
                else{
                    //tratar o primeiro pkg depois dos zeros aqui
                    count++;
                    while( count < 6000 ){
                        wdt.kick();
                        *length = server.receiveFrom( client, buffer, sizeof( buffer ) );
                        if( ++count == param ){
                            debug_msg(" Received %04d - Sent %04d - Missed %04d - %.3f", count, atoi( buffer ), atoi( buffer ) - count, ( (float)count )/( atoi( buffer ) ) );
                            param += 1000;
                        }
                    }
                    //pensar em como validar os pacotes recebidos, cks ... e o que mais ?
                    //se validado os pkgs, dar reset com os dados no arquivo bla, caso contrario, ignorar ...
                    bool valid_reboot = false;
                    if( valid_reboot ) NVIC_SystemReset();
                    
                    else{
                        count = 0;
                        param = 100;
                        server.set_blocking( false, 1 );
                        t.stop();
                        t.reset();
                        debug_msg("Nao Resetando ... ");
                    }
                    
                }
            }
        }else return( buffer );
    }else return( NULL );
    return( NULL );
}
    
#endif