Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

fw_handler.cpp

Committer:
klauss
Date:
2015-05-13
Revision:
125:8ff4dc96ad58
Parent:
124:c1b6c893e1c3
Child:
126:1f90756250fb

File content as of revision 125:8ff4dc96ad58:

#include "fw.h"

UDPSocket fw_sock;                                                                                                                      
Endpoint fw_server;
uint16_t miss_fw_send_pkg = 0;

int init_fw_handler( void ){
    char buff_ip[ 16 ] = "";
    char buff_port[ 8 ] = "";
    int fw_port = 0;

    FILE *fip = fopen( "/qspi/fw_ip.txt", "r");
    if( fip == NULL ){
        if( debug_file || debug_reconnect ) send_msg ("Failed to open /qspi/fw_ip.txt" );
        strncpy( buff_ip, __FW_SERVER_IP__, 20 );
    }else{
        int read = fread( buff_ip, 1, 512, fip );
        if( read > 0 ){
            for( int i = 0; i < read; i++ ) 
                if( buff_ip[ i ] == '\n' || buff_ip[ i ] == '\r' ){
                    buff_ip[ i ] = '\0';
                    break;
                }
            if( debug_file || debug_reconnect ) send_msg ("fw server ip %s", buff_ip );
        }else{
            if( debug_file || debug_reconnect ) send_msg ("Failed to open /qspi/fw_ip.txt" );
            strncpy( buff_ip, __FW_SERVER_IP__, 20 );
        }
    }
    if( fip != NULL ) fclose( fip );
    
    FILE * fport = fopen( "/qspi/fw_port.txt", "r");
    
    if( fport == NULL ) {
        if( debug_fw || debug_reconnect ) send_msg ("Failed to open /qspi/fw_port.txt" );
        fw_port = __FW_SERVER_PORT__;
    } else {
        if( fread ( (void *) buff_port, 1, 32, fport ) > 0 )
        {
            fw_port = atoi ( buff_port );
            if( debug_fw || debug_reconnect ) send_msg ( "fw server port %d", fw_port );
        } else {
            if( debug_fw || debug_reconnect ) send_msg ( "Failed to read /qspi/fw_port.txt" );
            fw_port = __FW_SERVER_PORT__;
        }
    }
    if( fport != NULL ) fclose( fport );
    
    int addr = fw_server.set_address( buff_ip , fw_port );
    if( debug_fw ) send_msg(" Valor de retorno set_address -- %d ", addr );
    fw_sock.set_blocking( false, 0 );
    int bind = fw_sock.bind( __FW_HEADER_PORT__ );
    if( debug_fw ) send_msg(" Valor de retorno bind -- %d ", bind );
    
    return ( 0 );
}

void re_start_fw( void ){
    int close = fw_sock.close();
    if( debug_fw || debug_reconnect ) send_msg (" Valor de retorno close-- %d ", close );
    
    init_fw_handler();
}

void fw_cbx_pkg( int ext, int port, char * data ){
    static uint8_t fw_cbx_pkg_id = 0x00;
    data[ CB_BUFFER_SIZE - 1 ] = fw_cbx_pkg_id++;
     
    int send = fw_sock.sendTo( fw_server, data, CB_BUFFER_SIZE );
    
    if( send != CB_BUFFER_SIZE )
    {
        if( debug_reconnect )
        {
            send_msg("[%d] Reconnect FW - %d", ext, send );
        }
        
        miss_fw_send_pkg++;
        re_start_fw();
    }
}