Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Fri May 08 04:15:23 2015 +0000
Revision:
121:ee02790d00b7
Parent:
120:770f00554b1e
Child:
122:480c44b0e205
compiling

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 121:ee02790d00b7 3 #include "header_app_includes.h"
klauss 85:b6f2dc1d0f4f 4
klauss 91:c2a86b1f8aaa 5 int main()
klauss 114:472502b31a12 6 {
klauss 100:09a23fcd3bdf 7 debug_uart3 = true;
klauss 119:ee6a53069455 8
klauss 119:ee6a53069455 9 int header_app_init_ret = header_app_init ();
klauss 117:e9facba9db27 10
klauss 119:ee6a53069455 11 send_msg( "header_app_init %s" , ( header_app_init_ret == 0 ) ? "Ok" : "Failure" );
klauss 99:e80850c51106 12
klauss 119:ee6a53069455 13 if ( header_app_init_ret == 0 ) send_msg("Ready");
klauss 105:a930035b6556 14
klauss 114:472502b31a12 15 debug_uart3 = false;
klauss 105:a930035b6556 16
klauss 119:ee6a53069455 17 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 115:a1e1e2e60a2c 18
klauss 119:ee6a53069455 19 while( true )
klauss 119:ee6a53069455 20 {
klauss 78:1353744f01e1 21 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 91:c2a86b1f8aaa 22
klauss 120:770f00554b1e 23 if ( sync_timer.read() > 5 )
klauss 119:ee6a53069455 24 {
klauss 78:1353744f01e1 25 sync_timer.reset();
klauss 91:c2a86b1f8aaa 26
klauss 119:ee6a53069455 27 if( debug_cks == true ) { pcks_s = true; }
klauss 91:c2a86b1f8aaa 28
klauss 119:ee6a53069455 29 if( debug_alive == true ) { pshowcb = true; }
klauss 105:a930035b6556 30
klauss 114:472502b31a12 31 if( !( ++count % 15 ) ) {
klauss 91:c2a86b1f8aaa 32 if( eth_status ) {
klauss 119:ee6a53069455 33 try_reconnect_with_eth ();
klauss 78:1353744f01e1 34 }
klauss 78:1353744f01e1 35 }
klauss 100:09a23fcd3bdf 36
klauss 114:472502b31a12 37 //35 sec.
klauss 91:c2a86b1f8aaa 38 if( ( count > 7 ) && ( wake_all == false ) ) {
klauss 81:3656f00ab3db 39 wake_all = true;
klauss 78:1353744f01e1 40 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 41 }
klauss 119:ee6a53069455 42
klauss 119:ee6a53069455 43 // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth
klauss 119:ee6a53069455 44 if ( debug_missed ) { missed_send_udp_pkg = true; }
klauss 119:ee6a53069455 45
klauss 114:472502b31a12 46 }
klauss 91:c2a86b1f8aaa 47
klauss 119:ee6a53069455 48 prompt_process( NULL, 0 );
klauss 119:ee6a53069455 49
klauss 119:ee6a53069455 50 check_clock ();
klauss 114:472502b31a12 51
klauss 119:ee6a53069455 52 if ( r_stats )
klauss 119:ee6a53069455 53 {
klauss 119:ee6a53069455 54 reset_stats ();
klauss 120:770f00554b1e 55 stats = true;
klauss 63:0d95da692bb4 56 r_stats = false;
klauss 63:0d95da692bb4 57 }
klauss 91:c2a86b1f8aaa 58
klauss 119:ee6a53069455 59 if ( stats )
klauss 119:ee6a53069455 60 {
klauss 119:ee6a53069455 61 show_stats ();
klauss 63:0d95da692bb4 62 stats =false;
klauss 63:0d95da692bb4 63 }
klauss 114:472502b31a12 64
klauss 119:ee6a53069455 65 if ( list )
klauss 119:ee6a53069455 66 {
klauss 119:ee6a53069455 67 show_cb_list ( v_cb );
klauss 91:c2a86b1f8aaa 68 list = false;
klauss 114:472502b31a12 69 }
klauss 114:472502b31a12 70
klauss 119:ee6a53069455 71 if ( long_list )
klauss 106:a34fcf9f0e02 72 {
klauss 119:ee6a53069455 73 show_cb_long_list ( v_cb );
klauss 91:c2a86b1f8aaa 74 long_list = 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 112:6ae726539ab9 118 for( register uint8_t i = 0; i < 4; 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 121:ee02790d00b7 344 Call_Box * cb = find_CB( v_cb, ext );
klauss 119:ee6a53069455 345
klauss 91:c2a86b1f8aaa 346 if( cb == NULL ) {
klauss 119:ee6a53069455 347 if( v_cb->size() < MAX_CB_IN_A_BRANCH ) {
klauss 119:ee6a53069455 348 if( debug_main ) debug_msg( "[%d] Adding CBx", ext );
klauss 91:c2a86b1f8aaa 349 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 350
klauss 91:c2a86b1f8aaa 351 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 352 memory_is_over = true;
klauss 119:ee6a53069455 353 if( debug_memory ) debug_msg("[%d] Invite allocation cb fail", ext );
klauss 91:c2a86b1f8aaa 354 } else {
klauss 91:c2a86b1f8aaa 355 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 356 }
klauss 89:0fe315117b00 357 }
klauss 0:4d17cd9c8f9d 358 }
klauss 119:ee6a53069455 359
klauss 119:ee6a53069455 360 if( cb != NULL )
klauss 119:ee6a53069455 361 {
klauss 119:ee6a53069455 362 cb->invite_retry_count_reset();
klauss 119:ee6a53069455 363
klauss 91:c2a86b1f8aaa 364 cb->set_msg_id( data[ 0 ] );
klauss 119:ee6a53069455 365
klauss 121:ee02790d00b7 366 if ( cb -> get_status () == cb_idle ){
klauss 119:ee6a53069455 367 cb -> call_config ();
klauss 119:ee6a53069455 368 } else {
klauss 119:ee6a53069455 369 data[ TIMESLICE_PLACE ] = cb->get_timeslice();
klauss 119:ee6a53069455 370
klauss 119:ee6a53069455 371 cb->set_invite_response_pending();
klauss 119:ee6a53069455 372
klauss 119:ee6a53069455 373 send2callboxes( build_cb_package( ext, port, INVITE,
klauss 119:ee6a53069455 374 ( char * )data, cb->msg_id_update (), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 92:92df17f538a8 375 }
klauss 119:ee6a53069455 376
klauss 121:ee02790d00b7 377 invite_handler ( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 378 }
klauss 91:c2a86b1f8aaa 379 }
klauss 91:c2a86b1f8aaa 380 break;
klauss 120:770f00554b1e 381
klauss 119:ee6a53069455 382 case REGISTRY : {
klauss 63:0d95da692bb4 383 registry_counter++;
klauss 121:ee02790d00b7 384 Call_Box * cb = find_CB ( v_cb, ext );
klauss 119:ee6a53069455 385
klauss 121:ee02790d00b7 386 if ( cb == NULL )
klauss 119:ee6a53069455 387 {
klauss 119:ee6a53069455 388 if( v_cb->size() < MAX_CB_IN_A_BRANCH )
klauss 119:ee6a53069455 389 {
klauss 119:ee6a53069455 390 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 91:c2a86b1f8aaa 391 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 392
klauss 91:c2a86b1f8aaa 393 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 394 memory_is_over = true;
klauss 119:ee6a53069455 395 if( debug_memory ) debug_msg("[%d] Registry cb allocation fail", ext );
klauss 91:c2a86b1f8aaa 396 } else {
klauss 91:c2a86b1f8aaa 397 v_cb->add( cb );
klauss 119:ee6a53069455 398 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 91:c2a86b1f8aaa 399 }
klauss 87:679ee0d594a9 400 }
klauss 0:4d17cd9c8f9d 401 }
klauss 119:ee6a53069455 402
klauss 121:ee02790d00b7 403 if ( debug_main ) debug_msg("[%d %d] Registered", ext, port );
klauss 91:c2a86b1f8aaa 404
klauss 121:ee02790d00b7 405 if ( cb != NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 406 }
klauss 91:c2a86b1f8aaa 407 break;
klauss 120:770f00554b1e 408
klauss 119:ee6a53069455 409 case BOOT : {
klauss 63:0d95da692bb4 410 boot_counter++;
klauss 99:e80850c51106 411 if( debug_boot == true ){
klauss 119:ee6a53069455 412 send_msg("[%d %d] Boot pkg -- pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 413 }
klauss 119:ee6a53069455 414 send2callboxes( build_cb_package( ext, port, REGISTRY,
klauss 119:ee6a53069455 415 ( char * )data, data[ 0 ] | BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 416 }
klauss 117:e9facba9db27 417 break;
klauss 117:e9facba9db27 418
klauss 119:ee6a53069455 419 case FW : {
klauss 119:ee6a53069455 420 if( debug_fw_print ) send_msg("[%d %d]::FW pkg::", ext, port );
klauss 99:e80850c51106 421 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 422 }
klauss 99:e80850c51106 423 break;
klauss 91:c2a86b1f8aaa 424
klauss 119:ee6a53069455 425 case BOOTLOADER_CBX : {
klauss 117:e9facba9db27 426 uint16_t bl_cnt2 = 0;
klauss 117:e9facba9db27 427 //char bl_send_buffer[ BL_SIZE + 2 ];
klauss 117:e9facba9db27 428 //int ret = bl_cbx_reply_to_eth( ext, ( char * )data );
klauss 117:e9facba9db27 429 //BLEUBA
klauss 117:e9facba9db27 430 //pc.printf("\r\nCBX RESPONDEU BOOTLOADER!\r\n");
klauss 117:e9facba9db27 431 if (debug_bootloader) {
klauss 117:e9facba9db27 432 pc.printf("\r\npacote CBX->HDR {");
klauss 117:e9facba9db27 433 for (bl_cnt2 = 0;bl_cnt2 < BL_SIZE + 1;bl_cnt2++) {
klauss 117:e9facba9db27 434 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 435 pc.printf("\r\n ");
klauss 117:e9facba9db27 436 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 437 pc.printf(" : ");
klauss 117:e9facba9db27 438 }
klauss 117:e9facba9db27 439 pc.printf(hex8(data[bl_cnt2]));
klauss 117:e9facba9db27 440 pc.printf(", ");
klauss 117:e9facba9db27 441 }
klauss 117:e9facba9db27 442 pc.printf("\r\n}");
klauss 117:e9facba9db27 443 }
klauss 67:cdedc64d9921 444 bootloader_cbx_counter++;
klauss 117:e9facba9db27 445 bl_send_buffer[0] = (char)(ext >> 8);
klauss 117:e9facba9db27 446 bl_send_buffer[1] = (char)(ext & 0xff);
klauss 117:e9facba9db27 447 for (bl_cnt2 = 0; bl_cnt2 < BL_SIZE; bl_cnt2++) {
klauss 117:e9facba9db27 448 bl_send_buffer[bl_cnt2 + 2] = data[bl_cnt2 + 1];
klauss 117:e9facba9db27 449 }
klauss 117:e9facba9db27 450 if (debug_bootloader) {
klauss 117:e9facba9db27 451 pc.printf("\r\npacote HDR->SRV {");
klauss 117:e9facba9db27 452 for (bl_cnt2 = 0;bl_cnt2 < UDP_BL_SIZE;bl_cnt2++) {
klauss 117:e9facba9db27 453 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 454 pc.printf("\r\n ");
klauss 117:e9facba9db27 455 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 456 pc.printf(" : ");
klauss 117:e9facba9db27 457 }
klauss 117:e9facba9db27 458 pc.printf(hex8(bl_send_buffer[bl_cnt2]));
klauss 117:e9facba9db27 459 pc.printf(", ");
klauss 117:e9facba9db27 460 }
klauss 117:e9facba9db27 461 pc.printf("\r\n}");
klauss 117:e9facba9db27 462 }
klauss 117:e9facba9db27 463 udp_bl_client.sendTo( udp_bl_server, bl_send_buffer, UDP_BL_SIZE );
klauss 91:c2a86b1f8aaa 464 }
klauss 91:c2a86b1f8aaa 465 break;
klauss 91:c2a86b1f8aaa 466
klauss 119:ee6a53069455 467 case PROMPT : {
klauss 121:ee02790d00b7 468 Call_Box * cb = find_CB( v_cb, ext );
klauss 91:c2a86b1f8aaa 469
klauss 91:c2a86b1f8aaa 470 if( cb == NULL ) {
klauss 119:ee6a53069455 471 if( v_cb->size() < MAX_CB_IN_A_BRANCH ) {
klauss 119:ee6a53069455 472 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 119:ee6a53069455 473 cb = new Call_Box( ext, port );
klauss 119:ee6a53069455 474 if( cb == NULL ){
klauss 119:ee6a53069455 475 memory_is_over = true;
klauss 119:ee6a53069455 476 }else{
klauss 119:ee6a53069455 477 v_cb->add( cb );
klauss 119:ee6a53069455 478 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 119:ee6a53069455 479 }
klauss 87:679ee0d594a9 480 }
klauss 48:195c97f12e8e 481 }
klauss 91:c2a86b1f8aaa 482
klauss 92:92df17f538a8 483 if( cb!= NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 484
klauss 91:c2a86b1f8aaa 485 if( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) {
klauss 119:ee6a53069455 486 if( debug_ping ) send_msg( "[%d %d] Prompt pkg :: Ping", ext, port );
klauss 91:c2a86b1f8aaa 487 } else {
klauss 78:1353744f01e1 488 prompt_counter++;
klauss 114:472502b31a12 489 //fixme isso nao poderia ser resolvido com um sendmsg ?
klauss 119:ee6a53069455 490 send_msg( "[%i, %i] Prompt pkg::", ext, port );
klauss 91:c2a86b1f8aaa 491 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 492 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 493 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 494 }
klauss 100:09a23fcd3bdf 495 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 496
klauss 114:472502b31a12 497 if( tcp_session ) {
klauss 119:ee6a53069455 498 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 119:ee6a53069455 499 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 78:1353744f01e1 500 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 501 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 502 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 503 }
klauss 48:195c97f12e8e 504 }
klauss 91:c2a86b1f8aaa 505 }
klauss 91:c2a86b1f8aaa 506 break;
klauss 120:770f00554b1e 507
klauss 119:ee6a53069455 508 case AUDIO : {
klauss 63:0d95da692bb4 509 audio_counter++;
klauss 119:ee6a53069455 510 if ( received_audio_from_cb ) {
klauss 119:ee6a53069455 511 debug_msg("[%d] audio pkg", ext );
klauss 119:ee6a53069455 512 }
klauss 119:ee6a53069455 513
klauss 78:1353744f01e1 514 VZ_call * call = __find_Call__( v_call, ext );
klauss 91:c2a86b1f8aaa 515 if( call != NULL ) {
klauss 119:ee6a53069455 516 if ( drop_rtp_from_cbx_pkg ){
klauss 114:472502b31a12 517 led2 = !led2;
klauss 114:472502b31a12 518 break;
klauss 119:ee6a53069455 519 } else {
klauss 114:472502b31a12 520 char * pkg = call->build_eth_package( data + 2 );
klauss 114:472502b31a12 521 call->send_message( pkg );
klauss 114:472502b31a12 522 call->cbx_pkg_idle_timer_reset();
klauss 114:472502b31a12 523 }
klauss 119:ee6a53069455 524 }
klauss 119:ee6a53069455 525
klauss 121:ee02790d00b7 526 Call_Box * cb = find_CB( v_cb, ext );
klauss 119:ee6a53069455 527 if( cb != NULL ){
klauss 119:ee6a53069455 528 if ( cb->get_invite_response() == false ) {
klauss 119:ee6a53069455 529 cb->set_invite_response_ok();
klauss 119:ee6a53069455 530 cb->invite_retry_count_reset();
klauss 119:ee6a53069455 531 } else {
klauss 119:ee6a53069455 532 if( debug_main ) debug_msg("[%d] received missed package", ext );
klauss 119:ee6a53069455 533 }
klauss 0:4d17cd9c8f9d 534 }
klauss 91:c2a86b1f8aaa 535 }
klauss 91:c2a86b1f8aaa 536 break;
klauss 114:472502b31a12 537 }// fim switch
klauss 105:a930035b6556 538
klauss 120:770f00554b1e 539 // rajada
klauss 120:770f00554b1e 540 if( invite_retry_timer.read_ms() >= 20 )
klauss 120:770f00554b1e 541 {
klauss 120:770f00554b1e 542 invite_ack_to_cb_handler ( v_cb, v_call );
klauss 112:6ae726539ab9 543
klauss 120:770f00554b1e 544 invite_retry_timer.reset();
klauss 120:770f00554b1e 545 }
klauss 120:770f00554b1e 546
klauss 120:770f00554b1e 547 check_audio_from_ast ( v_cb, v_call );
klauss 99:e80850c51106 548
klauss 120:770f00554b1e 549 wake_up_or_refresh_handler ( v_cb );
klauss 117:e9facba9db27 550
klauss 120:770f00554b1e 551 check_sip_messages_from_ast ( v_cb, v_call );
klauss 119:ee6a53069455 552
klauss 81:3656f00ab3db 553 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 119:ee6a53069455 554 call_manager( v_call, v_cb, ts );
klauss 91:c2a86b1f8aaa 555
klauss 81:3656f00ab3db 556 invite_handler( v_call, v_cb, ts, NULL );
klauss 114:472502b31a12 557
klauss 120:770f00554b1e 558 check_for_runaways_ts ( v_cb, ts );
klauss 112:6ae726539ab9 559
klauss 120:770f00554b1e 560 check_for_unwanted_rtp_ports ( v_cb );
klauss 120:770f00554b1e 561
klauss 72:895ca792c647 562 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 563
klauss 119:ee6a53069455 564 type = DO_NOTHING;
klauss 114:472502b31a12 565
klauss 81:3656f00ab3db 566 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 114:472502b31a12 567
klauss 91:c2a86b1f8aaa 568 if( wdt_timer.read() >= 1 ) {
klauss 120:770f00554b1e 569 wdt_update ();
klauss 81:3656f00ab3db 570 wdt_timer.reset();
klauss 114:472502b31a12 571 }
klauss 114:472502b31a12 572
klauss 120:770f00554b1e 573 if( debug_wdt )
klauss 120:770f00554b1e 574 {
klauss 120:770f00554b1e 575 show_wdt_status ();
klauss 81:3656f00ab3db 576 debug_wdt = false;
klauss 120:770f00554b1e 577
klauss 114:472502b31a12 578 }
klauss 120:770f00554b1e 579 }// fim while
klauss 120:770f00554b1e 580 }// fim main \o/