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 May 11 19:21:39 2015 +0000
Revision:
123:1d395b5a4cad
Parent:
122:480c44b0e205
Child:
124:c1b6c893e1c3
BUXFIX -- E00 - Limitar em 1500 o show_sip - Cria??o de rotina que atualiza timers de cada call_box para n?o ficar desatualizado.; -- Inclus?o da exibi??o do timer no comando "ls -lt" ou "ls -tl"

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