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 15:16:36 2015 +0000
Revision:
122:480c44b0e205
Parent:
121:ee02790d00b7
Child:
123:1d395b5a4cad
E00 - Limitar em 1500 o show_sip

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