Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Mon Jul 20 19:15:00 2015 +0000
Revision:
130:850163037da5
Parent:
129:d73538fbc017
Child:
132:05cd37f7e007
pkg_wdt - agora reseta somente quando ? recebido um pacote v?lido do tipo REGISTRY.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 121:ee02790d00b7 1 #include "main_app_functions.h"
klauss 120:770f00554b1e 2 #include "main_app_var_configs.h"
klauss 85:b6f2dc1d0f4f 3
klauss 91:c2a86b1f8aaa 4 int main()
klauss 114:472502b31a12 5 {
klauss 100:09a23fcd3bdf 6 debug_uart3 = true;
klauss 119:ee6a53069455 7
klauss 119:ee6a53069455 8 int header_app_init_ret = header_app_init ();
klauss 117:e9facba9db27 9
klauss 119:ee6a53069455 10 send_msg( "header_app_init %s" , ( header_app_init_ret == 0 ) ? "Ok" : "Failure" );
klauss 99:e80850c51106 11
klauss 119:ee6a53069455 12 if ( header_app_init_ret == 0 ) send_msg("Ready");
klauss 105:a930035b6556 13
klauss 114:472502b31a12 14 debug_uart3 = false;
klauss 105:a930035b6556 15
klauss 119:ee6a53069455 16 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 115:a1e1e2e60a2c 17
klauss 119:ee6a53069455 18 while( true )
klauss 119:ee6a53069455 19 {
klauss 126:1f90756250fb 20 prompt_process( NULL, 0 );
klauss 126:1f90756250fb 21
klauss 126:1f90756250fb 22 if ( show_last_rx )
klauss 126:1f90756250fb 23 {
klauss 127:e7160a463b6c 24 if ( v_call -> size () == 0 ) show_last_rx_pkg_from_cbx ();
klauss 126:1f90756250fb 25 show_last_rx = false;
klauss 126:1f90756250fb 26 }
klauss 126:1f90756250fb 27
klauss 126:1f90756250fb 28 if ( show_last_tx )
klauss 126:1f90756250fb 29 {
klauss 127:e7160a463b6c 30 if ( v_call -> size () == 0 ) show_last_tx_pkg_from_cbx ();
klauss 126:1f90756250fb 31 show_last_tx = false;
klauss 126:1f90756250fb 32 }
klauss 126:1f90756250fb 33
klauss 124:c1b6c893e1c3 34 if ( show_hello_status )
klauss 124:c1b6c893e1c3 35 {
klauss 124:c1b6c893e1c3 36 show_hello_status_function ();
klauss 124:c1b6c893e1c3 37 show_hello_status = false;
klauss 124:c1b6c893e1c3 38 }
klauss 124:c1b6c893e1c3 39
klauss 78:1353744f01e1 40 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 91:c2a86b1f8aaa 41
klauss 120:770f00554b1e 42 if ( sync_timer.read() > 5 )
klauss 119:ee6a53069455 43 {
klauss 78:1353744f01e1 44 sync_timer.reset();
klauss 91:c2a86b1f8aaa 45
klauss 119:ee6a53069455 46 if( debug_cks == true ) { pcks_s = true; }
klauss 91:c2a86b1f8aaa 47
klauss 119:ee6a53069455 48 if( debug_alive == true ) { pshowcb = true; }
klauss 105:a930035b6556 49
klauss 114:472502b31a12 50 if( !( ++count % 15 ) ) {
klauss 91:c2a86b1f8aaa 51 if( eth_status ) {
klauss 119:ee6a53069455 52 try_reconnect_with_eth ();
klauss 78:1353744f01e1 53 }
klauss 78:1353744f01e1 54 }
klauss 100:09a23fcd3bdf 55
klauss 114:472502b31a12 56 //35 sec.
klauss 126:1f90756250fb 57 if( ( count > 7 ) and ( wake_all == false ) ) {
klauss 81:3656f00ab3db 58 wake_all = true;
klauss 78:1353744f01e1 59 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 60 }
klauss 119:ee6a53069455 61
klauss 119:ee6a53069455 62 // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth
klauss 119:ee6a53069455 63 if ( debug_missed ) { missed_send_udp_pkg = true; }
klauss 119:ee6a53069455 64
klauss 114:472502b31a12 65 }
klauss 124:c1b6c893e1c3 66
klauss 124:c1b6c893e1c3 67 if ( show_wake_all_up_status )
klauss 124:c1b6c893e1c3 68 {
klauss 124:c1b6c893e1c3 69 send_msg("wake_all_up status :: %s", ( wake_all ) ? "Enable" : "Disable" );
klauss 124:c1b6c893e1c3 70 show_wake_all_up_status = false;
klauss 124:c1b6c893e1c3 71 }
klauss 119:ee6a53069455 72
klauss 119:ee6a53069455 73 check_clock ();
klauss 114:472502b31a12 74
klauss 119:ee6a53069455 75 if ( r_stats )
klauss 119:ee6a53069455 76 {
klauss 119:ee6a53069455 77 reset_stats ();
klauss 120:770f00554b1e 78 stats = true;
klauss 63:0d95da692bb4 79 r_stats = false;
klauss 63:0d95da692bb4 80 }
klauss 91:c2a86b1f8aaa 81
klauss 119:ee6a53069455 82 if ( stats )
klauss 119:ee6a53069455 83 {
klauss 119:ee6a53069455 84 show_stats ();
klauss 63:0d95da692bb4 85 stats =false;
klauss 63:0d95da692bb4 86 }
klauss 114:472502b31a12 87
klauss 119:ee6a53069455 88 if ( list )
klauss 119:ee6a53069455 89 {
klauss 119:ee6a53069455 90 show_cb_list ( v_cb );
klauss 91:c2a86b1f8aaa 91 list = false;
klauss 114:472502b31a12 92 }
klauss 114:472502b31a12 93
klauss 119:ee6a53069455 94 if ( long_list )
klauss 106:a34fcf9f0e02 95 {
klauss 123:1d395b5a4cad 96 show_cb_long_list ( v_cb, show_time );
klauss 91:c2a86b1f8aaa 97 long_list = false;
klauss 123:1d395b5a4cad 98 show_time = false;
klauss 52:12930cef17c4 99 }
klauss 119:ee6a53069455 100
klauss 119:ee6a53069455 101 if ( pshowcb )
klauss 119:ee6a53069455 102 {
klauss 119:ee6a53069455 103 show_cb ( v_cb );
klauss 78:1353744f01e1 104 pshowcb = false;
klauss 48:195c97f12e8e 105 }
klauss 97:8985817e8847 106
klauss 124:c1b6c893e1c3 107 if ( request_clock_now )
klauss 124:c1b6c893e1c3 108 {
klauss 124:c1b6c893e1c3 109 request_clock_to_server ();
klauss 124:c1b6c893e1c3 110 show_current_time = true;
klauss 124:c1b6c893e1c3 111 request_clock_now = false;
klauss 124:c1b6c893e1c3 112 }
klauss 124:c1b6c893e1c3 113
klauss 119:ee6a53069455 114 if ( show_current_time )
klauss 119:ee6a53069455 115 {
klauss 119:ee6a53069455 116 show_clock ();
klauss 119:ee6a53069455 117 show_current_time = false;;
klauss 119:ee6a53069455 118 }
klauss 119:ee6a53069455 119
klauss 120:770f00554b1e 120 if( show_sip ){
klauss 120:770f00554b1e 121 show_cb_sip ( v_cb );
klauss 97:8985817e8847 122 show_sip = false;
klauss 97:8985817e8847 123 }
klauss 91:c2a86b1f8aaa 124
klauss 81:3656f00ab3db 125 if( pflood == true ) flood();
klauss 91:c2a86b1f8aaa 126
klauss 91:c2a86b1f8aaa 127 if( debug_eth ) {
klauss 120:770f00554b1e 128 send_msg("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" );
klauss 81:3656f00ab3db 129 debug_eth = false;
klauss 81:3656f00ab3db 130 }
klauss 126:1f90756250fb 131
klauss 126:1f90756250fb 132
klauss 91:c2a86b1f8aaa 133
klauss 120:770f00554b1e 134 // chechando se existe um pacote vindo do cbx pendente
klauss 121:ee02790d00b7 135 if( status != WAITING )
klauss 121:ee02790d00b7 136 {
klauss 126:1f90756250fb 137 process_received_pkg_from_cbx ();
klauss 126:1f90756250fb 138 }
klauss 126:1f90756250fb 139 else if ( test_ts and test_ts_timer.read_ms () > 10 )
klauss 126:1f90756250fb 140 {
klauss 126:1f90756250fb 141 if ( v_cb -> size () not_eq 0 )
klauss 126:1f90756250fb 142 {
klauss 126:1f90756250fb 143 Call_Box * cb = ( Call_Box * ) v_cb -> get_element ( 0 );
klauss 126:1f90756250fb 144 if ( cb not_eq NULL )
klauss 126:1f90756250fb 145 {
klauss 126:1f90756250fb 146 ext = cb -> get_ext ();
klauss 126:1f90756250fb 147 port = cb -> get_port ();
klauss 126:1f90756250fb 148 }
klauss 126:1f90756250fb 149 }
klauss 126:1f90756250fb 150 else
klauss 126:1f90756250fb 151 {
klauss 126:1f90756250fb 152 ext = 5000;
klauss 126:1f90756250fb 153 port = 5000;
klauss 126:1f90756250fb 154 }
klauss 126:1f90756250fb 155
klauss 126:1f90756250fb 156 type = INVITE;
klauss 126:1f90756250fb 157 data = buffer;
klauss 126:1f90756250fb 158
klauss 126:1f90756250fb 159 test_ts_timer.reset ();
klauss 0:4d17cd9c8f9d 160 }
klauss 91:c2a86b1f8aaa 161
klauss 119:ee6a53069455 162 if( sizes == true )
klauss 119:ee6a53069455 163 {
klauss 120:770f00554b1e 164 show_sizes ();
klauss 119:ee6a53069455 165 sizes = false;
klauss 109:a5b8264ffbbc 166 }
klauss 109:a5b8264ffbbc 167
klauss 120:770f00554b1e 168 // usado pra testes
klauss 114:472502b31a12 169 if ( registra )
klauss 112:6ae726539ab9 170 {
klauss 112:6ae726539ab9 171 int internal_ext = 8000;
klauss 112:6ae726539ab9 172 registra = false;
klauss 123:1d395b5a4cad 173 for( register uint8_t i = 0; i < MAX_CB_IN_A_BRANCH - 2; i++ ) {
klauss 112:6ae726539ab9 174 v_cb -> add ( new Call_Box ( internal_ext, internal_ext++ ) );
klauss 112:6ae726539ab9 175 }
klauss 112:6ae726539ab9 176 }
klauss 112:6ae726539ab9 177
klauss 120:770f00554b1e 178 check_udp_packages_pending ( v_cb );
klauss 120:770f00554b1e 179
klauss 120:770f00554b1e 180 if( dshow_rtp == true )
klauss 109:a5b8264ffbbc 181 {
klauss 120:770f00554b1e 182 show_rtp ();
klauss 120:770f00554b1e 183 dshow_rtp = false;
klauss 120:770f00554b1e 184 }
klauss 117:e9facba9db27 185
klauss 120:770f00554b1e 186 // usado pra test
klauss 120:770f00554b1e 187 if ( frtp )
klauss 120:770f00554b1e 188 {
klauss 120:770f00554b1e 189 fuck_rtp ( v_cb );
klauss 120:770f00554b1e 190 frtp = false;
klauss 109:a5b8264ffbbc 191 }
klauss 109:a5b8264ffbbc 192
klauss 120:770f00554b1e 193 // usado pra test
klauss 109:a5b8264ffbbc 194 if ( rescue_rtp )
klauss 109:a5b8264ffbbc 195 {
klauss 109:a5b8264ffbbc 196 rescue_rtp = false;
klauss 121:ee02790d00b7 197 Call_Box * cb = find_CB( v_cb, rescue_rtp_target );
klauss 109:a5b8264ffbbc 198 if ( cb != NULL )
klauss 109:a5b8264ffbbc 199 {
klauss 109:a5b8264ffbbc 200 cb -> set_rtp_port ( rescue_rtp_value );
klauss 109:a5b8264ffbbc 201 }
klauss 109:a5b8264ffbbc 202 else
klauss 109:a5b8264ffbbc 203 {
klauss 109:a5b8264ffbbc 204 debug_msg("rescue rtp fail");
klauss 109:a5b8264ffbbc 205 }
klauss 109:a5b8264ffbbc 206 }
klauss 109:a5b8264ffbbc 207
klauss 109:a5b8264ffbbc 208 if ( print_v_cb )
klauss 109:a5b8264ffbbc 209 {
klauss 120:770f00554b1e 210 v_cb->print_yourself ();
klauss 109:a5b8264ffbbc 211 print_v_cb = false;
klauss 109:a5b8264ffbbc 212 }
klauss 109:a5b8264ffbbc 213
klauss 109:a5b8264ffbbc 214 if ( print_v_call )
klauss 109:a5b8264ffbbc 215 {
klauss 109:a5b8264ffbbc 216 v_call->print_yourself ();
klauss 120:770f00554b1e 217 print_v_call = false;
klauss 109:a5b8264ffbbc 218 }
klauss 109:a5b8264ffbbc 219
klauss 109:a5b8264ffbbc 220 if ( print_cb_var )
klauss 109:a5b8264ffbbc 221 {
klauss 120:770f00554b1e 222 show_cb_content ();
klauss 109:a5b8264ffbbc 223 print_cb_var = false;
klauss 109:a5b8264ffbbc 224 }
klauss 109:a5b8264ffbbc 225
klauss 109:a5b8264ffbbc 226 if ( print_cb_all )
klauss 109:a5b8264ffbbc 227 {
klauss 120:770f00554b1e 228 show_cb_content_all ();
klauss 109:a5b8264ffbbc 229 print_cb_all = false;
klauss 109:a5b8264ffbbc 230 }
klauss 109:a5b8264ffbbc 231
klauss 109:a5b8264ffbbc 232 if ( print_hex_cb_var )
klauss 109:a5b8264ffbbc 233 {
klauss 120:770f00554b1e 234 show_hex_cb_content ();
klauss 109:a5b8264ffbbc 235 print_hex_cb_var = false;
klauss 81:3656f00ab3db 236 }
klauss 106:a34fcf9f0e02 237
klauss 109:a5b8264ffbbc 238 if ( print_hex_cb_all )
klauss 109:a5b8264ffbbc 239 {
klauss 120:770f00554b1e 240 show_hex_cb_content_all ();
klauss 109:a5b8264ffbbc 241 print_hex_cb_all = false;
klauss 109:a5b8264ffbbc 242 }
klauss 106:a34fcf9f0e02 243
klauss 120:770f00554b1e 244 if ( print_sip_var )
klauss 109:a5b8264ffbbc 245 {
klauss 120:770f00554b1e 246 show_cB_sip ();
klauss 120:770f00554b1e 247 print_sip_var = false;
klauss 120:770f00554b1e 248 }
klauss 109:a5b8264ffbbc 249
klauss 120:770f00554b1e 250 if ( print_sip_all )
klauss 120:770f00554b1e 251 {
klauss 120:770f00554b1e 252 show_cB_sip_all ();
klauss 120:770f00554b1e 253 print_sip_all = false;
klauss 120:770f00554b1e 254 }
klauss 120:770f00554b1e 255
klauss 120:770f00554b1e 256 if ( print_hex_sip_var )
klauss 120:770f00554b1e 257 {
klauss 120:770f00554b1e 258 show_cB_hex_sip ();
klauss 120:770f00554b1e 259 print_hex_sip_var = false;
klauss 120:770f00554b1e 260 }
klauss 109:a5b8264ffbbc 261
klauss 109:a5b8264ffbbc 262 if( dcallshow_rtp == true ){
klauss 120:770f00554b1e 263 show_rtp_on_call ();
klauss 109:a5b8264ffbbc 264 dcallshow_rtp = false;
klauss 109:a5b8264ffbbc 265 }
klauss 109:a5b8264ffbbc 266
klauss 109:a5b8264ffbbc 267 if ( print_call_var )
klauss 109:a5b8264ffbbc 268 {
klauss 120:770f00554b1e 269 show_call ();
klauss 109:a5b8264ffbbc 270 print_call_var = false;
klauss 120:770f00554b1e 271
klauss 109:a5b8264ffbbc 272 }
klauss 109:a5b8264ffbbc 273
klauss 109:a5b8264ffbbc 274 if ( print_hex_call_var )
klauss 109:a5b8264ffbbc 275 {
klauss 120:770f00554b1e 276 show_hex_call ();
klauss 109:a5b8264ffbbc 277 print_hex_call_var = false;
klauss 109:a5b8264ffbbc 278 }
klauss 109:a5b8264ffbbc 279
klauss 109:a5b8264ffbbc 280
klauss 109:a5b8264ffbbc 281 if ( print_hex_rtp_var )
klauss 109:a5b8264ffbbc 282 {
klauss 120:770f00554b1e 283 show_cb_rtp ();
klauss 109:a5b8264ffbbc 284 print_hex_rtp_var = false;
klauss 109:a5b8264ffbbc 285 }
klauss 109:a5b8264ffbbc 286
klauss 109:a5b8264ffbbc 287 if ( print_rtp_var )
klauss 109:a5b8264ffbbc 288 {
klauss 120:770f00554b1e 289 show_cb_hex_rtp ();
klauss 109:a5b8264ffbbc 290 print_rtp_var = false;
klauss 81:3656f00ab3db 291 }
klauss 91:c2a86b1f8aaa 292
klauss 120:770f00554b1e 293 if( reset_cks == true )
klauss 120:770f00554b1e 294 {
klauss 120:770f00554b1e 295 reset_stats_cks ();
klauss 120:770f00554b1e 296 pcks_s = true;
klauss 120:770f00554b1e 297 reset_cks = false;
klauss 120:770f00554b1e 298 }
klauss 120:770f00554b1e 299
klauss 91:c2a86b1f8aaa 300 if( pcks_s == true ) {
klauss 120:770f00554b1e 301 show_cb_stats ();
klauss 81:3656f00ab3db 302 pcks_s = false;
klauss 81:3656f00ab3db 303 }
klauss 119:ee6a53069455 304
klauss 120:770f00554b1e 305 if( reset_missed_send_udp_pkg )
klauss 120:770f00554b1e 306 {
klauss 120:770f00554b1e 307 reset_missed_send_udp ();
klauss 120:770f00554b1e 308 missed_send_udp_pkg = true;
klauss 119:ee6a53069455 309 reset_missed_send_udp_pkg = false;
klauss 119:ee6a53069455 310 }
klauss 119:ee6a53069455 311
klauss 120:770f00554b1e 312
klauss 124:c1b6c893e1c3 313 if ( missed_send_udp_pkg )
klauss 119:ee6a53069455 314 {
klauss 120:770f00554b1e 315 show_missed_send_udp_pkg ();
klauss 119:ee6a53069455 316 missed_send_udp_pkg = false;
klauss 119:ee6a53069455 317 }
klauss 124:c1b6c893e1c3 318
klauss 121:ee02790d00b7 319 // usado pra test
klauss 126:1f90756250fb 320 if ( flood_bug_pkg ){
klauss 100:09a23fcd3bdf 321 static int id = 0x10;
klauss 100:09a23fcd3bdf 322 if( id < 10 ) id = 0x0b;
klauss 119:ee6a53069455 323 send2callboxes( build_cb_package( 5828, 5123, REGISTRY,
klauss 119:ee6a53069455 324 ( char * )buffer, id++, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 100:09a23fcd3bdf 325 }
klauss 100:09a23fcd3bdf 326
klauss 126:1f90756250fb 327 if ( led_sync_timer.read() > 1 ) {
klauss 78:1353744f01e1 328 led_sync_timer.reset();
klauss 78:1353744f01e1 329 led3 = !led3;
klauss 78:1353744f01e1 330 CAB_LED = !CAB_LED;
klauss 78:1353744f01e1 331 }
klauss 126:1f90756250fb 332
klauss 126:1f90756250fb 333 switch( type )
klauss 126:1f90756250fb 334 {
klauss 126:1f90756250fb 335 case DO_NOTHING :{}
klauss 91:c2a86b1f8aaa 336 break;
klauss 91:c2a86b1f8aaa 337
klauss 126:1f90756250fb 338 case CB_BYE :
klauss 126:1f90756250fb 339 {
klauss 63:0d95da692bb4 340 cb_bye_counter++;
klauss 121:ee02790d00b7 341 Call_Box * cb = find_CB( v_cb, ext );
klauss 91:c2a86b1f8aaa 342 if( cb != NULL ) {
klauss 126:1f90756250fb 343 if( debug_invite or debug_main ) debug_msg("[%d] Bye pkg - msg_id %d e pkg_id %d", ext, cb->get_msg_id(), data[ 0 ] );
klauss 92:92df17f538a8 344
klauss 81:3656f00ab3db 345 bool already_removed = true;
klauss 119:ee6a53069455 346
klauss 119:ee6a53069455 347 if( cb->get_status() != cb_idle ) {
klauss 119:ee6a53069455 348 already_removed = false;
klauss 119:ee6a53069455 349
klauss 119:ee6a53069455 350 data[ TIMESLICE_PLACE ] = 0;
klauss 119:ee6a53069455 351
klauss 119:ee6a53069455 352 send2callboxes( build_cb_package( ext, port, CB_BYE,
klauss 126:1f90756250fb 353 ( char * )data, data[ 0 ] or_eq BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 119:ee6a53069455 354
klauss 119:ee6a53069455 355 ts->return_timeslice( cb->call_end () );
klauss 119:ee6a53069455 356 }
klauss 119:ee6a53069455 357
klauss 126:1f90756250fb 358 if( already_removed ) if( debug_main or debug_invite ) debug_msg( "[%d] Already removed from inviting queue", ext );
klauss 119:ee6a53069455 359
klauss 119:ee6a53069455 360 already_removed = true;
klauss 119:ee6a53069455 361
klauss 119:ee6a53069455 362 for ( register uint8_t i = 0; i < v_call->size(); i++ )
klauss 119:ee6a53069455 363 {
klauss 0:4d17cd9c8f9d 364 VZ_call * call = (VZ_call *)v_call->get_element( i );
klauss 119:ee6a53069455 365 if( call->get_cb_ext() == ext )
klauss 119:ee6a53069455 366 {
klauss 81:3656f00ab3db 367 already_removed = false;
klauss 119:ee6a53069455 368
klauss 119:ee6a53069455 369 data[ TIMESLICE_PLACE ] = 0;
klauss 91:c2a86b1f8aaa 370
klauss 81:3656f00ab3db 371 v_call->remove_element( i );
klauss 119:ee6a53069455 372
klauss 119:ee6a53069455 373 send2callboxes( build_cb_package( ext, port, CB_BYE,
klauss 126:1f90756250fb 374 ( char * )data, data[ 0 ] or_eq BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 375
klauss 3:cd9148672e25 376 delete( call );
klauss 119:ee6a53069455 377
klauss 119:ee6a53069455 378 ts->return_timeslice( cb->call_end () );
klauss 0:4d17cd9c8f9d 379 }
klauss 0:4d17cd9c8f9d 380 }
klauss 119:ee6a53069455 381
klauss 126:1f90756250fb 382 if( already_removed ) if( debug_main or debug_invite ) debug_msg( "[%d] Already removed from vector call", ext );
klauss 82:f55d13babca0 383
klauss 119:ee6a53069455 384 cb -> registry();
klauss 119:ee6a53069455 385
klauss 126:1f90756250fb 386 } else if ( debug_invite or debug_main ) debug_msg("[%d] Bye from who ?", ext );
klauss 91:c2a86b1f8aaa 387 }
klauss 91:c2a86b1f8aaa 388 break;
klauss 91:c2a86b1f8aaa 389
klauss 126:1f90756250fb 390 case INVITE :
klauss 126:1f90756250fb 391 {
klauss 126:1f90756250fb 392 if ( drop_invite_pkg )
klauss 126:1f90756250fb 393 {
klauss 119:ee6a53069455 394 debug_msg("[%d] Dropando invite pck - msg id :: %d", ext, data[ 0 ] );
klauss 114:472502b31a12 395 break;
klauss 114:472502b31a12 396 }
klauss 119:ee6a53069455 397
klauss 63:0d95da692bb4 398 invite_counter++;
klauss 119:ee6a53069455 399
klauss 126:1f90756250fb 400 if ( debug_invite ) debug_msg ("[%d] Invite request", ext );
klauss 119:ee6a53069455 401
klauss 122:480c44b0e205 402 Call_Box * cb = find_CB ( v_cb, ext );
klauss 119:ee6a53069455 403
klauss 122:480c44b0e205 404 if ( cb == NULL )
klauss 122:480c44b0e205 405 {
klauss 122:480c44b0e205 406 if ( v_cb -> size () < MAX_CB_IN_A_BRANCH )
klauss 122:480c44b0e205 407 {
klauss 126:1f90756250fb 408 if ( debug_main or debug_invite ) debug_msg ( "[%d] Adding CBx", ext );
klauss 122:480c44b0e205 409 cb = new Call_Box ( ext, port );
klauss 91:c2a86b1f8aaa 410
klauss 122:480c44b0e205 411 if ( cb == NULL )
klauss 122:480c44b0e205 412 {
klauss 91:c2a86b1f8aaa 413 memory_is_over = true;
klauss 126:1f90756250fb 414 if ( debug_memory or debug_invite ) debug_msg ("[%d] Invite allocation cb fail", ext );
klauss 91:c2a86b1f8aaa 415 } else {
klauss 122:480c44b0e205 416 v_cb->add ( cb );
klauss 91:c2a86b1f8aaa 417 }
klauss 89:0fe315117b00 418 }
klauss 0:4d17cd9c8f9d 419 }
klauss 119:ee6a53069455 420
klauss 122:480c44b0e205 421 if ( cb != NULL )
klauss 119:ee6a53069455 422 {
klauss 122:480c44b0e205 423 cb -> invite_retry_count_reset ();
klauss 119:ee6a53069455 424
klauss 122:480c44b0e205 425 cb -> set_msg_id ( data [ 0 ] );
klauss 119:ee6a53069455 426
klauss 122:480c44b0e205 427 if ( cb -> get_status () == cb_idle ) {
klauss 119:ee6a53069455 428 cb -> call_config ();
klauss 126:1f90756250fb 429 if ( test_ts ) debug_msg ("TST::IDLE");
klauss 119:ee6a53069455 430 } else {
klauss 122:480c44b0e205 431 data [ TIMESLICE_PLACE ] = cb -> get_timeslice ();
klauss 119:ee6a53069455 432
klauss 122:480c44b0e205 433 cb -> set_invite_response_pending ();
klauss 126:1f90756250fb 434
klauss 126:1f90756250fb 435 if ( test_ts ) debug_msg ("TST::%u ", data [ TIMESLICE_PLACE ]);
klauss 126:1f90756250fb 436
klauss 126:1f90756250fb 437 send2callboxes ( build_cb_package ( ext, port, INVITE,
klauss 119:ee6a53069455 438 ( char * )data, cb->msg_id_update (), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 92:92df17f538a8 439 }
klauss 119:ee6a53069455 440
klauss 121:ee02790d00b7 441 invite_handler ( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 442 }
klauss 91:c2a86b1f8aaa 443 }
klauss 126:1f90756250fb 444
klauss 91:c2a86b1f8aaa 445 break;
klauss 120:770f00554b1e 446
klauss 119:ee6a53069455 447 case REGISTRY : {
klauss 63:0d95da692bb4 448 registry_counter++;
klauss 121:ee02790d00b7 449 Call_Box * cb = find_CB ( v_cb, ext );
klauss 119:ee6a53069455 450
klauss 121:ee02790d00b7 451 if ( cb == NULL )
klauss 119:ee6a53069455 452 {
klauss 119:ee6a53069455 453 if( v_cb->size() < MAX_CB_IN_A_BRANCH )
klauss 119:ee6a53069455 454 {
klauss 119:ee6a53069455 455 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 91:c2a86b1f8aaa 456 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 457
klauss 91:c2a86b1f8aaa 458 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 459 memory_is_over = true;
klauss 119:ee6a53069455 460 if( debug_memory ) debug_msg("[%d] Registry cb allocation fail", ext );
klauss 91:c2a86b1f8aaa 461 } else {
klauss 91:c2a86b1f8aaa 462 v_cb->add( cb );
klauss 119:ee6a53069455 463 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 91:c2a86b1f8aaa 464 }
klauss 87:679ee0d594a9 465 }
klauss 0:4d17cd9c8f9d 466 }
klauss 119:ee6a53069455 467
klauss 121:ee02790d00b7 468 if ( debug_main ) debug_msg("[%d %d] Registered", ext, port );
klauss 91:c2a86b1f8aaa 469
klauss 126:1f90756250fb 470 int registry_ret = -1;
klauss 126:1f90756250fb 471
klauss 126:1f90756250fb 472 if ( cb != NULL ) registry_ret = cb -> registry ();
klauss 126:1f90756250fb 473
klauss 130:850163037da5 474 if ( ( registry_ret > 0 ) and eth_status ) try_reconnect_with_eth ();
klauss 130:850163037da5 475
klauss 130:850163037da5 476 /* Resetando o timer usado no wdt somente no recebimento de
klauss 130:850163037da5 477 pacotes validos do tipo REGISTRY.
klauss 130:850163037da5 478 */
klauss 130:850163037da5 479 pkg_wdt = RX_CB_IDLE;
klauss 91:c2a86b1f8aaa 480 }
klauss 91:c2a86b1f8aaa 481 break;
klauss 120:770f00554b1e 482
klauss 119:ee6a53069455 483 case BOOT : {
klauss 63:0d95da692bb4 484 boot_counter++;
klauss 99:e80850c51106 485 if( debug_boot == true ){
klauss 119:ee6a53069455 486 send_msg("[%d %d] Boot pkg -- pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 487 }
klauss 119:ee6a53069455 488 send2callboxes( build_cb_package( ext, port, REGISTRY,
klauss 126:1f90756250fb 489 ( char * )data, data[ 0 ] bitor BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 490 }
klauss 117:e9facba9db27 491 break;
klauss 117:e9facba9db27 492
klauss 119:ee6a53069455 493 case FW : {
klauss 126:1f90756250fb 494 if ( debug_fw_print ) send_msg ("[%d %d]::FW pkg::", ext, port );
klauss 126:1f90756250fb 495 fw_cbx_pkg ( ext, ( char *) buffer );
klauss 99:e80850c51106 496 }
klauss 99:e80850c51106 497 break;
klauss 91:c2a86b1f8aaa 498
klauss 119:ee6a53069455 499 case BOOTLOADER_CBX : {
klauss 117:e9facba9db27 500 uint16_t bl_cnt2 = 0;
klauss 117:e9facba9db27 501 //char bl_send_buffer[ BL_SIZE + 2 ];
klauss 117:e9facba9db27 502 //int ret = bl_cbx_reply_to_eth( ext, ( char * )data );
klauss 117:e9facba9db27 503 //BLEUBA
klauss 117:e9facba9db27 504 //pc.printf("\r\nCBX RESPONDEU BOOTLOADER!\r\n");
klauss 117:e9facba9db27 505 if (debug_bootloader) {
klauss 117:e9facba9db27 506 pc.printf("\r\npacote CBX->HDR {");
klauss 117:e9facba9db27 507 for (bl_cnt2 = 0;bl_cnt2 < BL_SIZE + 1;bl_cnt2++) {
klauss 117:e9facba9db27 508 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 509 pc.printf("\r\n ");
klauss 117:e9facba9db27 510 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 511 pc.printf(" : ");
klauss 117:e9facba9db27 512 }
klauss 117:e9facba9db27 513 pc.printf(hex8(data[bl_cnt2]));
klauss 117:e9facba9db27 514 pc.printf(", ");
klauss 117:e9facba9db27 515 }
klauss 117:e9facba9db27 516 pc.printf("\r\n}");
klauss 117:e9facba9db27 517 }
klauss 67:cdedc64d9921 518 bootloader_cbx_counter++;
klauss 117:e9facba9db27 519 bl_send_buffer[0] = (char)(ext >> 8);
klauss 117:e9facba9db27 520 bl_send_buffer[1] = (char)(ext & 0xff);
klauss 117:e9facba9db27 521 for (bl_cnt2 = 0; bl_cnt2 < BL_SIZE; bl_cnt2++) {
klauss 117:e9facba9db27 522 bl_send_buffer[bl_cnt2 + 2] = data[bl_cnt2 + 1];
klauss 117:e9facba9db27 523 }
klauss 117:e9facba9db27 524 if (debug_bootloader) {
klauss 117:e9facba9db27 525 pc.printf("\r\npacote HDR->SRV {");
klauss 117:e9facba9db27 526 for (bl_cnt2 = 0;bl_cnt2 < UDP_BL_SIZE;bl_cnt2++) {
klauss 117:e9facba9db27 527 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 528 pc.printf("\r\n ");
klauss 117:e9facba9db27 529 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 530 pc.printf(" : ");
klauss 117:e9facba9db27 531 }
klauss 117:e9facba9db27 532 pc.printf(hex8(bl_send_buffer[bl_cnt2]));
klauss 117:e9facba9db27 533 pc.printf(", ");
klauss 117:e9facba9db27 534 }
klauss 117:e9facba9db27 535 pc.printf("\r\n}");
klauss 117:e9facba9db27 536 }
klauss 117:e9facba9db27 537 udp_bl_client.sendTo( udp_bl_server, bl_send_buffer, UDP_BL_SIZE );
klauss 91:c2a86b1f8aaa 538 }
klauss 91:c2a86b1f8aaa 539 break;
klauss 91:c2a86b1f8aaa 540
klauss 119:ee6a53069455 541 case PROMPT : {
klauss 129:d73538fbc017 542 Call_Box * cb = find_CB ( v_cb, ext );
klauss 91:c2a86b1f8aaa 543
klauss 91:c2a86b1f8aaa 544 if( cb == NULL ) {
klauss 119:ee6a53069455 545 if( v_cb->size() < MAX_CB_IN_A_BRANCH ) {
klauss 119:ee6a53069455 546 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 119:ee6a53069455 547 cb = new Call_Box( ext, port );
klauss 119:ee6a53069455 548 if( cb == NULL ){
klauss 119:ee6a53069455 549 memory_is_over = true;
klauss 119:ee6a53069455 550 }else{
klauss 119:ee6a53069455 551 v_cb->add( cb );
klauss 119:ee6a53069455 552 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 119:ee6a53069455 553 }
klauss 87:679ee0d594a9 554 }
klauss 48:195c97f12e8e 555 }
klauss 91:c2a86b1f8aaa 556
klauss 126:1f90756250fb 557 if( cb!= NULL ) cb -> registry ();
klauss 91:c2a86b1f8aaa 558
klauss 126:1f90756250fb 559 // if( ( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) or xstrmatch ( ( uint8_t * )data, ( uint8_t * )"pong" ) )
klauss 126:1f90756250fb 560 if ( ( strncasecmp ( ( const char * )data, "ping", 4 ) == 0 ) or ( strncasecmp ( ( const char * )data, "pong", 4 ) == 0 ) )
klauss 126:1f90756250fb 561 {
klauss 119:ee6a53069455 562 if( debug_ping ) send_msg( "[%d %d] Prompt pkg :: Ping", ext, port );
klauss 126:1f90756250fb 563 }
klauss 126:1f90756250fb 564 else
klauss 126:1f90756250fb 565 {
klauss 78:1353744f01e1 566 prompt_counter++;
klauss 119:ee6a53069455 567 send_msg( "[%i, %i] Prompt pkg::", ext, port );
klauss 91:c2a86b1f8aaa 568 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 569 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 570 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 571 }
klauss 100:09a23fcd3bdf 572 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 573
klauss 114:472502b31a12 574 if( tcp_session ) {
klauss 119:ee6a53069455 575 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 119:ee6a53069455 576 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 78:1353744f01e1 577 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 578 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 579 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 580 }
klauss 48:195c97f12e8e 581 }
klauss 91:c2a86b1f8aaa 582 }
klauss 91:c2a86b1f8aaa 583 break;
klauss 120:770f00554b1e 584
klauss 119:ee6a53069455 585 case AUDIO : {
klauss 63:0d95da692bb4 586 audio_counter++;
klauss 119:ee6a53069455 587 if ( received_audio_from_cb ) {
klauss 119:ee6a53069455 588 debug_msg("[%d] audio pkg", ext );
klauss 119:ee6a53069455 589 }
klauss 119:ee6a53069455 590
klauss 126:1f90756250fb 591 VZ_call * call = find_Call ( v_call, ext );
klauss 126:1f90756250fb 592 if ( call != NULL )
klauss 126:1f90756250fb 593 {
klauss 126:1f90756250fb 594 if ( drop_rtp_from_cbx_pkg )
klauss 126:1f90756250fb 595 {
klauss 114:472502b31a12 596 led2 = !led2;
klauss 114:472502b31a12 597 break;
klauss 119:ee6a53069455 598 } else {
klauss 126:1f90756250fb 599 char * pkg = call -> build_eth_package ( data + 2 );
klauss 126:1f90756250fb 600 call -> send_message ( pkg );
klauss 126:1f90756250fb 601 call -> cbx_pkg_idle_timer_reset();
klauss 114:472502b31a12 602 }
klauss 119:ee6a53069455 603 }
klauss 119:ee6a53069455 604
klauss 121:ee02790d00b7 605 Call_Box * cb = find_CB( v_cb, ext );
klauss 126:1f90756250fb 606 if ( cb != NULL )
klauss 126:1f90756250fb 607 {
klauss 126:1f90756250fb 608 if ( cb -> get_invite_response() == false )
klauss 126:1f90756250fb 609 {
klauss 126:1f90756250fb 610 cb -> set_invite_response_ok ();
klauss 126:1f90756250fb 611 cb -> invite_retry_count_reset ();
klauss 126:1f90756250fb 612 }
klauss 126:1f90756250fb 613 } else {
klauss 126:1f90756250fb 614 if( debug_main ) debug_msg("[%d] received missed package", ext );
klauss 0:4d17cd9c8f9d 615 }
klauss 91:c2a86b1f8aaa 616 }
klauss 91:c2a86b1f8aaa 617 break;
klauss 114:472502b31a12 618 }// fim switch
klauss 105:a930035b6556 619
klauss 120:770f00554b1e 620 // rajada
klauss 120:770f00554b1e 621 if( invite_retry_timer.read_ms() >= 20 )
klauss 120:770f00554b1e 622 {
klauss 120:770f00554b1e 623 invite_ack_to_cb_handler ( v_cb, v_call );
klauss 112:6ae726539ab9 624
klauss 120:770f00554b1e 625 invite_retry_timer.reset();
klauss 120:770f00554b1e 626 }
klauss 120:770f00554b1e 627
klauss 120:770f00554b1e 628 check_audio_from_ast ( v_cb, v_call );
klauss 99:e80850c51106 629
klauss 120:770f00554b1e 630 wake_up_or_refresh_handler ( v_cb );
klauss 117:e9facba9db27 631
klauss 120:770f00554b1e 632 check_sip_messages_from_ast ( v_cb, v_call );
klauss 119:ee6a53069455 633
klauss 81:3656f00ab3db 634 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 119:ee6a53069455 635 call_manager( v_call, v_cb, ts );
klauss 91:c2a86b1f8aaa 636
klauss 81:3656f00ab3db 637 invite_handler( v_call, v_cb, ts, NULL );
klauss 114:472502b31a12 638
klauss 120:770f00554b1e 639 check_for_runaways_ts ( v_cb, ts );
klauss 112:6ae726539ab9 640
klauss 120:770f00554b1e 641 check_for_unwanted_rtp_ports ( v_cb );
klauss 120:770f00554b1e 642
klauss 72:895ca792c647 643 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 644
klauss 119:ee6a53069455 645 type = DO_NOTHING;
klauss 114:472502b31a12 646
klauss 81:3656f00ab3db 647 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 114:472502b31a12 648
klauss 91:c2a86b1f8aaa 649 if( wdt_timer.read() >= 1 ) {
klauss 122:480c44b0e205 650 if ( -1 == wdt_update () ) debug_msg("Erro!!!!!");
klauss 81:3656f00ab3db 651 wdt_timer.reset();
klauss 114:472502b31a12 652 }
klauss 114:472502b31a12 653
klauss 120:770f00554b1e 654 if( debug_wdt )
klauss 120:770f00554b1e 655 {
klauss 120:770f00554b1e 656 show_wdt_status ();
klauss 81:3656f00ab3db 657 debug_wdt = false;
klauss 120:770f00554b1e 658
klauss 114:472502b31a12 659 }
klauss 123:1d395b5a4cad 660
klauss 123:1d395b5a4cad 661 update_all_cb_timer ( v_cb );
klauss 123:1d395b5a4cad 662
klauss 124:c1b6c893e1c3 663 if ( !dont_say_hello_again ) send_hello_to_cbx ();
klauss 124:c1b6c893e1c3 664
klauss 128:3ae1c74773a8 665 /* Verificacao da fonte de alimentacao */
klauss 128:3ae1c74773a8 666 if ( pwr_src_timer.read () > 1 )
klauss 128:3ae1c74773a8 667 {
klauss 128:3ae1c74773a8 668 check_power_source();
klauss 128:3ae1c74773a8 669 }
klauss 120:770f00554b1e 670 }// fim while
klauss 120:770f00554b1e 671 }// fim main \o/