Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
main.cpp
- Committer:
- klauss
- Date:
- 2015-11-24
- Revision:
- 137:32dd35a6dbc9
- Parent:
- 136:2da626f30efa
File content as of revision 137:32dd35a6dbc9:
#include "main_app_functions.h" #include "main_app_var_configs.h" int main() { debug_uart3 = true; int header_app_init_ret = header_app_init (); vz_printf ( "header_app_init %s" , ( header_app_init_ret == 0 ) ? "Ok" : "Failure" ); if ( header_app_init_ret == 0 ) vz_printf ("Ready"); debug_uart3 = false; power_source_timer.start (); bool init_test = true; bool end_test = false; bool init_test_mean = true; bool end_test_mean = false; Timer timer; /*------------------------------------------ main loop ---------------------------------------------------------------*/ while( true ) { if ( main_test_mean ) { const uint16_t u16_COUNT_TIMES = 60000; static uint16_t count = u16_COUNT_TIMES; static uint64_t u_sum = 0; if ( init_test_mean ) { u_sum = 0; count = u16_COUNT_TIMES; init_test_mean = false; timer.start (); timer.reset (); } else if ( count ) { count--; timer.stop (); u_sum += timer.read_us (); timer.start (); timer.reset (); if ( count == 0 ) end_test_mean = true; } else if ( end_test_mean ) { vz_printf ( "Elapsed_time_mean : [ %.2lfu ]", double ( u_sum / u16_COUNT_TIMES ) ); end_test_mean = false; init_test_mean = true; main_test_mean = false; timer.stop (); } } if ( main_test ) { if ( init_test ) { init_test = false; end_test = true; timer.start (); timer.reset (); } else if ( end_test ) { timer.stop (); int u_elapsed_time = timer.read_us (); int m_elapsed_time = timer.read_ms (); int s_elapsed_time = timer.read (); vz_printf ( "Elapsed_time : [ %du, %dm, %ds ]", u_elapsed_time, m_elapsed_time, s_elapsed_time ); end_test = false; init_test = true; main_test = false; } } prompt_process ( NULL, 0 ); if ( cm -> was_modified () ) { update_config_values (); cm -> set_modified_false (); } if ( show_last_rx ) { if ( v_call -> size () == 0 ) show_last_rx_pkg_from_cbx (); show_last_rx = false; } if ( show_last_tx ) { if ( v_call -> size () == 0 ) show_last_tx_pkg_from_cbx (); show_last_tx = false; } if ( show_hello_status ) { show_hello_status_function (); show_hello_status = false; } if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size(); if ( sync_timer.read() > 5 ) { sync_timer.reset(); if( debug_cks == true ) { pcks_s = true; } if( debug_alive == true ) { pshowcb = true; } if( !( ++count % 15 ) ) { if( eth_status ) { try_reconnect_with_eth (); } } //35 sec. if( ( count > 7 ) and ( wake_all == false ) and ( not wake_all_disable ) and ( cm -> get_cbx_wake_mode () ) ) { wake_all = true; if( debug_wake == true ) vz_printf ( "Time to wake" ); } // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth if ( debug_missed ) { missed_send_udp_pkg = true; } } if ( show_wake_all_up_status ) { vz_printf ( "wake_all_up status :: %s", ( wake_all ) ? "Enable" : "Disable" ); show_wake_all_up_status = false; } check_clock (); if ( r_stats ) { reset_stats (); stats = true; r_stats = false; } if ( stats ) { show_stats (); stats =false; } if ( list ) { show_cb_list ( v_cb ); list = false; } if ( long_list ) { show_cb_long_list ( v_cb, show_time, show_invites ); long_list = false; show_time = false; show_invites = false; } if ( pshowcb ) { show_cb ( v_cb ); pshowcb = false; } if ( request_clock_now ) { request_clock_to_server (); show_current_time = true; request_clock_now = false; } if ( show_current_time ) { show_clock (); show_current_time = false;; } if( show_sip ){ show_cb_sip ( v_cb ); show_sip = false; } if( pflood == true ) flood(); if( debug_eth ) { vz_printf ("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" ); debug_eth = false; } // chechando se existe um pacote vindo do cbx pendente if( status != WAITING ) { process_received_pkg_from_cbx (); } else if ( test_ts and test_ts_timer.read_ms () > 10 ) { if ( v_cb -> size () not_eq 0 ) { Call_Box * cb = ( Call_Box * ) v_cb -> get_element ( 0 ); if ( cb not_eq NULL ) { ext = cb -> get_ext (); port = cb -> get_port (); } } else { ext = 5000; port = 5000; } type = INVITE; data = buffer; test_ts_timer.reset (); } else if ( simulate ) { simulate = false; data = buffer; data [ SEQ_NUM_PLACE ] = seq_num_to_simulate; ext = ext_to_simulate; port = port_to_simulate; type = num_type_to_simulate; } if( sizes == true ) { show_sizes (); sizes = false; } // usado pra testes { if ( registra ) { int internal_ext = 8000; registra = false; for( register uint8_t i = 0; i < u8_MAX_CB_IN_A_BRANCH - 2; i++ ) { v_cb -> add ( new Call_Box ( internal_ext, internal_ext++ ) ); } } if ( registra4 ) { int internal_ext = 8000; registra4 = false; for( register uint8_t i = 0; i < 4; i++ ) { v_cb -> add ( new Call_Box ( internal_ext, internal_ext++ ) ); } } if ( need_registry_someone ) { need_registry_someone = false; v_cb -> add ( new Call_Box ( ext_to_be_registered, ext_to_be_registered ) ); ext_to_be_registered = 0; } } check_udp_packages_pending ( v_cb ); if( dshow_rtp == true ) { show_rtp (); dshow_rtp = false; } // usado pra test if ( frtp ) { fuck_rtp ( v_cb ); frtp = false; } // usado pra test if ( rescue_rtp ) { rescue_rtp = false; Call_Box * cb = find_CB( v_cb, rescue_rtp_target ); if ( cb != NULL ) { cb -> set_rtp_port ( rescue_rtp_value ); } else { vz_debug ("rescue rtp fail"); } } if ( print_v_cb ) { v_cb->print_yourself (); print_v_cb = false; } if ( print_v_call ) { v_call->print_yourself (); print_v_call = false; } if ( print_cb_var ) { show_cb_content (); print_cb_var = false; } if ( print_cb_all ) { show_cb_content_all (); print_cb_all = false; } if ( print_hex_cb_var ) { show_hex_cb_content (); print_hex_cb_var = false; } if ( print_hex_cb_all ) { show_hex_cb_content_all (); print_hex_cb_all = false; } if ( print_sip_var ) { show_cb_sip (); print_sip_var = false; } if ( print_sip_all ) { show_cb_sip_all (); print_sip_all = false; } if ( print_hex_sip_var ) { show_cb_hex_sip (); print_hex_sip_var = false; } if( dcallshow_rtp == true ){ show_rtp_on_call (); dcallshow_rtp = false; } if ( print_call_var ) { show_call (); print_call_var = false; } if ( print_hex_call_var ) { show_hex_call (); print_hex_call_var = false; } if ( print_hex_rtp_var ) { show_cb_rtp (); print_hex_rtp_var = false; } if ( print_rtp_var ) { show_cb_hex_rtp (); print_rtp_var = false; } if( reset_cks == true ) { reset_stats_cks (); pcks_s = true; reset_cks = false; } if( pcks_s == true ) { show_cb_stats (); pcks_s = false; } if ( show_wdt_string ) { char wdt_msg [ 1024 ]; build_wdt_string ( wdt_msg, sizeof ( wdt_msg ) - 1 ); int siRet = strlen ( wdt_msg ); vz_printf ( "wdt_msg.length::%d\r\n%s", siRet, wdt_msg ); show_wdt_string = false; } if( reset_missed_send_udp_pkg ) { reset_missed_send_udp (); missed_send_udp_pkg = true; reset_missed_send_udp_pkg = false; } if ( missed_send_udp_pkg ) { show_missed_send_udp_pkg (); missed_send_udp_pkg = false; } // usado pra test if ( flood_bug_pkg ){ static int id = 0x10; if( id < 10 ) id = 0x0b; send2callboxes( build_cb_package( 5828, 5123, REGISTRY, ( char * )buffer, id++, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) ); } if ( led_sync_timer.read() > 1 ) { led_sync_timer.reset(); led3 = !led3; CAB_LED = !CAB_LED; } if ( boolWho_is_your_pair ) { boolWho_is_your_pair = false; Call_Box * cb = find_CB ( v_cb, u16Who_is_your_pair ); if ( cb not_eq NULL ) { cb = cb -> get_pair_cbx (); if ( cb not_eq NULL ) vz_printf ( "[%d] pair [%d]", u16Who_is_your_pair, cb -> get_ext () ); else vz_printf ( "[%d] pair nao encontrado", u16Who_is_your_pair ); } else vz_printf ( "[%d] nao encontrado", u16Who_is_your_pair ); u16Who_is_your_pair = 0; } switch ( type ) { case DO_NOTHING :{} break; case CB_BYE : { cb_bye_counter ++; Call_Box * cb = find_CB ( v_cb, ext ); if ( cb != NULL ) { if ( debug_invite or debug_main ) vz_debug ("[%d] Bye pkg - msg_id %d e pkg_id %d", ext, cb -> get_msg_id (), data [ 0 ] ); bool already_removed = true; if ( cb -> get_status () != cb_idle ) { already_removed = false; data [ TIMESLICE_PLACE ] = 0; send2callboxes ( build_cb_package ( ext, port, CB_BYE, ( char * )data, data [ 0 ] or_eq BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) ); ts -> return_timeslice ( cb -> call_end () ); } if ( already_removed ) if ( debug_main or debug_invite ) vz_debug ( "[%d] Already removed from inviting queue", ext ); already_removed = true; for ( register uint8_t i = 0; i < v_call->size(); i++ ) { VZ_call * call = (VZ_call *)v_call->get_element( i ); if( call->get_cb_ext() == ext ) { already_removed = false; data[ TIMESLICE_PLACE ] = 0; v_call->remove_element( i ); send2callboxes( build_cb_package( ext, port, CB_BYE, ( char * )data, data[ 0 ] or_eq BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) ); delete( call ); ts -> return_timeslice ( cb -> call_end () ); } } if( already_removed ) if( debug_main or debug_invite ) vz_debug ( "[%d] Already removed from vector call", ext ); cb -> registry (); } else if ( debug_invite or debug_main ) vz_debug ("[%d] Bye from who ?", ext ); } break; case INVITE : { if ( drop_invite_pkg ) { vz_debug ("[%d] Dropando invite pck - msg id :: %d", ext, data[ 0 ] ); break; } invite_counter ++; if ( debug_invite ) vz_debug ("[%d] Invite request", ext ); Call_Box * cb = find_CB ( v_cb, ext ); if ( cb == NULL ) cb = try_add_new_cbx ( v_cb, ext ); if ( cb == NULL ) { if ( debug_memory or debug_invite ) vz_debug ("[%d] Invite allocation cb fail", ext ); } else { cb -> update_invite_counter (); cb -> invite_retry_count_reset (); cb -> set_msg_id ( data [ 0 ] ); if ( cb -> get_status () == cb_idle ) { cb -> call_config (); if ( test_ts ) vz_debug ("TST::IDLE"); } else { data [ TIMESLICE_PLACE ] = cb -> get_timeslice (); cb -> set_invite_response_pending (); if ( test_ts ) vz_debug ("TST::%u ", data [ TIMESLICE_PLACE ]); send2callboxes ( build_cb_package ( ext, port, INVITE, ( char * )data, cb->msg_id_update (), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) ); } invite_handler ( v_call, v_cb, ts, cb ); } } break; case REGISTRY : { /* Colocar um if, de que se o cbx já existia, e tinha dado timeout ou por slave ou por mestre, resetar o timer dos 2 */ registry_counter ++; Call_Box * cb = find_CB ( v_cb, ext ); if ( cb == NULL ) cb = try_add_new_cbx ( v_cb, ext ); if ( cb == NULL and debug_memory ) vz_debug ( "[%d] Registry cb allocation fail", ext ); int registry_ret = -1; if ( cb not_eq NULL ) registry_ret = cb -> registry (); if ( ( registry_ret > 0 ) and eth_status ) try_reconnect_with_eth (); if ( debug_main and registry_ret ) vz_debug ( "[%d %d] Registered", ext, port ); pkg_wdt = RX_CB_IDLE; } break; case BOOT : { boot_counter++; if( debug_boot == true ){ vz_printf ("[%d %d] Boot pkg -- pkg-id %d", ext, port, data[ 0 ] ); } send2callboxes( build_cb_package( ext, port, REGISTRY, ( char * )data, data[ 0 ] bitor BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) ); } break; case FW : { if ( debug_fw_print ) vz_printf ("[%d %d]::FW pkg::", ext, port ); fw_cbx_pkg ( ext, ( char *) buffer ); } break; case BOOTLOADER_CBX : { uint16_t bl_cnt2 = 0; if (debug_bootloader) { pc.printf("\r\npacote CBX->HDR {"); for (bl_cnt2 = 0;bl_cnt2 < BL_SIZE + 1;bl_cnt2++) { if ((bl_cnt2 % 30) == 0) { pc.printf("\r\n "); pc.printf(hex16(bl_cnt2)); pc.printf(" : "); } pc.printf(hex8(data[bl_cnt2])); pc.printf(", "); } pc.printf("\r\n}"); } bootloader_cbx_counter++; bl_send_buffer[0] = (char)(ext >> 8); bl_send_buffer[1] = (char)(ext & 0xff); for (bl_cnt2 = 0; bl_cnt2 < BL_SIZE; bl_cnt2++) { bl_send_buffer[bl_cnt2 + 2] = data[bl_cnt2 + 1]; } if (debug_bootloader) { pc.printf("\r\npacote HDR->SRV {"); for (bl_cnt2 = 0;bl_cnt2 < UDP_BL_SIZE;bl_cnt2++) { if ((bl_cnt2 % 30) == 0) { pc.printf("\r\n "); pc.printf(hex16(bl_cnt2)); pc.printf(" : "); } pc.printf(hex8(bl_send_buffer[bl_cnt2])); pc.printf(", "); } pc.printf("\r\n}"); } int udp_bl_client_ret = udp_bl_client.sendTo ( udp_bl_server, bl_send_buffer, UDP_BL_SIZE ); if ( udp_bl_client_ret not_eq UDP_BL_SIZE ) { reconnect_bl (); miss_bl_udp_send_pkg ++; if ( debug_reconnect ) vz_printf ( "[%d] Reconnect BL - %d", ext, udp_bl_client_ret ); } } break; case PROMPT : { Call_Box * cb = find_CB ( v_cb, ext ); if ( cb == NULL ) cb = try_add_new_cbx ( v_cb, ext ); if( cb != NULL ) cb -> registry (); if ( ( strncasecmp ( ( const char * )data, "ping", 4 ) == 0 ) or ( strncasecmp ( ( const char * )data, "pong", 4 ) == 0 ) ) { if( debug_ping ) vz_printf ( "[%d %d] Prompt pkg :: Ping", ext, port ); } else { prompt_counter++; vz_printf ( "[%i, %i] Prompt pkg::", ext, port ); for( register uint8_t i = 0; i < 32; i++ ) { if( debug_uart3 ) pc.printf("%c", data[ i ] ); if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" ); } if( debug_uart3 ) pc.printf("\n\r> "); if( tcp_session ) { char aux[ CB_BUFFER_SIZE + 3 ]; strncpy( aux, (char * )data, CB_BUFFER_SIZE ); strcat( aux, "\n\r\0" ); tcp_client.send_all( ( char *)data, strlen( (char * )data ) ); tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) ); } } } break; case AUDIO : { audio_counter++; if ( received_audio_from_cb ) { vz_debug ("[%d] audio pkg", ext ); } VZ_call * call = find_Call ( v_call, ext ); if ( call != NULL ) { if ( drop_rtp_from_cbx_pkg ) { led2 = !led2; break; } else { char * pkg = call -> build_eth_package ( data + 2 ); call -> send_message ( pkg ); call -> cbx_pkg_idle_timer_reset (); } } Call_Box * cb = find_CB ( v_cb, ext ); if ( cb != NULL ) { if ( cb -> get_invite_response () == false ) { cb -> set_invite_response_ok (); cb -> invite_retry_count_reset (); } } else { if ( debug_main ) vz_debug ("[%d] received missed package", ext ); } } break; }// fim switch // rajada if( invite_retry_timer.read_ms() >= 20 ) { invite_ack_to_cb_handler ( v_cb, v_call ); invite_retry_timer.reset(); } check_audio_from_ast ( v_cb, v_call ); wake_up_or_refresh_handler ( v_cb ); check_sip_messages_from_ast ( v_cb, v_call ); /* Verifica andamento de ligações para eventualmente encerra-las por timeout */ call_manager( v_call, v_cb, ts ); invite_handler( v_call, v_cb, ts, NULL ); check_for_runaways_ts ( v_cb, ts ); check_for_unwanted_rtp_ports ( v_cb ); tx_buffer_ring_buffer_handler(); type = DO_NOTHING; if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT; if( wdt_timer.read() >= 1 ) { if ( -1 == wdt_update () ) vz_debug ("Erro!!!!!"); wdt_timer.reset(); } if( debug_wdt ) { show_wdt_status (); debug_wdt = false; } update_all_cb_timer ( v_cb ); if ( !dont_say_hello_again ) send_hello_to_cbx (); /* Verificacao da fonte de alimentacao */ if ( power_source_timer.read () > 1 ) { check_power_source (); } %: ifdef MODE_TEST wdt.kick(); %: endif }// fim while }// fim main \o/