Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Wed May 13 14:25:57 2015 +0000
Revision:
124:c1b6c893e1c3
Parent:
123:1d395b5a4cad
Child:
126:1f90756250fb
wip__

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