VZTECH / Mbed 2 deprecated main_src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Thu Apr 30 15:42:41 2015 +0000
Revision:
119:ee6a53069455
Child:
120:770f00554b1e
funcionalidade - clock "ogro" - implementada

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 119:ee6a53069455 1 #include "clock.h"
klauss 119:ee6a53069455 2
klauss 119:ee6a53069455 3 time_t current_time = 0;
klauss 119:ee6a53069455 4
klauss 119:ee6a53069455 5 UDPSocket clock_sock;
klauss 119:ee6a53069455 6
klauss 119:ee6a53069455 7 Endpoint clock_server;
klauss 119:ee6a53069455 8
klauss 119:ee6a53069455 9 Timer server_clock_timer;
klauss 119:ee6a53069455 10
klauss 119:ee6a53069455 11 int request_clock_to_server ( void )
klauss 119:ee6a53069455 12 {
klauss 119:ee6a53069455 13 char clock_msg[] = "request time";
klauss 119:ee6a53069455 14
klauss 119:ee6a53069455 15 int send = clock_sock.sendTo( clock_server, clock_msg, strlen( clock_msg ) );
klauss 119:ee6a53069455 16
klauss 119:ee6a53069455 17 if ( debug_clock ) debug_msg("::%d::%s::%s::%d::", send, clock_msg, clock_server.get_address (), clock_server.get_port () );
klauss 119:ee6a53069455 18
klauss 119:ee6a53069455 19 if ( send != strlen( clock_msg ) )
klauss 119:ee6a53069455 20 {
klauss 119:ee6a53069455 21 if( debug_reconnect ) debug_msg("Reconnect clock request" );
klauss 119:ee6a53069455 22 clock_sock_reconnect ();
klauss 119:ee6a53069455 23 miss_closk_send_pkg++;
klauss 119:ee6a53069455 24 }
klauss 119:ee6a53069455 25 if ( debug_clock ) debug_msg("send :: %d", send );
klauss 119:ee6a53069455 26
klauss 119:ee6a53069455 27 return ( send );
klauss 119:ee6a53069455 28 }
klauss 119:ee6a53069455 29
klauss 119:ee6a53069455 30 int check_clock ( void )
klauss 119:ee6a53069455 31 {
klauss 119:ee6a53069455 32 if( server_clock_timer.read() > EXTERNAL_TIME_REQUEST_WAIT_SECONDS )
klauss 119:ee6a53069455 33 {
klauss 119:ee6a53069455 34 server_clock_timer.reset();
klauss 119:ee6a53069455 35 return request_clock_to_server ();
klauss 119:ee6a53069455 36 }
klauss 119:ee6a53069455 37 else
klauss 119:ee6a53069455 38 {
klauss 119:ee6a53069455 39 // nro arbitrario maior que strlen( request_time )
klauss 119:ee6a53069455 40 return 0x30;
klauss 119:ee6a53069455 41 }
klauss 119:ee6a53069455 42 }
klauss 119:ee6a53069455 43
klauss 119:ee6a53069455 44 int update_clock ( void )
klauss 119:ee6a53069455 45 {
klauss 119:ee6a53069455 46 char time_msg[ 16 ];
klauss 119:ee6a53069455 47 Endpoint local_clock_server;
klauss 119:ee6a53069455 48
klauss 119:ee6a53069455 49 int time_msg_rcv = clock_sock.receiveFrom( local_clock_server, time_msg, sizeof( time_msg ) );
klauss 119:ee6a53069455 50
klauss 119:ee6a53069455 51 if( time_msg_rcv == -1 )
klauss 119:ee6a53069455 52 {
klauss 119:ee6a53069455 53 if( debug_reconnect ) send_msg("Reconnect clock socket");
klauss 119:ee6a53069455 54 clock_sock_reconnect ();
klauss 119:ee6a53069455 55 }
klauss 119:ee6a53069455 56
klauss 119:ee6a53069455 57 current_time = atoi( time_msg );
klauss 119:ee6a53069455 58
klauss 119:ee6a53069455 59 if ( debug_clock ) debug_msg("Clock.rcv ( %d )", current_time );
klauss 119:ee6a53069455 60
klauss 119:ee6a53069455 61 return 0;
klauss 119:ee6a53069455 62 }
klauss 119:ee6a53069455 63
klauss 119:ee6a53069455 64 int init_clock ( void )
klauss 119:ee6a53069455 65 {
klauss 119:ee6a53069455 66 const char host[] = "192.168.120.7";
klauss 119:ee6a53069455 67 int port = 7475;
klauss 119:ee6a53069455 68
klauss 119:ee6a53069455 69 int clock_server_set_address_ret = clock_server.set_address( host , port );
klauss 119:ee6a53069455 70
klauss 119:ee6a53069455 71 if ( debug_clock ) debug_msg("clock_server_set_address_ret :: %d", clock_server_set_address_ret );
klauss 119:ee6a53069455 72
klauss 119:ee6a53069455 73 clock_sock.set_blocking( false, 0 );
klauss 119:ee6a53069455 74
klauss 119:ee6a53069455 75 int clock_sock_bind_ret = clock_sock.bind( 8975 );
klauss 119:ee6a53069455 76
klauss 119:ee6a53069455 77 if ( debug_clock ) debug_msg("clock_sock_bind_ret ::%d", clock_sock_bind_ret );
klauss 119:ee6a53069455 78
klauss 119:ee6a53069455 79 server_clock_timer.start();
klauss 119:ee6a53069455 80
klauss 119:ee6a53069455 81 request_clock_to_server ();
klauss 119:ee6a53069455 82
klauss 119:ee6a53069455 83 return ( clock_server_set_address_ret | clock_sock_bind_ret );
klauss 119:ee6a53069455 84 }
klauss 119:ee6a53069455 85
klauss 119:ee6a53069455 86 int clock_sock_reconnect ( void )
klauss 119:ee6a53069455 87 {
klauss 119:ee6a53069455 88 clock_sock.close ();
klauss 119:ee6a53069455 89
klauss 119:ee6a53069455 90 clock_sock.set_blocking ( false, 0 );
klauss 119:ee6a53069455 91
klauss 119:ee6a53069455 92 int clock_sock_bind_ret = clock_sock.bind ( 8975 );
klauss 119:ee6a53069455 93
klauss 119:ee6a53069455 94 return ( clock_sock_bind_ret );
klauss 119:ee6a53069455 95 }
klauss 119:ee6a53069455 96
klauss 119:ee6a53069455 97 void print_clock ( uint8_t * buffer )
klauss 119:ee6a53069455 98 {
klauss 119:ee6a53069455 99 if( buffer != NULL )
klauss 119:ee6a53069455 100 {
klauss 119:ee6a53069455 101 struct tm * result_tm;
klauss 119:ee6a53069455 102 if( sizeof( time_t ) != sizeof( long ) )
klauss 119:ee6a53069455 103 {
klauss 119:ee6a53069455 104 if ( debug_clock ) debug_msg("sizeof( time_t ) : %lu -- sizeof( long int ) : %lu\n", sizeof( time_t ), sizeof( long ) );
klauss 119:ee6a53069455 105 }
klauss 119:ee6a53069455 106
klauss 119:ee6a53069455 107 if ( debug_clock ) debug_msg("current_time : %lu\t", current_time );
klauss 119:ee6a53069455 108
klauss 119:ee6a53069455 109 if( current_time != 0 )
klauss 119:ee6a53069455 110 {
klauss 119:ee6a53069455 111 result_tm = localtime( ( const time_t *)&current_time );
klauss 119:ee6a53069455 112 if ( result_tm )
klauss 119:ee6a53069455 113 {
klauss 119:ee6a53069455 114 char formated_time[ 16 ];
klauss 119:ee6a53069455 115
klauss 119:ee6a53069455 116 /* Correcao "manual" do (GMT -3:00) */
klauss 119:ee6a53069455 117 result_tm->tm_hour -= 3;
klauss 119:ee6a53069455 118 if ( result_tm->tm_hour < 0 ) result_tm->tm_hour = 24 + result_tm->tm_hour;
klauss 119:ee6a53069455 119
klauss 119:ee6a53069455 120 size_t formated_nbytes = strftime( formated_time, sizeof( formated_time ), "%Y%m%d%H%M%S", result_tm );
klauss 119:ee6a53069455 121
klauss 119:ee6a53069455 122 if ( debug_clock ) debug_msg("clock() : %s\n", formated_time );
klauss 119:ee6a53069455 123
klauss 119:ee6a53069455 124 if( formated_nbytes != CLOCK_SYNC_SIZE ) debug_msg("( %lu )\n", formated_nbytes );
klauss 119:ee6a53069455 125
klauss 119:ee6a53069455 126 for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = formated_time[ i ];
klauss 119:ee6a53069455 127 }
klauss 119:ee6a53069455 128 else
klauss 119:ee6a53069455 129 {
klauss 119:ee6a53069455 130 for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = 0xfa;
klauss 119:ee6a53069455 131 }
klauss 119:ee6a53069455 132 }
klauss 119:ee6a53069455 133 else
klauss 119:ee6a53069455 134 {
klauss 119:ee6a53069455 135 for( register int i = 0; i < CLOCK_SYNC_SIZE; i++ ) buffer[ i ] = 0xab;
klauss 119:ee6a53069455 136 }
klauss 119:ee6a53069455 137 }
klauss 119:ee6a53069455 138 }
klauss 119:ee6a53069455 139
klauss 119:ee6a53069455 140 int show_clock ( void )
klauss 119:ee6a53069455 141 {
klauss 119:ee6a53069455 142 char buffer[ 512 ];
klauss 119:ee6a53069455 143 struct tm * result_tm;
klauss 119:ee6a53069455 144 if ( sizeof( time_t ) != sizeof( long ) )
klauss 119:ee6a53069455 145 {
klauss 119:ee6a53069455 146 send_msg("sizeof( time_t ) : %lu -- sizeof( long int ) : %lu\n", sizeof( time_t ), sizeof( long ) );
klauss 119:ee6a53069455 147 }
klauss 119:ee6a53069455 148
klauss 119:ee6a53069455 149 int filled = snprintf( buffer, 512, "current_time : %lu\tclock() : ", current_time );
klauss 119:ee6a53069455 150 int available_bytes = 512 - filled - 1;
klauss 119:ee6a53069455 151
klauss 119:ee6a53069455 152 if ( current_time != 0 )
klauss 119:ee6a53069455 153 {
klauss 119:ee6a53069455 154 result_tm = localtime( ( const time_t *)&current_time );
klauss 119:ee6a53069455 155 if ( result_tm )
klauss 119:ee6a53069455 156 {
klauss 119:ee6a53069455 157 char formated_time[ 16 ];
klauss 119:ee6a53069455 158
klauss 119:ee6a53069455 159 /* Correcao "manual" do (GMT -3:00) */
klauss 119:ee6a53069455 160 result_tm->tm_hour -= 3;
klauss 119:ee6a53069455 161 if ( result_tm->tm_hour < 0 ) result_tm->tm_hour = 24 + result_tm->tm_hour;
klauss 119:ee6a53069455 162
klauss 119:ee6a53069455 163 size_t formated_nbytes = strftime( formated_time, sizeof( formated_time ), "%Y%m%d%H%M%S", result_tm );
klauss 119:ee6a53069455 164
klauss 119:ee6a53069455 165 strncat ( buffer, formated_time, available_bytes );
klauss 119:ee6a53069455 166
klauss 119:ee6a53069455 167 if( formated_nbytes != CLOCK_SYNC_SIZE ) debug_msg("( %lu )\n", formated_nbytes );
klauss 119:ee6a53069455 168 }
klauss 119:ee6a53069455 169 }
klauss 119:ee6a53069455 170 else
klauss 119:ee6a53069455 171 {
klauss 119:ee6a53069455 172 strncat ( buffer, "???", available_bytes );
klauss 119:ee6a53069455 173 }
klauss 119:ee6a53069455 174
klauss 119:ee6a53069455 175 send_msg( "%s", buffer );
klauss 119:ee6a53069455 176
klauss 119:ee6a53069455 177 return ( 0 );
klauss 119:ee6a53069455 178 }