Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
Diff: main.cpp
- Revision:
- 82:f55d13babca0
- Parent:
- 81:3656f00ab3db
- Child:
- 83:b8a1d8fdeaeb
--- a/main.cpp Tue Dec 30 12:37:40 2014 +0000 +++ b/main.cpp Tue Dec 30 21:00:00 2014 +0000 @@ -29,6 +29,7 @@ }else{ send_msg("******* Connection eth - ok *******"); init_prompt_eth(); + init_external_wdt() } Timer sync_timer, led_sync_timer; @@ -143,6 +144,7 @@ }else{ if( debug_main ) debug_msg("Connection eth - ok"); init_prompt_eth(); + init_external_wdt() } } } @@ -383,7 +385,8 @@ if( debug_main || debug_aging ) debug_msg("ACK from %d in pkg :: %d :: type %d", ext, cb->get_msg_id(), type ); } } - if( type != __REGISTRY__ ) type = __DO_NOTHING__; + if( type != __REGISTRY__ && type != __CB_BYE__ ) type = __DO_NOTHING__; + //if( type != __REGISTRY__ ) type = __DO_NOTHING__; } } } @@ -392,12 +395,18 @@ } if( main_test == true ){ - // Call_Box * cb = new Call_Box( 5010, 5010 ); - // v_cb->add( cb ); + static int next_value = 5010; + Call_Box * cb = new Call_Box( next_value, next_value++ ); + v_cb->add( cb ); + cb->cb_set_status( cb_on_call ); + cb->set_timeslice( ts->get_timeslice() ); + // cb = new Call_Box( 5011, 5011 ); // v_cb->add( cb ); + main_test = false; send_msg("Missed_Pkg :: %d ::", missed_pkg ); + } if( reset_cks == true ){ @@ -447,16 +456,45 @@ v_call->remove_element( i ); - cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 ); - send2callboxes( __build_cb_package__( ext, port, __CB_BYE__, ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + + cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 ); delete( call ); cb->re_start_timer(); } } - if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed" ); + if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from vector call" ); + + //ok, mas nem sempre o cbx "entrou em call + for( register uint8_t i = 0; i < v_cb->size(); i++ ) { + Call_Box * cb = (Call_Box *)v_cb->get_element( i ); + if( cb->get_ext() == ext ) { + already_removed = true; + if( cb->get_status() != cb_idle ) { + already_removed = false; + cb->send_bye(); + + ts->return_timeslice( cb->get_timeslice() ); + cb->set_timeslice( 0x00 ); + data[ __TIMESLICE_PLACE__ ] = 0x00; + + set_status( cb->status, cb_idle ); + set_status( cb->sip->status, sip_idle ); + + send2callboxes( __build_cb_package__( ext, port, __CB_BYE__, + ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + + cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 ); + + cb->re_start_timer(); + } + } + } + + + if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from inviting queue" ); cb->registry(); }else if( debug_invite || debug_main ) debug_msg("Bye from who ? %d", ext ); @@ -606,10 +644,10 @@ } } - //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 ); - cb->set_msg_id( 80 ); + cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 ); + //cb->set_msg_id( 80 ); - debug_msg("msg_id -- %d", cb->get_msg_id() ); + //debug_msg("msg_id -- %d", cb->get_msg_id() ); send2callboxes( __build_cb_package__( ext, port, __CB_BYE__, ( char * )buffer, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); @@ -629,7 +667,9 @@ if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() != __MAX_TIMESLICES__ ) ){ bool ts_reset = true; for( register uint8_t i = 0; i < v_cb->size(); i++ ){ - if ( ( ( Call_Box * )v_cb->get_element( i ) )->get_status() != cb_idle ){ + if ( ( ( Call_Box * )v_cb->get_element( i ) )->get_status() != cb_idle && + ( ( Call_Box * )v_cb->get_element( i ) )->get_sip_status() != sip_idle ) + { ts_reset = false; break; } @@ -653,6 +693,19 @@ if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT; if( wdt_timer.read() > 1 ){ + char wake_msg[ 8 ]; + + int read = udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) ); + + if( read > 0 ){ + if( !( strncmp( wake_msg, "alive", 5 ) ) ){ + external_wdt = EXTERN_WDT_IDLE; + strcpy( wake_msg, "wakeup" ); + while( !( udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) ) ) ); + } + } + if( debug_wdt ) if( read < 0 ) debug_msg( "some's wrong ... some's wrong" ); + wdt_timer.reset(); if( wdt_show ) debug_wdt = true; @@ -669,17 +722,21 @@ if( debug_wdt ){ debug_wdt = false; if( eth_status == 0 ){ - send_msg( "Wdt last reset: %s - status_eth :: Connected - Extern Wdt idle for :: %3d sec - Rx from CBx idle for :: %3d sec", + send_msg( "Wdt last reset: %s - status_eth :: Connected - Extern Wdt idle for :: %3d sec ( %3d ) - Rx from CBx idle for :: %3d sec ( %3d )", ( wdt.WatchdogCausedReset() ) ? "true" : "false", EXTERN_WDT_IDLE - external_wdt, - RX_CB_IDLE - pkg_wdt + EXTERN_WDT_IDLE, + RX_CB_IDLE - pkg_wdt, + RX_CB_IDLE ); }else{ - send_msg( "Wdt last reset: %s - status_eth :: Disconnected :: since %3d sec - Extern Wdt idle for :: %3d sec - Rx from CBx idle for :: %3d sec", + send_msg( "Wdt last reset: %s - status_eth :: Disconnected :: since %3d sec - Extern Wdt idle for :: %3d sec ( %3d ) - Rx from CBx idle for :: %3d sec ( %3d )", ( wdt.WatchdogCausedReset() ) ? "true" : "false", ETH_CONNECT_TIMEOUT - eth_wdt, - EXTERN_WDT_IDLE - external_wdt, - RX_CB_IDLE - pkg_wdt + EXTERN_WDT_IDLE - external_wdt, + EXTERN_WDT_IDLE, + RX_CB_IDLE - pkg_wdt, + RX_CB_IDLE ); } }