Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Revision:
119:ee6a53069455
Child:
120:770f00554b1e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clock.cpp	Thu Apr 30 15:42:41 2015 +0000
@@ -0,0 +1,178 @@
+#include "clock.h"
+
+time_t current_time = 0;
+
+UDPSocket clock_sock;
+
+Endpoint clock_server;
+
+Timer server_clock_timer;
+
+int request_clock_to_server ( void )
+{
+    char clock_msg[] = "request time";
+    
+    int send = clock_sock.sendTo( clock_server, clock_msg, strlen( clock_msg ) );
+    
+    if ( debug_clock ) debug_msg("::%d::%s::%s::%d::", send, clock_msg, clock_server.get_address (), clock_server.get_port () );
+    
+    if ( send != strlen( clock_msg ) )
+    {
+        if( debug_reconnect ) debug_msg("Reconnect clock request" );
+        clock_sock_reconnect ();
+        miss_closk_send_pkg++;
+    }
+    if ( debug_clock ) debug_msg("send :: %d", send );
+    
+    return ( send );
+}
+
+int check_clock ( void )
+{
+    if( server_clock_timer.read() > EXTERNAL_TIME_REQUEST_WAIT_SECONDS )
+    {
+        server_clock_timer.reset();
+        return request_clock_to_server ();
+    }
+    else
+    {
+        // nro arbitrario maior que strlen( request_time )
+        return 0x30;
+    }
+}
+
+int update_clock ( void )
+{   
+    char time_msg[ 16 ];
+    Endpoint local_clock_server;
+    
+    int time_msg_rcv = clock_sock.receiveFrom( local_clock_server, time_msg, sizeof( time_msg ) );
+    
+    if( time_msg_rcv == -1 )
+    {
+        if( debug_reconnect ) send_msg("Reconnect clock socket");
+        clock_sock_reconnect ();
+    }
+    
+    current_time = atoi( time_msg );
+    
+    if ( debug_clock ) debug_msg("Clock.rcv ( %d )", current_time );
+    
+    return 0;
+}
+
+int init_clock ( void )
+{   
+    const char host[] = "192.168.120.7";
+    int port = 7475;
+    
+    int clock_server_set_address_ret = clock_server.set_address( host , port );
+    
+    if ( debug_clock ) debug_msg("clock_server_set_address_ret :: %d", clock_server_set_address_ret );
+    
+    clock_sock.set_blocking( false, 0 );
+    
+    int clock_sock_bind_ret = clock_sock.bind( 8975 );
+    
+    if ( debug_clock ) debug_msg("clock_sock_bind_ret ::%d", clock_sock_bind_ret );
+    
+    server_clock_timer.start();
+    
+    request_clock_to_server ();
+    
+    return ( clock_server_set_address_ret | clock_sock_bind_ret );
+}
+
+int clock_sock_reconnect ( void )
+{
+    clock_sock.close ();
+    
+    clock_sock.set_blocking ( false, 0 );
+    
+    int clock_sock_bind_ret = clock_sock.bind ( 8975 );
+    
+    return ( clock_sock_bind_ret );    
+}
+
+void print_clock ( uint8_t * buffer )
+{
+    if( buffer != NULL )
+    {
+        struct tm * result_tm;
+        if( sizeof( time_t ) != sizeof( long ) )
+        {
+            if ( debug_clock ) debug_msg("sizeof( time_t ) : %lu -- sizeof( long int ) : %lu\n", sizeof( time_t ), sizeof( long ) );
+        }
+                                   
+        if ( debug_clock ) debug_msg("current_time : %lu\t", current_time );
+                                                                                                                                        
+        if( current_time != 0 )
+        {
+            result_tm = localtime( ( const time_t *)&current_time );
+            if ( result_tm )
+            {
+                char formated_time[ 16 ];
+                
+                /* Correcao "manual" do (GMT -3:00) */
+                result_tm->tm_hour -= 3;
+                if ( result_tm->tm_hour < 0 ) result_tm->tm_hour = 24 + result_tm->tm_hour;
+                
+                size_t formated_nbytes = strftime( formated_time, sizeof( formated_time ), "%Y%m%d%H%M%S", result_tm );
+                
+                if ( debug_clock ) debug_msg("clock() : %s\n", formated_time );
+                
+                if( formated_nbytes != CLOCK_SYNC_SIZE ) debug_msg("( %lu )\n", formated_nbytes );
+                
+                for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = formated_time[ i ];
+            }
+                else
+            {
+                for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = 0xfa;
+            }
+        }
+            else
+        {
+            for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = 0xab;
+        }
+    }
+}
+
+int show_clock ( void )
+{   
+    char buffer[ 512 ];
+    struct tm * result_tm;
+    if ( sizeof( time_t ) != sizeof( long ) )
+    {
+        send_msg("sizeof( time_t ) : %lu -- sizeof( long int ) : %lu\n", sizeof( time_t ), sizeof( long ) );
+    }
+                                   
+    int filled = snprintf( buffer, 512, "current_time : %lu\tclock() : ", current_time );
+    int available_bytes = 512 - filled - 1;
+                                                                                                                                        
+    if ( current_time != 0 )
+    {
+        result_tm = localtime( ( const time_t *)&current_time );
+        if ( result_tm )
+        {
+            char formated_time[ 16 ];
+            
+            /* Correcao "manual" do (GMT -3:00) */
+            result_tm->tm_hour -= 3;
+            if ( result_tm->tm_hour < 0 ) result_tm->tm_hour = 24 + result_tm->tm_hour;
+            
+            size_t formated_nbytes = strftime( formated_time, sizeof( formated_time ), "%Y%m%d%H%M%S", result_tm );
+            
+            strncat ( buffer, formated_time, available_bytes );
+            
+            if( formated_nbytes != CLOCK_SYNC_SIZE ) debug_msg("( %lu )\n", formated_nbytes );
+        }
+    }
+        else
+    {
+        strncat ( buffer, "???", available_bytes );
+    }
+    
+    send_msg( "%s", buffer );
+    
+    return ( 0 );
+}
\ No newline at end of file