Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Thu Apr 30 15:42:41 2015 +0000
Revision:
119:ee6a53069455
Parent:
118:b93b17c50910
Child:
120:770f00554b1e
funcionalidade - clock "ogro" - implementada

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 119:ee6a53069455 1 #include "main_includes_configs.h"
klauss 85:b6f2dc1d0f4f 2
klauss 91:c2a86b1f8aaa 3 int main()
klauss 114:472502b31a12 4 {
klauss 100:09a23fcd3bdf 5 debug_uart3 = true;
klauss 119:ee6a53069455 6
klauss 119:ee6a53069455 7 int header_app_init_ret = header_app_init ();
klauss 117:e9facba9db27 8
klauss 119:ee6a53069455 9 send_msg( "header_app_init %s" , ( header_app_init_ret == 0 ) ? "Ok" : "Failure" );
klauss 99:e80850c51106 10
klauss 119:ee6a53069455 11 if ( header_app_init_ret == 0 ) send_msg("Ready");
klauss 105:a930035b6556 12
klauss 114:472502b31a12 13 debug_uart3 = false;
klauss 105:a930035b6556 14
klauss 119:ee6a53069455 15 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 115:a1e1e2e60a2c 16
klauss 119:ee6a53069455 17 while( true )
klauss 119:ee6a53069455 18 {
klauss 78:1353744f01e1 19 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 91:c2a86b1f8aaa 20
klauss 119:ee6a53069455 21 if( sync_timer.read() > 5 )
klauss 119:ee6a53069455 22 {
klauss 78:1353744f01e1 23 sync_timer.reset();
klauss 91:c2a86b1f8aaa 24
klauss 119:ee6a53069455 25 if( debug_cks == true ) { pcks_s = true; }
klauss 91:c2a86b1f8aaa 26
klauss 119:ee6a53069455 27 if( debug_alive == true ) { pshowcb = true; }
klauss 105:a930035b6556 28
klauss 114:472502b31a12 29 if( !( ++count % 15 ) ) {
klauss 91:c2a86b1f8aaa 30 if( eth_status ) {
klauss 119:ee6a53069455 31 try_reconnect_with_eth ();
klauss 78:1353744f01e1 32 }
klauss 78:1353744f01e1 33 }
klauss 100:09a23fcd3bdf 34
klauss 114:472502b31a12 35 //35 sec.
klauss 91:c2a86b1f8aaa 36 if( ( count > 7 ) && ( wake_all == false ) ) {
klauss 81:3656f00ab3db 37 wake_all = true;
klauss 78:1353744f01e1 38 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 39 }
klauss 119:ee6a53069455 40
klauss 119:ee6a53069455 41 // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth
klauss 119:ee6a53069455 42 if ( debug_missed ) { missed_send_udp_pkg = true; }
klauss 119:ee6a53069455 43
klauss 114:472502b31a12 44 }
klauss 91:c2a86b1f8aaa 45
klauss 119:ee6a53069455 46 prompt_process( NULL, 0 );
klauss 119:ee6a53069455 47
klauss 119:ee6a53069455 48 check_clock ();
klauss 114:472502b31a12 49
klauss 119:ee6a53069455 50 if ( r_stats )
klauss 119:ee6a53069455 51 {
klauss 119:ee6a53069455 52 reset_stats ();
klauss 63:0d95da692bb4 53 r_stats = false;
klauss 63:0d95da692bb4 54 stats = true;
klauss 63:0d95da692bb4 55 }
klauss 91:c2a86b1f8aaa 56
klauss 119:ee6a53069455 57 if ( stats )
klauss 119:ee6a53069455 58 {
klauss 119:ee6a53069455 59 show_stats ();
klauss 63:0d95da692bb4 60 stats =false;
klauss 63:0d95da692bb4 61 }
klauss 114:472502b31a12 62
klauss 119:ee6a53069455 63 if ( list )
klauss 119:ee6a53069455 64 {
klauss 119:ee6a53069455 65 show_cb_list ( v_cb );
klauss 91:c2a86b1f8aaa 66 list = false;
klauss 114:472502b31a12 67 }
klauss 114:472502b31a12 68
klauss 119:ee6a53069455 69 if ( long_list )
klauss 106:a34fcf9f0e02 70 {
klauss 119:ee6a53069455 71 show_cb_long_list ( v_cb );
klauss 91:c2a86b1f8aaa 72 long_list = false;
klauss 52:12930cef17c4 73 }
klauss 119:ee6a53069455 74
klauss 119:ee6a53069455 75 if ( pshowcb )
klauss 119:ee6a53069455 76 {
klauss 119:ee6a53069455 77 show_cb ( v_cb );
klauss 78:1353744f01e1 78 pshowcb = false;
klauss 48:195c97f12e8e 79 }
klauss 97:8985817e8847 80
klauss 119:ee6a53069455 81 if ( show_current_time )
klauss 119:ee6a53069455 82 {
klauss 119:ee6a53069455 83 show_clock ();
klauss 119:ee6a53069455 84 show_current_time = false;;
klauss 119:ee6a53069455 85 }
klauss 119:ee6a53069455 86
klauss 119:ee6a53069455 87 if ( test_flag_unusual ) _this_is_a_only_test ();
klauss 119:ee6a53069455 88
klauss 97:8985817e8847 89 if( show_sip == true ){
klauss 97:8985817e8847 90 show_sip = false;
klauss 99:e80850c51106 91 send_msg(":: Sip :: %u", v_cb->size() );
klauss 97:8985817e8847 92 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 97:8985817e8847 93 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 114:472502b31a12 94 send_msg("ext :: %d -- port :: %d -- timer %d", cb->get_sip_ext(), cb->get_sip_port(), cb->get_timer() );
klauss 97:8985817e8847 95 }
klauss 97:8985817e8847 96 }
klauss 91:c2a86b1f8aaa 97
klauss 81:3656f00ab3db 98 if( pflood == true ) flood();
klauss 91:c2a86b1f8aaa 99
klauss 91:c2a86b1f8aaa 100 if( debug_eth ) {
klauss 81:3656f00ab3db 101 debug_eth = false;
klauss 81:3656f00ab3db 102 send_msg("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" );
klauss 81:3656f00ab3db 103 }
klauss 91:c2a86b1f8aaa 104
klauss 119:ee6a53069455 105 if( status != WAITING ) {
klauss 81:3656f00ab3db 106 pkg_wdt = RX_CB_IDLE;
klauss 119:ee6a53069455 107 xmemcpy( cb_rx_buffer, buffer_from_cb_ptr, CB_BUFFER_SIZE );
klauss 119:ee6a53069455 108 status = WAITING;
klauss 81:3656f00ab3db 109 missed_pkg--;
klauss 119:ee6a53069455 110 xmemcpy( buffer, cb_rx_buffer, CB_BUFFER_SIZE );
klauss 91:c2a86b1f8aaa 111
klauss 91:c2a86b1f8aaa 112 if( rx ) {
klauss 81:3656f00ab3db 113 char str[ 1024 ];
klauss 81:3656f00ab3db 114 strcpy( str, "RX :: \n\r " );
klauss 119:ee6a53069455 115 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 81:3656f00ab3db 116 char tmp[ 16 ];
klauss 81:3656f00ab3db 117 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 81:3656f00ab3db 118 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 91:c2a86b1f8aaa 119
klauss 81:3656f00ab3db 120 else strcat( str, " " );
klauss 81:3656f00ab3db 121 }
klauss 81:3656f00ab3db 122 send_msg( "%s", str );
klauss 91:c2a86b1f8aaa 123 rx = false;
klauss 81:3656f00ab3db 124 }
klauss 91:c2a86b1f8aaa 125
klauss 119:ee6a53069455 126 data = parse_vz_pkg ( &ext, &port, &type, buffer );
klauss 114:472502b31a12 127
klauss 119:ee6a53069455 128 if( data != NULL )
klauss 119:ee6a53069455 129 {
klauss 78:1353744f01e1 130 if( min_ext == 0 ) min_ext = ext;
klauss 91:c2a86b1f8aaa 131
klauss 78:1353744f01e1 132 if( ext > max_ext ) max_ext = ext;
klauss 91:c2a86b1f8aaa 133
klauss 78:1353744f01e1 134 if( ext < min_ext ) min_ext = ext;
klauss 99:e80850c51106 135
klauss 119:ee6a53069455 136 if( debug_fw ){ fw_cbx_pkg( ext, port, ( char *)buffer ); }
klauss 99:e80850c51106 137
klauss 119:ee6a53069455 138 if( type == TELEMETRY ) telemetry_counter++;
klauss 114:472502b31a12 139
klauss 119:ee6a53069455 140 if( type != AUDIO ) {
klauss 99:e80850c51106 141 if(
klauss 119:ee6a53069455 142 type == TELEMETRY ||
klauss 119:ee6a53069455 143 type == CB_STATS ||
klauss 119:ee6a53069455 144 type == FW1 ||
klauss 119:ee6a53069455 145 type == FW2 ||
klauss 119:ee6a53069455 146 type == FW3 ||
klauss 119:ee6a53069455 147 type == FW4 ||
klauss 119:ee6a53069455 148 type == FW5 ||
klauss 119:ee6a53069455 149 type == FW6
klauss 119:ee6a53069455 150 ) type = FW;
klauss 99:e80850c51106 151
klauss 99:e80850c51106 152 if( debug_cb_rx == true ){
klauss 119:ee6a53069455 153 send_msg("[%d %d] -- Type :: %d", ext, port, type );
klauss 99:e80850c51106 154 }
klauss 99:e80850c51106 155
klauss 0:4d17cd9c8f9d 156 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 157 if( cb != NULL ) {
klauss 92:92df17f538a8 158 if( data[ 0 ] & BIT7 ) {
klauss 119:ee6a53069455 159 if( type == BOOT ) {
klauss 119:ee6a53069455 160 send2callboxes( build_cb_package( ext, port, REGISTRY,
klauss 119:ee6a53069455 161 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 92:92df17f538a8 162 } else {
klauss 119:ee6a53069455 163 if( debug_main ) debug_msg("[%d] Received ack pkg with seq_num %d", ext, data[ 0 ] );
klauss 91:c2a86b1f8aaa 164
klauss 91:c2a86b1f8aaa 165 switch( type ) {
klauss 119:ee6a53069455 166 case INVITE : {
klauss 119:ee6a53069455 167 if( debug_main || debug_invite ) debug_msg("[%d] Invite Ack - msg_id %d -- Cbx seqNum %d", ext, cb->get_msg_id(), data[ 0 ] );
klauss 91:c2a86b1f8aaa 168 break;
klauss 81:3656f00ab3db 169 }
klauss 119:ee6a53069455 170 case CB_BYE : {
klauss 119:ee6a53069455 171 if( debug_main || debug_invite ) debug_msg("[%d] BYE Ack - msg_id %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 172 cb->set_bye_response_ok();
klauss 91:c2a86b1f8aaa 173 break;
klauss 81:3656f00ab3db 174 }
klauss 119:ee6a53069455 175 case REGISTRY : {
klauss 119:ee6a53069455 176 if( debug_main || debug_aging ) debug_msg("[%d] Registry ACK - msg_id %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 177 break;
klauss 81:3656f00ab3db 178 }
klauss 81:3656f00ab3db 179 default : {
klauss 119:ee6a53069455 180 if( debug_main || debug_aging ) debug_msg("[%d] ACK msg_id :: %d :: type %d", ext, cb->get_msg_id(), type );
klauss 91:c2a86b1f8aaa 181 }
klauss 81:3656f00ab3db 182 }
klauss 119:ee6a53069455 183 if( type != REGISTRY && type != CB_BYE && type != INVITE ) type = DO_NOTHING;
klauss 119:ee6a53069455 184 if( type == CB_BYE ){
klauss 92:92df17f538a8 185 VZ_call * call = __find_Call__( v_call, ext );
klauss 92:92df17f538a8 186 if( call != NULL ){
klauss 92:92df17f538a8 187 if( call->get_elapsed_time() < 120000 ){
klauss 119:ee6a53069455 188 if( debug_invite ) debug_msg("[%d] ack bye ignored", ext );
klauss 119:ee6a53069455 189 type = DO_NOTHING;
klauss 92:92df17f538a8 190 }
klauss 92:92df17f538a8 191 }
klauss 92:92df17f538a8 192 }
klauss 0:4d17cd9c8f9d 193 }
klauss 0:4d17cd9c8f9d 194 }
klauss 0:4d17cd9c8f9d 195 }
klauss 0:4d17cd9c8f9d 196 }
klauss 119:ee6a53069455 197 } else type = DO_NOTHING;
klauss 0:4d17cd9c8f9d 198 }
klauss 91:c2a86b1f8aaa 199
klauss 119:ee6a53069455 200 if( sizes == true )
klauss 119:ee6a53069455 201 {
klauss 119:ee6a53069455 202 sizes = false;
klauss 85:b6f2dc1d0f4f 203 send_msg("CB_New (%u) -- CB_Delete (%u)", cb_new_counter, cb_delete_counter );
klauss 85:b6f2dc1d0f4f 204 send_msg("SIP_New (%u) -- SIP_Delete (%u)", sip_new_counter, sip_delete_counter );
klauss 87:679ee0d594a9 205 send_msg("RTP_header_New (%u) -- RTP_header_Delete (%u)", rtp_header_new_counter, rtp_header_delete_counter );
klauss 87:679ee0d594a9 206 send_msg("RTP_body_New (%u) -- RTP_body_Delete (%u)", rtp_body_new_counter, rtp_body_delete_counter );
klauss 109:a5b8264ffbbc 207 send_msg("Call_New (%u) -- Call_Delete (%u)", call_new_counter, call_delete_counter );
klauss 87:679ee0d594a9 208 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 209 send_msg("Memory is %s", ( memory_is_over ) ? "Over" : "Ok" );
klauss 81:3656f00ab3db 210 send_msg("Missed_Pkg :: %d ::", missed_pkg );
klauss 87:679ee0d594a9 211 send_msg("Sizeof Sip :: %u", sizeof( Sip ) );
klauss 119:ee6a53069455 212 send_msg("Sizeof Call_Box :: %u", sizeof ( Call_Box ) );
klauss 87:679ee0d594a9 213 send_msg("Sizeof VZ_call :: %u", sizeof( VZ_call ) );
klauss 87:679ee0d594a9 214 send_msg("Sizeof RTP :: %u", sizeof( RTP ) );
klauss 87:679ee0d594a9 215 send_msg("Sizeof RTP_Header :: %u", sizeof( RTP_Header ) );
klauss 87:679ee0d594a9 216 send_msg("Sizeof RTP_Body :: %u", sizeof( RTP_Body ) );
klauss 87:679ee0d594a9 217 send_msg("Sizeof Vector :: %u", sizeof( Vector ) );
klauss 87:679ee0d594a9 218 send_msg("Sizeof Timeslice :: %u", sizeof( Timeslice ) );
klauss 87:679ee0d594a9 219 send_msg("Sizeof Watchdog :: %u", sizeof( Watchdog ) );
klauss 109:a5b8264ffbbc 220 }
klauss 109:a5b8264ffbbc 221
klauss 114:472502b31a12 222 if ( registra )
klauss 112:6ae726539ab9 223 {
klauss 112:6ae726539ab9 224 int internal_ext = 8000;
klauss 112:6ae726539ab9 225 registra = false;
klauss 112:6ae726539ab9 226 for( register uint8_t i = 0; i < 4; i++ ) {
klauss 112:6ae726539ab9 227 v_cb -> add ( new Call_Box ( internal_ext, internal_ext++ ) );
klauss 112:6ae726539ab9 228 }
klauss 112:6ae726539ab9 229 }
klauss 112:6ae726539ab9 230
klauss 109:a5b8264ffbbc 231 {
klauss 109:a5b8264ffbbc 232 fd_set fdSet;
klauss 109:a5b8264ffbbc 233 FD_ZERO(&fdSet);
klauss 109:a5b8264ffbbc 234
klauss 109:a5b8264ffbbc 235 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 109:a5b8264ffbbc 236 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 237 FD_SET( cb->get_sip_socket_fd(), &fdSet);
klauss 109:a5b8264ffbbc 238 }
klauss 119:ee6a53069455 239
klauss 117:e9facba9db27 240 /* Recepcao de pacotes UDP para atualizacao de callboxes */
klauss 117:e9facba9db27 241 FD_SET( udp_bl_client.get_fd(), &fdSet);
klauss 117:e9facba9db27 242
klauss 117:e9facba9db27 243 /* Recepcao de pacotes UDP para "tickagem" do watchdog */
klauss 109:a5b8264ffbbc 244 FD_SET( udp_wdt_client.get_fd(), &fdSet);
klauss 109:a5b8264ffbbc 245
klauss 119:ee6a53069455 246 // adiciona o socket de comandos prompt-UDP-ETH
klauss 119:ee6a53069455 247 FD_SET( udp_client.get_fd(), &fdSet );
klauss 119:ee6a53069455 248
klauss 119:ee6a53069455 249 // adiciona o socket de pedido de clock para o servidor
klauss 119:ee6a53069455 250 FD_SET( clock_sock.get_fd(), &fdSet );
klauss 119:ee6a53069455 251
klauss 109:a5b8264ffbbc 252 struct timeval t;
klauss 109:a5b8264ffbbc 253 t.tv_sec = 0;
klauss 109:a5b8264ffbbc 254 t.tv_usec = 0;
klauss 109:a5b8264ffbbc 255 int ret = lwip_select( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 117:e9facba9db27 256
klauss 119:ee6a53069455 257 if ((udp_bl_timer.read() > 30) and (bl_start_flag)) {
klauss 117:e9facba9db27 258 udp_bl_timer.stop();
klauss 117:e9facba9db27 259 udp_bl_timer.reset();
klauss 117:e9facba9db27 260 bl_start_flag = 0;
klauss 117:e9facba9db27 261 if (bl_ts != 0) {
klauss 117:e9facba9db27 262 ts->return_timeslice( bl_ts );
klauss 117:e9facba9db27 263 bl_ts = 0;
klauss 117:e9facba9db27 264 }
klauss 117:e9facba9db27 265 if (bl_cb != NULL) {
klauss 117:e9facba9db27 266 bl_cb->set_timeslice( 0 );
klauss 117:e9facba9db27 267 set_status( bl_cb->status, cb_idle );
klauss 117:e9facba9db27 268 bl_cb = NULL;
klauss 117:e9facba9db27 269 }
klauss 117:e9facba9db27 270 }
klauss 109:a5b8264ffbbc 271
klauss 119:ee6a53069455 272 if( ret > 0 )
klauss 119:ee6a53069455 273 {
klauss 109:a5b8264ffbbc 274 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 109:a5b8264ffbbc 275 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 276 int fd = cb->get_sip_socket_fd();
klauss 109:a5b8264ffbbc 277 if( FD_ISSET( fd, &fdSet ) ) {
klauss 109:a5b8264ffbbc 278 int rcv = cb->sip_udp_incomming_pkg();
klauss 109:a5b8264ffbbc 279 }
klauss 109:a5b8264ffbbc 280 }
klauss 118:b93b17c50910 281
klauss 118:b93b17c50910 282 /* Tratamento dos pacotes de bootloader vindo do servidor */
klauss 118:b93b17c50910 283 if( FD_ISSET( udp_bl_client.get_fd(), &fdSet ) ) {
klauss 118:b93b17c50910 284 if( udp_bl_client.receiveFrom( udp_bl_server, bl_recv_buffer, sizeof( bl_recv_buffer ) ) > 0 ) {
klauss 118:b93b17c50910 285 uint16_t cnt = 0;
klauss 118:b93b17c50910 286 if (debug_bootloader) {
klauss 118:b93b17c50910 287 pc.printf("\r\nPACOTE SRV->HDR {");
klauss 118:b93b17c50910 288 for (cnt = 0;cnt < UDP_BL_SIZE;cnt++) {
klauss 118:b93b17c50910 289 if ((cnt % 30) == 0) {
klauss 118:b93b17c50910 290 pc.printf("\r\n ");
klauss 118:b93b17c50910 291 pc.printf(hex16(cnt));
klauss 118:b93b17c50910 292 pc.printf(" : ");
klauss 118:b93b17c50910 293 }
klauss 118:b93b17c50910 294 pc.printf(hex8(bl_recv_buffer[cnt]));
klauss 118:b93b17c50910 295 pc.printf(", ");
klauss 118:b93b17c50910 296 }
klauss 118:b93b17c50910 297 pc.printf("\r\n}");
klauss 118:b93b17c50910 298 }
klauss 118:b93b17c50910 299 bl_peer = ((uint8_t)bl_recv_buffer[0])*256 + (uint8_t)bl_recv_buffer[1];
klauss 118:b93b17c50910 300 bl_send_buffer[0] = bl_recv_buffer[0];
klauss 118:b93b17c50910 301 bl_send_buffer[1] = bl_recv_buffer[1];
klauss 118:b93b17c50910 302 for (cnt = 2;cnt < UDP_BL_SIZE;cnt++) {
klauss 118:b93b17c50910 303 bl_send_buffer[cnt] = 0;
klauss 118:b93b17c50910 304 }
klauss 118:b93b17c50910 305
klauss 118:b93b17c50910 306 if ((bl_ts == 0) and !(bl_start_flag)) {
klauss 118:b93b17c50910 307 bl_ts = ts->get_timeslice();
klauss 118:b93b17c50910 308 }
klauss 118:b93b17c50910 309
klauss 118:b93b17c50910 310 /* caso nao haja timeslice disponivel informar servidor */
klauss 118:b93b17c50910 311 if ((bl_ts == 0) and !(bl_start_flag)) {
klauss 118:b93b17c50910 312 strncpy(bl_send_buffer + 2,"cbxdead\x00",8);
klauss 118:b93b17c50910 313 udp_bl_client.sendTo( udp_bl_server, bl_send_buffer, strlen( bl_send_buffer ) );
klauss 118:b93b17c50910 314 } else {
klauss 118:b93b17c50910 315
klauss 118:b93b17c50910 316 /* pacote para verificar se o callbox esta disponivel */
klauss 118:b93b17c50910 317 if (!(strncmp(bl_recv_buffer + 2,"avaiable?",9))) {
klauss 118:b93b17c50910 318 bl_start_flag = 1;
klauss 118:b93b17c50910 319 udp_bl_timer.start();
klauss 118:b93b17c50910 320 udp_bl_timer.reset();
klauss 118:b93b17c50910 321 strncpy(bl_send_buffer + 2,"cbxalive\x00",9);
klauss 118:b93b17c50910 322 if (debug_bootloader) {
klauss 118:b93b17c50910 323 pc.printf("\r\nPACOTE HDR->SRV {");
klauss 118:b93b17c50910 324 for (cnt = 0;cnt < UDP_BL_SIZE;cnt++) {
klauss 118:b93b17c50910 325 if ((cnt % 30) == 0) {
klauss 118:b93b17c50910 326 pc.printf("\r\n ");
klauss 118:b93b17c50910 327 pc.printf(hex16(cnt));
klauss 118:b93b17c50910 328 pc.printf(" : ");
klauss 118:b93b17c50910 329 }
klauss 118:b93b17c50910 330 pc.printf(hex8(bl_send_buffer[cnt]));
klauss 118:b93b17c50910 331 pc.printf(", ");
klauss 118:b93b17c50910 332 }
klauss 118:b93b17c50910 333 pc.printf("\r\n}");
klauss 118:b93b17c50910 334 }
klauss 118:b93b17c50910 335 udp_bl_client.sendTo( udp_bl_server, bl_send_buffer, strlen( bl_send_buffer ) );
klauss 118:b93b17c50910 336 }
klauss 118:b93b17c50910 337
klauss 118:b93b17c50910 338 /* pacote para indicar o termino do processo de atualizacao */
klauss 118:b93b17c50910 339 else if (!(strncmp(bl_recv_buffer + 2,"finished",8))) {
klauss 118:b93b17c50910 340 bl_start_flag = 0;
klauss 118:b93b17c50910 341 if (bl_ts != 0) {
klauss 118:b93b17c50910 342 ts->return_timeslice( bl_ts );
klauss 118:b93b17c50910 343 bl_ts = 0;
klauss 118:b93b17c50910 344 }
klauss 118:b93b17c50910 345 if (bl_cb != NULL) {
klauss 118:b93b17c50910 346 bl_cb->set_timeslice( 0 );
klauss 118:b93b17c50910 347 set_status( bl_cb->status, cb_idle );
klauss 118:b93b17c50910 348 bl_cb = NULL;
klauss 118:b93b17c50910 349 }
klauss 118:b93b17c50910 350 }
klauss 118:b93b17c50910 351
klauss 118:b93b17c50910 352 /* pacotes a serem repassados para o callbox */
klauss 118:b93b17c50910 353 else if (bl_start_flag) {
klauss 118:b93b17c50910 354 uint16_t bl_cnt = 0;
klauss 118:b93b17c50910 355 udp_bl_timer.reset();
klauss 118:b93b17c50910 356 /* pacote de ERASE enviado para o cbx */
klauss 118:b93b17c50910 357 /* neste momento a cabeceira sabe que o servidor se comunicou com o callbox */
klauss 118:b93b17c50910 358 if (!(strncmp(bl_recv_buffer + 2,"\x45",1))) {
klauss 118:b93b17c50910 359 bl_cb = __find_CB__( v_cb, bl_peer );
klauss 118:b93b17c50910 360 if (bl_cb != NULL) {
klauss 118:b93b17c50910 361 bl_cb->set_timeslice( bl_ts );
klauss 118:b93b17c50910 362 set_status( bl_cb->status, cb_bootloader );
klauss 118:b93b17c50910 363 }
klauss 118:b93b17c50910 364 }
klauss 118:b93b17c50910 365 /* pacote de OK enviado para o cbx */
klauss 118:b93b17c50910 366 /* neste momento a cabeceira desaloca o timeslice do callbox */
klauss 118:b93b17c50910 367 if (!(strncmp(bl_recv_buffer + 2,"\x4f\x00\x00\x00",4))) {
klauss 118:b93b17c50910 368 ts->return_timeslice( bl_ts );
klauss 118:b93b17c50910 369 bl_ts = 0;
klauss 118:b93b17c50910 370 if (bl_cb != NULL) {
klauss 118:b93b17c50910 371 bl_cb->set_timeslice( 0 );
klauss 118:b93b17c50910 372 }
klauss 118:b93b17c50910 373 }
klauss 118:b93b17c50910 374 bl_cbx_buffer[0] = bl_ts;
klauss 118:b93b17c50910 375 for (bl_cnt = 0; bl_cnt < BL_SIZE; bl_cnt++) {
klauss 118:b93b17c50910 376 bl_cbx_buffer[bl_cnt + 1] = bl_recv_buffer[bl_cnt + 2];
klauss 118:b93b17c50910 377 }
klauss 118:b93b17c50910 378 if (debug_bootloader) {
klauss 118:b93b17c50910 379 pc.printf("\r\nPACOTE HDR->CBX {");
klauss 118:b93b17c50910 380 for (cnt = 0;cnt < BL_SIZE + 1;cnt++) {
klauss 118:b93b17c50910 381 if ((cnt % 30) == 0) {
klauss 118:b93b17c50910 382 pc.printf("\r\n ");
klauss 118:b93b17c50910 383 pc.printf(hex16(cnt));
klauss 118:b93b17c50910 384 pc.printf(" : ");
klauss 118:b93b17c50910 385 }
klauss 118:b93b17c50910 386 pc.printf(hex8(bl_cbx_buffer[cnt]));
klauss 118:b93b17c50910 387 pc.printf(", ");
klauss 118:b93b17c50910 388 }
klauss 118:b93b17c50910 389 pc.printf("\r\n}");
klauss 118:b93b17c50910 390 }
klauss 118:b93b17c50910 391 if (bl_cb != NULL) {
klauss 118:b93b17c50910 392 bl_port = bl_cb->get_port();
klauss 118:b93b17c50910 393 } else {
klauss 118:b93b17c50910 394 bl_port = bl_peer;
klauss 118:b93b17c50910 395 }
klauss 119:ee6a53069455 396 send2callboxes( build_cb_package( bl_peer, bl_port, BOOTLOADER_CBX,bl_cbx_buffer, 0, BL_SIZE + 1, write_buffer) );
klauss 118:b93b17c50910 397 }
klauss 118:b93b17c50910 398 }
klauss 118:b93b17c50910 399 }
klauss 118:b93b17c50910 400 }
klauss 118:b93b17c50910 401
klauss 119:ee6a53069455 402 // verifica o socket do prompt-UDP-ETH
klauss 119:ee6a53069455 403 if( FD_ISSET( udp_client.get_fd(), &fdSet ) ) {
klauss 119:ee6a53069455 404 char to_prompt_process[ PROMPT_UDP_COMMAND_SIZE ];
klauss 119:ee6a53069455 405 for( register int i = 0; i < PROMPT_UDP_COMMAND_SIZE; i++ ) to_prompt_process[ i ] = 0;
klauss 119:ee6a53069455 406
klauss 119:ee6a53069455 407 int prompt_process_msg_rcv = udp_client.receiveFrom( udp_server, to_prompt_process, ( sizeof( to_prompt_process ) - 1 ) );
klauss 119:ee6a53069455 408
klauss 119:ee6a53069455 409 to_prompt_process[ prompt_process_msg_rcv ] = 0;
klauss 119:ee6a53069455 410 if( prompt_process_msg_rcv == -1 )
klauss 119:ee6a53069455 411 {
klauss 119:ee6a53069455 412 if( debug_reconnect ) send_msg("Reconnect Prompt Process");
klauss 119:ee6a53069455 413 reconnect_udp_prompt_process();
klauss 119:ee6a53069455 414 miss_prompt_udp_rcv_pkg++;
klauss 119:ee6a53069455 415 }
klauss 119:ee6a53069455 416 else if( prompt_process_msg_rcv > 0 )
klauss 119:ee6a53069455 417 {
klauss 119:ee6a53069455 418 udp_query = true;
klauss 119:ee6a53069455 419 prompt_process( to_prompt_process, prompt_process_msg_rcv );
klauss 119:ee6a53069455 420 }
klauss 119:ee6a53069455 421 }
klauss 119:ee6a53069455 422
klauss 119:ee6a53069455 423 // verifica o socket do watchdog
klauss 109:a5b8264ffbbc 424 if( FD_ISSET( udp_wdt_client.get_fd(), &fdSet ) ) {
klauss 109:a5b8264ffbbc 425 char wake_msg[ 768 ];
klauss 109:a5b8264ffbbc 426 Endpoint udp_wdt_server;
klauss 109:a5b8264ffbbc 427
klauss 119:ee6a53069455 428 int wake_msg_rcv = udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) );
klauss 119:ee6a53069455 429
klauss 119:ee6a53069455 430 if( wake_msg_rcv == -1 )
klauss 119:ee6a53069455 431 {
klauss 119:ee6a53069455 432 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 119:ee6a53069455 433 reconnect_extern_wdt_socket();
klauss 119:ee6a53069455 434 miss_wdt_send_pkg++;
klauss 119:ee6a53069455 435 }
klauss 119:ee6a53069455 436 else if( wake_msg_rcv > 0 )
klauss 119:ee6a53069455 437 {
klauss 109:a5b8264ffbbc 438 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 109:a5b8264ffbbc 439 // Just ckeck but not set 'alive?'
klauss 109:a5b8264ffbbc 440 // 'alive*' - force wdt tick right now
klauss 109:a5b8264ffbbc 441 // Ckecking and set 'alive'
klauss 109:a5b8264ffbbc 442 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 109:a5b8264ffbbc 443 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 109:a5b8264ffbbc 444
klauss 119:ee6a53069455 445 snprintf( wake_msg, ( 768 - 1 ),"wdt:%u,%u,%u,%c,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u:",
klauss 109:a5b8264ffbbc 446 uptime,
klauss 109:a5b8264ffbbc 447 invite_counter,
klauss 109:a5b8264ffbbc 448 external_wdt,
klauss 109:a5b8264ffbbc 449 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 109:a5b8264ffbbc 450 cb_new_counter,
klauss 109:a5b8264ffbbc 451 v_cb->size(),
klauss 109:a5b8264ffbbc 452 ts->remain_timeslices(),
klauss 109:a5b8264ffbbc 453 sip_socket_send_failure,
klauss 119:ee6a53069455 454 v_call->size(),
klauss 119:ee6a53069455 455 pkg_cksok,
klauss 119:ee6a53069455 456 pkg_ckserr,
klauss 119:ee6a53069455 457 pkg_zero,
klauss 119:ee6a53069455 458 out_of_range,
klauss 119:ee6a53069455 459 missed_pkg,
klauss 119:ee6a53069455 460 delayed_pkg_to_cb,
klauss 119:ee6a53069455 461 cpld_pkg_tx_counter,
klauss 119:ee6a53069455 462 cpld_pkg_rx_counter,
klauss 119:ee6a53069455 463 eth_wdt,
klauss 119:ee6a53069455 464 pkg_wdt,
klauss 119:ee6a53069455 465 miss_fw_send_pkg,
klauss 119:ee6a53069455 466 miss_prompt_udp_send_pkg,
klauss 119:ee6a53069455 467 miss_sip_registry_send_pkg,
klauss 119:ee6a53069455 468 miss_sip_invite_send_pkg,
klauss 119:ee6a53069455 469 miss_sip_bye_send_pkg,
klauss 119:ee6a53069455 470 miss_sip_unregistry_send_pkg,
klauss 119:ee6a53069455 471 miss_sip_ok_send_pkg,
klauss 119:ee6a53069455 472 miss_sip_rcv_bye_send_pkg,
klauss 119:ee6a53069455 473 miss_wdt_send_pkg,
klauss 119:ee6a53069455 474 miss_prompt_udp_send_pkg,
klauss 119:ee6a53069455 475 miss_ftp_udp_send_pkg,
klauss 119:ee6a53069455 476 miss_prompt_udp_rcv_pkg,
klauss 119:ee6a53069455 477 miss_closk_send_pkg
klauss 109:a5b8264ffbbc 478 );
klauss 119:ee6a53069455 479
klauss 109:a5b8264ffbbc 480 wake_msg[ 768 - 1 ] = 0;
klauss 119:ee6a53069455 481 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 119:ee6a53069455 482 if( send != strlen( wake_msg ) )
klauss 119:ee6a53069455 483 {
klauss 119:ee6a53069455 484 if( debug_reconnect ) debug_msg("Reconnect Extern wdt (%d, %d)", send, strlen( wake_msg ) );
klauss 119:ee6a53069455 485 reconnect_extern_wdt_socket();
klauss 119:ee6a53069455 486 miss_wdt_send_pkg++;
klauss 119:ee6a53069455 487 }
klauss 109:a5b8264ffbbc 488
klauss 119:ee6a53069455 489 if( ( (!question_alive) && ( cb_new_counter <= MAX_CB_IN_A_BRANCH ) && ( cb_new_counter >= 2 ) ) ) {
klauss 109:a5b8264ffbbc 490 external_wdt = EXTERN_WDT_IDLE;
klauss 109:a5b8264ffbbc 491 }
klauss 109:a5b8264ffbbc 492 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 109:a5b8264ffbbc 493 external_wdt = 0;
klauss 109:a5b8264ffbbc 494
klauss 109:a5b8264ffbbc 495 sprintf( wake_msg, "rst:%u:", uptime );
klauss 119:ee6a53069455 496 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 119:ee6a53069455 497 if( send != strlen( wake_msg ) )
klauss 119:ee6a53069455 498 {
klauss 119:ee6a53069455 499 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 119:ee6a53069455 500 reconnect_extern_wdt_socket();
klauss 119:ee6a53069455 501 miss_wdt_send_pkg++;
klauss 119:ee6a53069455 502 }
klauss 109:a5b8264ffbbc 503 }
klauss 109:a5b8264ffbbc 504 }
klauss 109:a5b8264ffbbc 505 }
klauss 119:ee6a53069455 506
klauss 119:ee6a53069455 507 if( FD_ISSET( clock_sock.get_fd(), &fdSet ) )
klauss 119:ee6a53069455 508 {
klauss 119:ee6a53069455 509 update_clock ();
klauss 119:ee6a53069455 510 }
klauss 109:a5b8264ffbbc 511 }
klauss 109:a5b8264ffbbc 512 }
klauss 109:a5b8264ffbbc 513
klauss 112:6ae726539ab9 514 if ( cogumelo )
klauss 112:6ae726539ab9 515 {
klauss 112:6ae726539ab9 516 cogumelo = false;
klauss 112:6ae726539ab9 517 for( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 518 {
klauss 112:6ae726539ab9 519 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 520 if ( cb )
klauss 112:6ae726539ab9 521 {
klauss 112:6ae726539ab9 522 set_status( cb->status, cb_on_call );
klauss 112:6ae726539ab9 523 set_status( cb->sip->status, sip_on_call );
klauss 112:6ae726539ab9 524 }
klauss 112:6ae726539ab9 525 else
klauss 112:6ae726539ab9 526 {
klauss 112:6ae726539ab9 527 debug_msg("%d congumelo missed", i );
klauss 112:6ae726539ab9 528 }
klauss 112:6ae726539ab9 529 }
klauss 112:6ae726539ab9 530
klauss 112:6ae726539ab9 531 }
klauss 112:6ae726539ab9 532
klauss 112:6ae726539ab9 533 if ( gnomo )
klauss 112:6ae726539ab9 534 {
klauss 112:6ae726539ab9 535 gnomo = false;
klauss 112:6ae726539ab9 536 for( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 537 {
klauss 112:6ae726539ab9 538 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 539 if ( cb )
klauss 112:6ae726539ab9 540 {
klauss 112:6ae726539ab9 541 set_status( cb->status, cb_idle );
klauss 112:6ae726539ab9 542 set_status( cb->sip->status, sip_idle );
klauss 112:6ae726539ab9 543 }
klauss 112:6ae726539ab9 544 else
klauss 112:6ae726539ab9 545 {
klauss 112:6ae726539ab9 546 debug_msg("%d gnomo missed", i );
klauss 112:6ae726539ab9 547 }
klauss 112:6ae726539ab9 548 }
klauss 112:6ae726539ab9 549
klauss 112:6ae726539ab9 550 }
klauss 112:6ae726539ab9 551
klauss 112:6ae726539ab9 552
klauss 109:a5b8264ffbbc 553 if( dshow_rtp == true ){
klauss 109:a5b8264ffbbc 554 dshow_rtp = false;
klauss 109:a5b8264ffbbc 555 send_msg(":: RTP :: %u", v_cb->size() );
klauss 109:a5b8264ffbbc 556
klauss 119:ee6a53069455 557 int ext_list[ MAX_CB_IN_A_BRANCH ];
klauss 109:a5b8264ffbbc 558
klauss 109:a5b8264ffbbc 559 if( v_cb->size() >= 1 ) {
klauss 109:a5b8264ffbbc 560 for( register int i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 561 {
klauss 109:a5b8264ffbbc 562 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 109:a5b8264ffbbc 563 }
klauss 109:a5b8264ffbbc 564 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 109:a5b8264ffbbc 565 }
klauss 109:a5b8264ffbbc 566
klauss 109:a5b8264ffbbc 567 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 568 {
klauss 109:a5b8264ffbbc 569 Call_Box * cb = __find_CB__( v_cb, ext_list[ i ] );
klauss 109:a5b8264ffbbc 570 if( cb != NULL )
klauss 109:a5b8264ffbbc 571 {
klauss 109:a5b8264ffbbc 572 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 573 cb -> get_ext (),
klauss 109:a5b8264ffbbc 574 cb -> get_port (),
klauss 109:a5b8264ffbbc 575 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 576 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 577 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 578 );
klauss 109:a5b8264ffbbc 579 }
klauss 109:a5b8264ffbbc 580 }
klauss 109:a5b8264ffbbc 581 }
klauss 109:a5b8264ffbbc 582
klauss 109:a5b8264ffbbc 583 if( malasia )
klauss 109:a5b8264ffbbc 584 {
klauss 109:a5b8264ffbbc 585 malasia = false;
klauss 109:a5b8264ffbbc 586 // conclusao, mudar o nro nao impala, talvez mudar o nro no pacote ...
klauss 109:a5b8264ffbbc 587 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 588 if( cb != NULL )
klauss 109:a5b8264ffbbc 589 {
klauss 109:a5b8264ffbbc 590 cb -> set_rtp_port ( cb -> get_rtp_port () * 10 + 1 );
klauss 109:a5b8264ffbbc 591 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 592 cb -> get_ext (),
klauss 109:a5b8264ffbbc 593 cb -> get_port (),
klauss 109:a5b8264ffbbc 594 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 595 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 596 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 597 );
klauss 109:a5b8264ffbbc 598 }
klauss 109:a5b8264ffbbc 599 }
klauss 109:a5b8264ffbbc 600
klauss 109:a5b8264ffbbc 601 if( york )
klauss 109:a5b8264ffbbc 602 {
klauss 109:a5b8264ffbbc 603 york = false;
klauss 109:a5b8264ffbbc 604 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 605 if( cb != NULL )
klauss 109:a5b8264ffbbc 606 {
klauss 109:a5b8264ffbbc 607 cb -> set_rtp_port ( 80 );
klauss 109:a5b8264ffbbc 608 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 609 cb -> get_ext (),
klauss 109:a5b8264ffbbc 610 cb -> get_port (),
klauss 109:a5b8264ffbbc 611 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 612 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 613 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 614 );
klauss 109:a5b8264ffbbc 615 }
klauss 109:a5b8264ffbbc 616 }
klauss 109:a5b8264ffbbc 617
klauss 109:a5b8264ffbbc 618 if ( frtp )
klauss 109:a5b8264ffbbc 619 {
klauss 109:a5b8264ffbbc 620 frtp = false;
klauss 109:a5b8264ffbbc 621 Call_Box * cb = __find_CB__( v_cb, frtp_target );
klauss 109:a5b8264ffbbc 622 if ( cb != NULL )
klauss 109:a5b8264ffbbc 623 {
klauss 109:a5b8264ffbbc 624 cb -> set_rtp_port ( -1008789032 );
klauss 109:a5b8264ffbbc 625 }
klauss 109:a5b8264ffbbc 626 else
klauss 109:a5b8264ffbbc 627 {
klauss 109:a5b8264ffbbc 628 debug_msg("frtp fail");
klauss 109:a5b8264ffbbc 629 }
klauss 109:a5b8264ffbbc 630
klauss 109:a5b8264ffbbc 631 }
klauss 109:a5b8264ffbbc 632
klauss 109:a5b8264ffbbc 633 if ( rescue_rtp )
klauss 109:a5b8264ffbbc 634 {
klauss 109:a5b8264ffbbc 635 rescue_rtp = false;
klauss 109:a5b8264ffbbc 636 Call_Box * cb = __find_CB__( v_cb, rescue_rtp_target );
klauss 109:a5b8264ffbbc 637 if ( cb != NULL )
klauss 109:a5b8264ffbbc 638 {
klauss 109:a5b8264ffbbc 639 cb -> set_rtp_port ( rescue_rtp_value );
klauss 109:a5b8264ffbbc 640 }
klauss 109:a5b8264ffbbc 641 else
klauss 109:a5b8264ffbbc 642 {
klauss 109:a5b8264ffbbc 643 debug_msg("rescue rtp fail");
klauss 109:a5b8264ffbbc 644 }
klauss 109:a5b8264ffbbc 645
klauss 109:a5b8264ffbbc 646 }
klauss 109:a5b8264ffbbc 647
klauss 109:a5b8264ffbbc 648 if( america )
klauss 109:a5b8264ffbbc 649 {
klauss 109:a5b8264ffbbc 650 america = false;
klauss 109:a5b8264ffbbc 651 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 652 if( cb != NULL )
klauss 109:a5b8264ffbbc 653 {
klauss 109:a5b8264ffbbc 654 cb -> set_rtp_port ( 8929415 );
klauss 109:a5b8264ffbbc 655 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 656 cb -> get_ext (),
klauss 109:a5b8264ffbbc 657 cb -> get_port (),
klauss 109:a5b8264ffbbc 658 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 659 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 660 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 661 );
klauss 109:a5b8264ffbbc 662 }
klauss 109:a5b8264ffbbc 663 }
klauss 109:a5b8264ffbbc 664
klauss 114:472502b31a12 665 //begin debug_print
klauss 109:a5b8264ffbbc 666 if ( print_v_cb )
klauss 109:a5b8264ffbbc 667 {
klauss 109:a5b8264ffbbc 668 print_v_cb = false;
klauss 114:472502b31a12 669 v_cb->print_yourself ();
klauss 109:a5b8264ffbbc 670 }
klauss 109:a5b8264ffbbc 671
klauss 109:a5b8264ffbbc 672 if ( print_v_call )
klauss 109:a5b8264ffbbc 673 {
klauss 109:a5b8264ffbbc 674 print_v_call = false;
klauss 109:a5b8264ffbbc 675 v_call->print_yourself ();
klauss 109:a5b8264ffbbc 676 }
klauss 109:a5b8264ffbbc 677
klauss 109:a5b8264ffbbc 678 if ( print_cb_var )
klauss 109:a5b8264ffbbc 679 {
klauss 109:a5b8264ffbbc 680 print_cb_var = false;
klauss 109:a5b8264ffbbc 681 Call_Box * cb = __find_CB__ ( v_cb, print_this_cb );
klauss 109:a5b8264ffbbc 682 if ( cb != NULL )
klauss 109:a5b8264ffbbc 683 {
klauss 109:a5b8264ffbbc 684 cb -> print_yourself ();
klauss 109:a5b8264ffbbc 685 }
klauss 109:a5b8264ffbbc 686 else
klauss 109:a5b8264ffbbc 687 {
klauss 109:a5b8264ffbbc 688 if( print_values )
klauss 109:a5b8264ffbbc 689 {
klauss 109:a5b8264ffbbc 690 debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 691 }
klauss 109:a5b8264ffbbc 692 else
klauss 109:a5b8264ffbbc 693 {
klauss 109:a5b8264ffbbc 694 send_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 695 }
klauss 109:a5b8264ffbbc 696 }
klauss 109:a5b8264ffbbc 697 }
klauss 109:a5b8264ffbbc 698
klauss 109:a5b8264ffbbc 699 if ( print_cb_all )
klauss 109:a5b8264ffbbc 700 {
klauss 109:a5b8264ffbbc 701 print_cb_all = false;
klauss 109:a5b8264ffbbc 702
klauss 109:a5b8264ffbbc 703 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 704 {
klauss 109:a5b8264ffbbc 705 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 706 }
klauss 109:a5b8264ffbbc 707
klauss 109:a5b8264ffbbc 708 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 709 {
klauss 109:a5b8264ffbbc 710 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 711
klauss 109:a5b8264ffbbc 712 if ( cb != NULL )
klauss 109:a5b8264ffbbc 713 {
klauss 109:a5b8264ffbbc 714 cb -> print_yourself ();
klauss 109:a5b8264ffbbc 715 }
klauss 109:a5b8264ffbbc 716 else
klauss 109:a5b8264ffbbc 717 {
klauss 109:a5b8264ffbbc 718 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", i );
klauss 109:a5b8264ffbbc 719 }
klauss 109:a5b8264ffbbc 720 }
klauss 109:a5b8264ffbbc 721 }
klauss 109:a5b8264ffbbc 722
klauss 109:a5b8264ffbbc 723 if ( print_hex_cb_var )
klauss 109:a5b8264ffbbc 724 {
klauss 109:a5b8264ffbbc 725 print_hex_cb_var = false;
klauss 109:a5b8264ffbbc 726 uint8_t * ptr = ( uint8_t * ) __find_CB__ ( v_cb, print_hex_this_cb );
klauss 109:a5b8264ffbbc 727
klauss 109:a5b8264ffbbc 728 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 729 {
klauss 109:a5b8264ffbbc 730 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 731 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 732 {
klauss 109:a5b8264ffbbc 733 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 734
klauss 109:a5b8264ffbbc 735 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 736 {
klauss 109:a5b8264ffbbc 737 if( i != 0 )
klauss 109:a5b8264ffbbc 738 {
klauss 109:a5b8264ffbbc 739 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 740 }
klauss 109:a5b8264ffbbc 741 else
klauss 109:a5b8264ffbbc 742 {
klauss 109:a5b8264ffbbc 743 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 744 }
klauss 109:a5b8264ffbbc 745 }
klauss 109:a5b8264ffbbc 746 else
klauss 109:a5b8264ffbbc 747 {
klauss 109:a5b8264ffbbc 748 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 749 }
klauss 109:a5b8264ffbbc 750 }
klauss 109:a5b8264ffbbc 751 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 752
klauss 109:a5b8264ffbbc 753 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 754 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 755
klauss 109:a5b8264ffbbc 756 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 757
klauss 109:a5b8264ffbbc 758 uint8_t * ptr = ( uint8_t * ) __find_CB__ ( v_cb, print_hex_this_cb );
klauss 109:a5b8264ffbbc 759
klauss 109:a5b8264ffbbc 760 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 761 {
klauss 109:a5b8264ffbbc 762 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 763 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 764 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 765 }
klauss 109:a5b8264ffbbc 766
klauss 109:a5b8264ffbbc 767 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 768 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 769 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 770 }
klauss 109:a5b8264ffbbc 771 }
klauss 109:a5b8264ffbbc 772 else
klauss 109:a5b8264ffbbc 773 {
klauss 109:a5b8264ffbbc 774 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 775 }
klauss 81:3656f00ab3db 776 }
klauss 106:a34fcf9f0e02 777
klauss 109:a5b8264ffbbc 778 if ( print_hex_cb_all )
klauss 109:a5b8264ffbbc 779 {
klauss 109:a5b8264ffbbc 780 print_hex_cb_all = false;
klauss 109:a5b8264ffbbc 781
klauss 109:a5b8264ffbbc 782 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 783 {
klauss 109:a5b8264ffbbc 784 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 785 }
klauss 109:a5b8264ffbbc 786
klauss 109:a5b8264ffbbc 787 for ( register uint8_t j = 0; j < v_cb->size(); j++ )
klauss 109:a5b8264ffbbc 788 {
klauss 109:a5b8264ffbbc 789 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 790
klauss 109:a5b8264ffbbc 791 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 792 {
klauss 109:a5b8264ffbbc 793 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 794 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 795 {
klauss 109:a5b8264ffbbc 796 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 797
klauss 109:a5b8264ffbbc 798 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 799 {
klauss 109:a5b8264ffbbc 800 if( i != 0 )
klauss 109:a5b8264ffbbc 801 {
klauss 109:a5b8264ffbbc 802 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 803 }
klauss 109:a5b8264ffbbc 804 else
klauss 109:a5b8264ffbbc 805 {
klauss 109:a5b8264ffbbc 806 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 807 }
klauss 109:a5b8264ffbbc 808 }
klauss 109:a5b8264ffbbc 809 else
klauss 109:a5b8264ffbbc 810 {
klauss 109:a5b8264ffbbc 811 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 812 }
klauss 109:a5b8264ffbbc 813 }
klauss 109:a5b8264ffbbc 814 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 815
klauss 109:a5b8264ffbbc 816 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 817 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 818
klauss 109:a5b8264ffbbc 819 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 820
klauss 109:a5b8264ffbbc 821 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 822
klauss 109:a5b8264ffbbc 823 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 824 {
klauss 109:a5b8264ffbbc 825 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 826 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 827 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 828 }
klauss 109:a5b8264ffbbc 829
klauss 109:a5b8264ffbbc 830 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 831 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 832 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 833 }
klauss 109:a5b8264ffbbc 834 }
klauss 109:a5b8264ffbbc 835 else
klauss 109:a5b8264ffbbc 836 {
klauss 109:a5b8264ffbbc 837 if ( print_values )
klauss 109:a5b8264ffbbc 838 {
klauss 109:a5b8264ffbbc 839 debug_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 840 }
klauss 109:a5b8264ffbbc 841 else
klauss 109:a5b8264ffbbc 842 {
klauss 109:a5b8264ffbbc 843 send_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 844 }
klauss 109:a5b8264ffbbc 845 }
klauss 109:a5b8264ffbbc 846 }
klauss 109:a5b8264ffbbc 847 }
klauss 106:a34fcf9f0e02 848
klauss 109:a5b8264ffbbc 849 //begin Sip debug print
klauss 109:a5b8264ffbbc 850 {
klauss 109:a5b8264ffbbc 851 if ( print_sip_var )
klauss 109:a5b8264ffbbc 852 {
klauss 109:a5b8264ffbbc 853 print_sip_var = false;
klauss 109:a5b8264ffbbc 854 Call_Box * cb = __find_CB__ ( v_cb, print_this_sip );
klauss 109:a5b8264ffbbc 855 if ( cb != NULL )
klauss 109:a5b8264ffbbc 856 {
klauss 109:a5b8264ffbbc 857 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 858 {
klauss 109:a5b8264ffbbc 859 cb -> sip -> print_yourself ();
klauss 109:a5b8264ffbbc 860 }
klauss 109:a5b8264ffbbc 861 else
klauss 109:a5b8264ffbbc 862 {
klauss 109:a5b8264ffbbc 863 if( print_values )
klauss 109:a5b8264ffbbc 864 {
klauss 109:a5b8264ffbbc 865 debug_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 866 }
klauss 109:a5b8264ffbbc 867 else
klauss 109:a5b8264ffbbc 868 {
klauss 109:a5b8264ffbbc 869 send_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 870 }
klauss 109:a5b8264ffbbc 871 }
klauss 109:a5b8264ffbbc 872 }
klauss 109:a5b8264ffbbc 873 else
klauss 109:a5b8264ffbbc 874 {
klauss 109:a5b8264ffbbc 875 if ( print_values )
klauss 109:a5b8264ffbbc 876 {
klauss 109:a5b8264ffbbc 877 debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 878 }
klauss 109:a5b8264ffbbc 879 else
klauss 109:a5b8264ffbbc 880 {
klauss 109:a5b8264ffbbc 881 send_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 882 } }
klauss 109:a5b8264ffbbc 883 }
klauss 109:a5b8264ffbbc 884
klauss 109:a5b8264ffbbc 885 if ( print_sip_all )
klauss 109:a5b8264ffbbc 886 {
klauss 109:a5b8264ffbbc 887 print_sip_all = false;
klauss 109:a5b8264ffbbc 888
klauss 109:a5b8264ffbbc 889 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 890 {
klauss 109:a5b8264ffbbc 891 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 892 }
klauss 109:a5b8264ffbbc 893
klauss 109:a5b8264ffbbc 894 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 895 {
klauss 109:a5b8264ffbbc 896 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 897
klauss 109:a5b8264ffbbc 898 if ( cb != NULL )
klauss 109:a5b8264ffbbc 899 {
klauss 109:a5b8264ffbbc 900 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 901 {
klauss 109:a5b8264ffbbc 902 cb -> sip -> print_yourself ();
klauss 109:a5b8264ffbbc 903 }
klauss 109:a5b8264ffbbc 904 else
klauss 109:a5b8264ffbbc 905 {
klauss 109:a5b8264ffbbc 906 if( print_values )
klauss 109:a5b8264ffbbc 907 {
klauss 109:a5b8264ffbbc 908 debug_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 909 }
klauss 109:a5b8264ffbbc 910 else
klauss 109:a5b8264ffbbc 911 {
klauss 109:a5b8264ffbbc 912 send_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 913 }
klauss 109:a5b8264ffbbc 914 }
klauss 109:a5b8264ffbbc 915 }
klauss 109:a5b8264ffbbc 916 else
klauss 109:a5b8264ffbbc 917 {
klauss 109:a5b8264ffbbc 918 if( print_values )
klauss 109:a5b8264ffbbc 919 {
klauss 109:a5b8264ffbbc 920 debug_msg("CBx %d not found", print_this_sip );
klauss 109:a5b8264ffbbc 921 }
klauss 109:a5b8264ffbbc 922 else
klauss 109:a5b8264ffbbc 923 {
klauss 109:a5b8264ffbbc 924 send_msg("CBx %d not found", print_this_sip );
klauss 109:a5b8264ffbbc 925 }
klauss 109:a5b8264ffbbc 926 }
klauss 109:a5b8264ffbbc 927 }
klauss 109:a5b8264ffbbc 928 }
klauss 109:a5b8264ffbbc 929
klauss 109:a5b8264ffbbc 930 if ( print_hex_sip_var )
klauss 109:a5b8264ffbbc 931 {
klauss 109:a5b8264ffbbc 932 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 933
klauss 109:a5b8264ffbbc 934 print_hex_sip_var = false;
klauss 109:a5b8264ffbbc 935 Call_Box * cb = __find_CB__ ( v_cb, print_hex_this_sip );
klauss 109:a5b8264ffbbc 936 if( cb != NULL )
klauss 109:a5b8264ffbbc 937 {
klauss 109:a5b8264ffbbc 938 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 939 ptr = ( uint8_t * ) cb -> sip;
klauss 109:a5b8264ffbbc 940 }
klauss 109:a5b8264ffbbc 941
klauss 109:a5b8264ffbbc 942 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 943 {
klauss 109:a5b8264ffbbc 944 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 945 for ( register int i = 0; i < sizeof( Sip ); i++ )
klauss 109:a5b8264ffbbc 946 {
klauss 109:a5b8264ffbbc 947 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 948
klauss 109:a5b8264ffbbc 949 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 950 {
klauss 109:a5b8264ffbbc 951 if( i != 0 )
klauss 109:a5b8264ffbbc 952 {
klauss 109:a5b8264ffbbc 953 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 954 }
klauss 109:a5b8264ffbbc 955 else
klauss 109:a5b8264ffbbc 956 {
klauss 109:a5b8264ffbbc 957 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 958 }
klauss 109:a5b8264ffbbc 959 }
klauss 109:a5b8264ffbbc 960 else
klauss 109:a5b8264ffbbc 961 {
klauss 109:a5b8264ffbbc 962 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 963 }
klauss 109:a5b8264ffbbc 964 }
klauss 109:a5b8264ffbbc 965 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 966
klauss 109:a5b8264ffbbc 967 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 968 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 969
klauss 109:a5b8264ffbbc 970 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 971
klauss 109:a5b8264ffbbc 972 ptr = NULL;
klauss 109:a5b8264ffbbc 973
klauss 109:a5b8264ffbbc 974 print_hex_sip_var = false;
klauss 109:a5b8264ffbbc 975 Call_Box * cb = __find_CB__ ( v_cb, print_hex_this_sip );
klauss 109:a5b8264ffbbc 976 if( cb != NULL )
klauss 109:a5b8264ffbbc 977 {
klauss 109:a5b8264ffbbc 978 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 979 ptr = ( uint8_t * ) cb -> sip;
klauss 109:a5b8264ffbbc 980 }
klauss 109:a5b8264ffbbc 981
klauss 109:a5b8264ffbbc 982 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 983 {
klauss 109:a5b8264ffbbc 984 bool finished = false;
klauss 109:a5b8264ffbbc 985 volatile int i = 0;
klauss 109:a5b8264ffbbc 986 int count = 0;
klauss 109:a5b8264ffbbc 987 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 988 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 989 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 990
klauss 109:a5b8264ffbbc 991 while ( !finished )
klauss 109:a5b8264ffbbc 992 {
klauss 109:a5b8264ffbbc 993 if( dont_overwrite_tcp_buffer.read_ms () >= 500 )
klauss 109:a5b8264ffbbc 994 {
klauss 109:a5b8264ffbbc 995 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 996 for ( ; i < sizeof( Sip ); i++ )
klauss 109:a5b8264ffbbc 997 {
klauss 109:a5b8264ffbbc 998 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 999 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1000 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1001 count++;
klauss 109:a5b8264ffbbc 1002
klauss 109:a5b8264ffbbc 1003 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1004 {
klauss 109:a5b8264ffbbc 1005 count = 0;
klauss 109:a5b8264ffbbc 1006 i++;
klauss 109:a5b8264ffbbc 1007 break;
klauss 109:a5b8264ffbbc 1008 }
klauss 109:a5b8264ffbbc 1009 }
klauss 109:a5b8264ffbbc 1010 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1011 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1012 if ( i >= sizeof ( Sip ) ) finished = true;
klauss 109:a5b8264ffbbc 1013 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1014 }
klauss 109:a5b8264ffbbc 1015 }
klauss 109:a5b8264ffbbc 1016 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1017 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1018 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1019 }
klauss 109:a5b8264ffbbc 1020 }
klauss 109:a5b8264ffbbc 1021 }
klauss 109:a5b8264ffbbc 1022 else
klauss 109:a5b8264ffbbc 1023 {
klauss 109:a5b8264ffbbc 1024 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1025 }
klauss 109:a5b8264ffbbc 1026 }
klauss 109:a5b8264ffbbc 1027 /*
klauss 109:a5b8264ffbbc 1028 if ( print_hex_cb_all )
klauss 109:a5b8264ffbbc 1029 {
klauss 109:a5b8264ffbbc 1030 print_hex_cb_all = false;
klauss 109:a5b8264ffbbc 1031
klauss 109:a5b8264ffbbc 1032 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 1033 {
klauss 109:a5b8264ffbbc 1034 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 1035 }
klauss 109:a5b8264ffbbc 1036
klauss 109:a5b8264ffbbc 1037 for ( register uint8_t j = 0; j < v_cb->size(); j++ )
klauss 109:a5b8264ffbbc 1038 {
klauss 109:a5b8264ffbbc 1039 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1040
klauss 109:a5b8264ffbbc 1041 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1042 {
klauss 109:a5b8264ffbbc 1043 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1044 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1045 {
klauss 109:a5b8264ffbbc 1046 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1047
klauss 109:a5b8264ffbbc 1048 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1049 {
klauss 109:a5b8264ffbbc 1050 if( i != 0 )
klauss 109:a5b8264ffbbc 1051 {
klauss 109:a5b8264ffbbc 1052 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1053 }
klauss 109:a5b8264ffbbc 1054 else
klauss 109:a5b8264ffbbc 1055 {
klauss 109:a5b8264ffbbc 1056 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1057 }
klauss 109:a5b8264ffbbc 1058 }
klauss 109:a5b8264ffbbc 1059 else
klauss 109:a5b8264ffbbc 1060 {
klauss 109:a5b8264ffbbc 1061 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1062 }
klauss 109:a5b8264ffbbc 1063 }
klauss 109:a5b8264ffbbc 1064 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1065
klauss 109:a5b8264ffbbc 1066 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1067 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 1068
klauss 109:a5b8264ffbbc 1069 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1070
klauss 109:a5b8264ffbbc 1071 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1072
klauss 109:a5b8264ffbbc 1073 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1074 {
klauss 109:a5b8264ffbbc 1075 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1076 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1077 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1078 }
klauss 109:a5b8264ffbbc 1079
klauss 109:a5b8264ffbbc 1080 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1081 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1082 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1083 }
klauss 109:a5b8264ffbbc 1084 }
klauss 109:a5b8264ffbbc 1085 else
klauss 109:a5b8264ffbbc 1086 {
klauss 109:a5b8264ffbbc 1087 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 1088 }
klauss 109:a5b8264ffbbc 1089 }
klauss 109:a5b8264ffbbc 1090 }
klauss 109:a5b8264ffbbc 1091 */
klauss 109:a5b8264ffbbc 1092 }//end Sip debug print
klauss 109:a5b8264ffbbc 1093
klauss 109:a5b8264ffbbc 1094 if( dcallshow_rtp == true ){
klauss 109:a5b8264ffbbc 1095 dcallshow_rtp = false;
klauss 109:a5b8264ffbbc 1096 send_msg(":: CAll RTP :: %u", v_call->size() );
klauss 109:a5b8264ffbbc 1097 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 109:a5b8264ffbbc 1098 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 109:a5b8264ffbbc 1099 if( call != NULL )
klauss 109:a5b8264ffbbc 1100 {
klauss 109:a5b8264ffbbc 1101 send_msg("CBX ( %d, %d ) - Server ( %d, %d )",
klauss 109:a5b8264ffbbc 1102 call->get_cb_ext(),
klauss 109:a5b8264ffbbc 1103 call->get_cb_port(),
klauss 109:a5b8264ffbbc 1104 call->get_rtp_server_ext(),
klauss 109:a5b8264ffbbc 1105 call->get_rtp_server_port()
klauss 109:a5b8264ffbbc 1106 );
klauss 109:a5b8264ffbbc 1107 }
klauss 109:a5b8264ffbbc 1108 }
klauss 109:a5b8264ffbbc 1109 }
klauss 109:a5b8264ffbbc 1110
klauss 109:a5b8264ffbbc 1111 if ( print_call_var )
klauss 109:a5b8264ffbbc 1112 {
klauss 109:a5b8264ffbbc 1113 print_call_var = false;
klauss 109:a5b8264ffbbc 1114 VZ_call * call = __find_Call__( v_call, print_this_call );
klauss 109:a5b8264ffbbc 1115 if ( call != NULL )
klauss 109:a5b8264ffbbc 1116 {
klauss 109:a5b8264ffbbc 1117 send_msg ("Values :: %p\r\n", ( void *) call );
klauss 109:a5b8264ffbbc 1118 call -> print_yourself ();
klauss 109:a5b8264ffbbc 1119 }
klauss 109:a5b8264ffbbc 1120 else
klauss 109:a5b8264ffbbc 1121 {
klauss 109:a5b8264ffbbc 1122 if( print_values )
klauss 109:a5b8264ffbbc 1123 {
klauss 109:a5b8264ffbbc 1124 debug_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1125 }
klauss 109:a5b8264ffbbc 1126 else
klauss 109:a5b8264ffbbc 1127 {
klauss 109:a5b8264ffbbc 1128 send_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1129 }
klauss 109:a5b8264ffbbc 1130 }
klauss 109:a5b8264ffbbc 1131 }
klauss 109:a5b8264ffbbc 1132
klauss 109:a5b8264ffbbc 1133 if ( print_hex_call_var )
klauss 109:a5b8264ffbbc 1134 {
klauss 109:a5b8264ffbbc 1135 print_hex_call_var = false;
klauss 109:a5b8264ffbbc 1136 VZ_call * call = __find_Call__( v_call, print_hex_this_call );
klauss 109:a5b8264ffbbc 1137
klauss 109:a5b8264ffbbc 1138 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1139 if( call != NULL )
klauss 109:a5b8264ffbbc 1140 {
klauss 109:a5b8264ffbbc 1141 ptr = ( uint8_t * ) call;
klauss 109:a5b8264ffbbc 1142 }
klauss 109:a5b8264ffbbc 1143
klauss 109:a5b8264ffbbc 1144 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1145 {
klauss 109:a5b8264ffbbc 1146 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1147 for ( register int i = 0; i < sizeof( VZ_call ); i++ )
klauss 109:a5b8264ffbbc 1148 {
klauss 109:a5b8264ffbbc 1149 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1150
klauss 109:a5b8264ffbbc 1151 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1152 {
klauss 109:a5b8264ffbbc 1153 if( i != 0 )
klauss 109:a5b8264ffbbc 1154 {
klauss 109:a5b8264ffbbc 1155 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1156 }
klauss 109:a5b8264ffbbc 1157 else
klauss 109:a5b8264ffbbc 1158 {
klauss 109:a5b8264ffbbc 1159 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1160 }
klauss 109:a5b8264ffbbc 1161 }
klauss 109:a5b8264ffbbc 1162 else
klauss 109:a5b8264ffbbc 1163 {
klauss 109:a5b8264ffbbc 1164 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1165 }
klauss 109:a5b8264ffbbc 1166 }
klauss 109:a5b8264ffbbc 1167 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1168
klauss 109:a5b8264ffbbc 1169 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1170 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 1171
klauss 109:a5b8264ffbbc 1172 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1173
klauss 109:a5b8264ffbbc 1174 ptr = NULL;
klauss 109:a5b8264ffbbc 1175
klauss 109:a5b8264ffbbc 1176 VZ_call * call = __find_Call__( v_call, print_hex_this_call );
klauss 109:a5b8264ffbbc 1177
klauss 109:a5b8264ffbbc 1178 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1179 if( call != NULL )
klauss 109:a5b8264ffbbc 1180 {
klauss 109:a5b8264ffbbc 1181 ptr = ( uint8_t * ) call;
klauss 109:a5b8264ffbbc 1182 }
klauss 109:a5b8264ffbbc 1183
klauss 109:a5b8264ffbbc 1184 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1185 {
klauss 109:a5b8264ffbbc 1186 bool finished = false;
klauss 109:a5b8264ffbbc 1187 volatile int i = 0;
klauss 109:a5b8264ffbbc 1188 int count = 0;
klauss 109:a5b8264ffbbc 1189 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 1190 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 1191 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 1192
klauss 109:a5b8264ffbbc 1193 while ( !finished )
klauss 109:a5b8264ffbbc 1194 {
klauss 109:a5b8264ffbbc 1195 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 109:a5b8264ffbbc 1196 {
klauss 109:a5b8264ffbbc 1197 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1198 for ( ; i < sizeof( VZ_call ); i++ )
klauss 109:a5b8264ffbbc 1199 {
klauss 109:a5b8264ffbbc 1200 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1201 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1202 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1203 count++;
klauss 109:a5b8264ffbbc 1204
klauss 109:a5b8264ffbbc 1205 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1206 {
klauss 109:a5b8264ffbbc 1207 count = 0;
klauss 109:a5b8264ffbbc 1208 i++;
klauss 109:a5b8264ffbbc 1209 break;
klauss 109:a5b8264ffbbc 1210 }
klauss 109:a5b8264ffbbc 1211 }
klauss 109:a5b8264ffbbc 1212 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1213 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1214 if ( i >= sizeof ( VZ_call ) ) finished = true;
klauss 109:a5b8264ffbbc 1215 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1216 }
klauss 109:a5b8264ffbbc 1217 }
klauss 109:a5b8264ffbbc 1218 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1219 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1220 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1221 }
klauss 109:a5b8264ffbbc 1222 }
klauss 109:a5b8264ffbbc 1223 }
klauss 109:a5b8264ffbbc 1224 else
klauss 109:a5b8264ffbbc 1225 {
klauss 109:a5b8264ffbbc 1226 if( print_values )
klauss 109:a5b8264ffbbc 1227 {
klauss 109:a5b8264ffbbc 1228 debug_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1229 }
klauss 109:a5b8264ffbbc 1230 else
klauss 109:a5b8264ffbbc 1231 {
klauss 109:a5b8264ffbbc 1232 send_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1233 }
klauss 109:a5b8264ffbbc 1234 }
klauss 109:a5b8264ffbbc 1235 }
klauss 109:a5b8264ffbbc 1236
klauss 109:a5b8264ffbbc 1237
klauss 109:a5b8264ffbbc 1238 if ( print_hex_rtp_var )
klauss 109:a5b8264ffbbc 1239 {
klauss 109:a5b8264ffbbc 1240 print_hex_rtp_var = false;
klauss 109:a5b8264ffbbc 1241 VZ_call * call = __find_Call__( v_call, print_hex_this_rtp );
klauss 109:a5b8264ffbbc 1242
klauss 109:a5b8264ffbbc 1243 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1244 if( call != NULL )
klauss 109:a5b8264ffbbc 1245 {
klauss 109:a5b8264ffbbc 1246 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 109:a5b8264ffbbc 1247 }
klauss 109:a5b8264ffbbc 1248
klauss 109:a5b8264ffbbc 1249 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1250 {
klauss 109:a5b8264ffbbc 1251 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1252 for ( register int i = 0; i < sizeof( RTP ); i++ )
klauss 109:a5b8264ffbbc 1253 {
klauss 109:a5b8264ffbbc 1254 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1255
klauss 109:a5b8264ffbbc 1256 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1257 {
klauss 109:a5b8264ffbbc 1258 if( i != 0 )
klauss 109:a5b8264ffbbc 1259 {
klauss 109:a5b8264ffbbc 1260 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1261 }
klauss 109:a5b8264ffbbc 1262 else
klauss 109:a5b8264ffbbc 1263 {
klauss 109:a5b8264ffbbc 1264 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1265 }
klauss 109:a5b8264ffbbc 1266 }
klauss 109:a5b8264ffbbc 1267 else
klauss 109:a5b8264ffbbc 1268 {
klauss 109:a5b8264ffbbc 1269 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1270 }
klauss 109:a5b8264ffbbc 1271 }
klauss 109:a5b8264ffbbc 1272 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1273
klauss 109:a5b8264ffbbc 1274 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1275 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 1276
klauss 109:a5b8264ffbbc 1277 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1278
klauss 109:a5b8264ffbbc 1279 ptr = NULL;
klauss 109:a5b8264ffbbc 1280
klauss 109:a5b8264ffbbc 1281 VZ_call * call = __find_Call__( v_call, print_hex_this_rtp );
klauss 109:a5b8264ffbbc 1282
klauss 109:a5b8264ffbbc 1283 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1284 if( call != NULL )
klauss 109:a5b8264ffbbc 1285 {
klauss 109:a5b8264ffbbc 1286 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 109:a5b8264ffbbc 1287 }
klauss 109:a5b8264ffbbc 1288
klauss 109:a5b8264ffbbc 1289 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1290 {
klauss 109:a5b8264ffbbc 1291 bool finished = false;
klauss 109:a5b8264ffbbc 1292 volatile int i = 0;
klauss 109:a5b8264ffbbc 1293 int count = 0;
klauss 109:a5b8264ffbbc 1294 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 1295 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 1296 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 1297
klauss 109:a5b8264ffbbc 1298 while ( !finished )
klauss 109:a5b8264ffbbc 1299 {
klauss 109:a5b8264ffbbc 1300 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 109:a5b8264ffbbc 1301 {
klauss 109:a5b8264ffbbc 1302 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1303 for ( ; i < sizeof( RTP ); i++ )
klauss 109:a5b8264ffbbc 1304 {
klauss 109:a5b8264ffbbc 1305 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1306 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1307 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1308 count++;
klauss 109:a5b8264ffbbc 1309
klauss 109:a5b8264ffbbc 1310 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1311 {
klauss 109:a5b8264ffbbc 1312 count = 0;
klauss 109:a5b8264ffbbc 1313 i++;
klauss 109:a5b8264ffbbc 1314 break;
klauss 109:a5b8264ffbbc 1315 }
klauss 109:a5b8264ffbbc 1316 }
klauss 109:a5b8264ffbbc 1317 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1318 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1319 if ( i >= sizeof ( RTP ) ) finished = true;
klauss 109:a5b8264ffbbc 1320 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1321 }
klauss 109:a5b8264ffbbc 1322 }
klauss 109:a5b8264ffbbc 1323 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1324 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1325 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1326 }
klauss 109:a5b8264ffbbc 1327 }
klauss 109:a5b8264ffbbc 1328 }
klauss 109:a5b8264ffbbc 1329 else
klauss 109:a5b8264ffbbc 1330 {
klauss 109:a5b8264ffbbc 1331 if( print_values )
klauss 109:a5b8264ffbbc 1332 {
klauss 109:a5b8264ffbbc 1333 debug_msg("Call %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1334 }
klauss 109:a5b8264ffbbc 1335 else
klauss 109:a5b8264ffbbc 1336 {
klauss 109:a5b8264ffbbc 1337 send_msg("Call %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1338 }
klauss 109:a5b8264ffbbc 1339 }
klauss 109:a5b8264ffbbc 1340 }
klauss 109:a5b8264ffbbc 1341
klauss 109:a5b8264ffbbc 1342 if ( print_rtp_var )
klauss 109:a5b8264ffbbc 1343 {
klauss 109:a5b8264ffbbc 1344 print_rtp_var = false;
klauss 109:a5b8264ffbbc 1345 VZ_call * call = __find_Call__( v_call, print_this_rtp );
klauss 109:a5b8264ffbbc 1346 if ( call != NULL )
klauss 109:a5b8264ffbbc 1347 {
klauss 109:a5b8264ffbbc 1348 if ( call -> check_rtp () != NULL )
klauss 109:a5b8264ffbbc 1349 {
klauss 109:a5b8264ffbbc 1350 send_msg ("Values :: %p\r\n", ( void *) call -> check_rtp () );
klauss 109:a5b8264ffbbc 1351 call -> rtp_print_yourself ();
klauss 109:a5b8264ffbbc 1352 }
klauss 109:a5b8264ffbbc 1353 else
klauss 109:a5b8264ffbbc 1354 {
klauss 109:a5b8264ffbbc 1355 if( print_values )
klauss 109:a5b8264ffbbc 1356 {
klauss 109:a5b8264ffbbc 1357 debug_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1358 }
klauss 109:a5b8264ffbbc 1359 else
klauss 109:a5b8264ffbbc 1360 {
klauss 109:a5b8264ffbbc 1361 send_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1362 }
klauss 109:a5b8264ffbbc 1363 }
klauss 109:a5b8264ffbbc 1364 }
klauss 109:a5b8264ffbbc 1365 else
klauss 109:a5b8264ffbbc 1366 {
klauss 109:a5b8264ffbbc 1367 if( print_values )
klauss 109:a5b8264ffbbc 1368 {
klauss 109:a5b8264ffbbc 1369 debug_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1370 }
klauss 109:a5b8264ffbbc 1371 else
klauss 109:a5b8264ffbbc 1372 {
klauss 109:a5b8264ffbbc 1373 send_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1374 }
klauss 109:a5b8264ffbbc 1375 }
klauss 109:a5b8264ffbbc 1376 }
klauss 109:a5b8264ffbbc 1377
klauss 114:472502b31a12 1378 //end debug_print
klauss 91:c2a86b1f8aaa 1379
klauss 91:c2a86b1f8aaa 1380 if( reset_cks == true ) {
klauss 81:3656f00ab3db 1381 pkg_cksok = 0;
klauss 81:3656f00ab3db 1382 pkg_ckserr = 0;
klauss 99:e80850c51106 1383 pkg_zero = 0;
klauss 81:3656f00ab3db 1384 reset_cks = false;
klauss 99:e80850c51106 1385 out_of_range = 0;
klauss 99:e80850c51106 1386 missed_pkg = 0;
klauss 100:09a23fcd3bdf 1387 delayed_pkg_to_cb = 0;
klauss 99:e80850c51106 1388 cpld_pkg_tx_counter = 0;
klauss 99:e80850c51106 1389 cpld_pkg_rx_counter = 0;
klauss 81:3656f00ab3db 1390 pcks_s = true;
klauss 81:3656f00ab3db 1391 }
klauss 91:c2a86b1f8aaa 1392
klauss 119:ee6a53069455 1393 // exibe os contadores de cks de pacotes recebidos na interface CBx->Header, e outros contadores relacionados
klauss 91:c2a86b1f8aaa 1394 if( pcks_s == true ) {
klauss 119:ee6a53069455 1395 send_msg(
klauss 119:ee6a53069455 1396 "\r\n"
klauss 119:ee6a53069455 1397 " PKG_CKS OK: %d ( %003.2f )\r\n"
klauss 119:ee6a53069455 1398 " PKG_CKS ERR: %d ( %003.2f )\r\n"
klauss 119:ee6a53069455 1399 " PKG_0: %d ( %003.2f )\r\n"
klauss 119:ee6a53069455 1400 " Out_of_range: %d ( %003.2f )\r\n"
klauss 119:ee6a53069455 1401 " Miss_Pkg: %d\r\n"
klauss 119:ee6a53069455 1402 " TX_delayed: %d\n\r"
klauss 119:ee6a53069455 1403 " TX_Counter: %d\n\r"
klauss 119:ee6a53069455 1404 " RX_Counter: %d\r\n",
klauss 119:ee6a53069455 1405 pkg_cksok, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_cksok / cpld_pkg_rx_counter ) * 100,
klauss 119:ee6a53069455 1406 pkg_ckserr, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_ckserr / cpld_pkg_rx_counter ) * 100,
klauss 119:ee6a53069455 1407 pkg_zero, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_zero / cpld_pkg_rx_counter ) * 100,
klauss 119:ee6a53069455 1408 out_of_range, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) out_of_range / cpld_pkg_rx_counter ) * 100,
klauss 119:ee6a53069455 1409 missed_pkg,
klauss 119:ee6a53069455 1410 delayed_pkg_to_cb,
klauss 119:ee6a53069455 1411 cpld_pkg_tx_counter,
klauss 119:ee6a53069455 1412 cpld_pkg_rx_counter
klauss 119:ee6a53069455 1413 );
klauss 81:3656f00ab3db 1414 pcks_s = false;
klauss 81:3656f00ab3db 1415 }
klauss 119:ee6a53069455 1416
klauss 119:ee6a53069455 1417 // zera os contadores de pacotes que resultaram em falha de envio vio ETH
klauss 119:ee6a53069455 1418 if( reset_missed_send_udp_pkg ){
klauss 119:ee6a53069455 1419 miss_fw_send_pkg = 0;
klauss 119:ee6a53069455 1420 miss_prompt_udp_send_pkg = 0;
klauss 119:ee6a53069455 1421 miss_sip_registry_send_pkg = 0;
klauss 119:ee6a53069455 1422 miss_sip_invite_send_pkg = 0;
klauss 119:ee6a53069455 1423 miss_sip_bye_send_pkg = 0;
klauss 119:ee6a53069455 1424 miss_sip_unregistry_send_pkg = 0;
klauss 119:ee6a53069455 1425 miss_sip_ok_send_pkg = 0;
klauss 119:ee6a53069455 1426 miss_sip_rcv_bye_send_pkg = 0;
klauss 119:ee6a53069455 1427 miss_wdt_send_pkg = 0;
klauss 119:ee6a53069455 1428 miss_prompt_udp_send_pkg = 0;
klauss 119:ee6a53069455 1429 miss_ftp_udp_send_pkg = 0;
klauss 119:ee6a53069455 1430 miss_prompt_udp_rcv_pkg = 0;
klauss 119:ee6a53069455 1431 reset_missed_send_udp_pkg = false;
klauss 119:ee6a53069455 1432 missed_send_udp_pkg = true;
klauss 119:ee6a53069455 1433 }
klauss 119:ee6a53069455 1434
klauss 119:ee6a53069455 1435 // exibe estatisticas de pacotes que resultaram em falha de envio na interface ETH
klauss 119:ee6a53069455 1436 if( missed_send_udp_pkg )
klauss 119:ee6a53069455 1437 {
klauss 119:ee6a53069455 1438 send_msg( "\r\nMissed pkgs ::\r\n "
klauss 119:ee6a53069455 1439 "FW: %d\r\n "
klauss 119:ee6a53069455 1440 "Prompt UDP %d\r\n "
klauss 119:ee6a53069455 1441 "Registry %d\r\n "
klauss 119:ee6a53069455 1442 "Invite %d\r\n "
klauss 119:ee6a53069455 1443 "Bye %d\r\n "
klauss 119:ee6a53069455 1444 "Unregistry %d\r\n "
klauss 119:ee6a53069455 1445 "UDP incoming ( invite ans ) %d\r\n "
klauss 119:ee6a53069455 1446 "UDP incoming ( bye from * ) %d\r\n "
klauss 119:ee6a53069455 1447 "Wdt [ alive | rst ] %d\r\n "
klauss 119:ee6a53069455 1448 "Rcv prompt %d\r\n "
klauss 119:ee6a53069455 1449 "[ debug | send ]_msg %d\r\n "
klauss 119:ee6a53069455 1450 "RTP %d\r\n",
klauss 119:ee6a53069455 1451 miss_fw_send_pkg,
klauss 119:ee6a53069455 1452 miss_prompt_udp_send_pkg,
klauss 119:ee6a53069455 1453 miss_sip_registry_send_pkg,
klauss 119:ee6a53069455 1454 miss_sip_invite_send_pkg,
klauss 119:ee6a53069455 1455 miss_sip_bye_send_pkg,
klauss 119:ee6a53069455 1456 miss_sip_unregistry_send_pkg,
klauss 119:ee6a53069455 1457 miss_sip_ok_send_pkg,
klauss 119:ee6a53069455 1458 miss_sip_rcv_bye_send_pkg,
klauss 119:ee6a53069455 1459 miss_wdt_send_pkg,
klauss 119:ee6a53069455 1460 miss_prompt_udp_send_pkg,
klauss 119:ee6a53069455 1461 miss_prompt_udp_rcv_pkg,
klauss 119:ee6a53069455 1462 miss_ftp_udp_send_pkg
klauss 119:ee6a53069455 1463 );
klauss 119:ee6a53069455 1464
klauss 119:ee6a53069455 1465 missed_send_udp_pkg = false;
klauss 119:ee6a53069455 1466 }
klauss 114:472502b31a12 1467
klauss 100:09a23fcd3bdf 1468 if( flood_bug_pkg ){
klauss 100:09a23fcd3bdf 1469 static int id = 0x10;
klauss 100:09a23fcd3bdf 1470 if( id < 10 ) id = 0x0b;
klauss 119:ee6a53069455 1471 send2callboxes( build_cb_package( 5828, 5123, REGISTRY,
klauss 119:ee6a53069455 1472 ( char * )buffer, id++, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 100:09a23fcd3bdf 1473 }
klauss 100:09a23fcd3bdf 1474
klauss 114:472502b31a12 1475 if( led_sync_timer.read() > 1 ) {
klauss 78:1353744f01e1 1476 led_sync_timer.reset();
klauss 78:1353744f01e1 1477 led3 = !led3;
klauss 78:1353744f01e1 1478 CAB_LED = !CAB_LED;
klauss 78:1353744f01e1 1479 }
klauss 114:472502b31a12 1480
klauss 91:c2a86b1f8aaa 1481 switch( type ) {
klauss 119:ee6a53069455 1482 case DO_NOTHING :
klauss 91:c2a86b1f8aaa 1483 {}
klauss 91:c2a86b1f8aaa 1484 break;
klauss 91:c2a86b1f8aaa 1485
klauss 119:ee6a53069455 1486 case CB_BYE : {
klauss 63:0d95da692bb4 1487 cb_bye_counter++;
klauss 0:4d17cd9c8f9d 1488 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1489 if( cb != NULL ) {
klauss 119:ee6a53069455 1490 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 1491
klauss 81:3656f00ab3db 1492 bool already_removed = true;
klauss 119:ee6a53069455 1493
klauss 119:ee6a53069455 1494 if( cb->get_status() != cb_idle ) {
klauss 119:ee6a53069455 1495 already_removed = false;
klauss 119:ee6a53069455 1496
klauss 119:ee6a53069455 1497 data[ TIMESLICE_PLACE ] = 0;
klauss 119:ee6a53069455 1498
klauss 119:ee6a53069455 1499 send2callboxes( build_cb_package( ext, port, CB_BYE,
klauss 119:ee6a53069455 1500 ( char * )data, data[ 0 ] |= BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 119:ee6a53069455 1501
klauss 119:ee6a53069455 1502 ts->return_timeslice( cb->call_end () );
klauss 119:ee6a53069455 1503 }
klauss 119:ee6a53069455 1504
klauss 119:ee6a53069455 1505 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "[%d] Already removed from inviting queue", ext );
klauss 119:ee6a53069455 1506
klauss 119:ee6a53069455 1507 already_removed = true;
klauss 119:ee6a53069455 1508
klauss 119:ee6a53069455 1509 for ( register uint8_t i = 0; i < v_call->size(); i++ )
klauss 119:ee6a53069455 1510 {
klauss 0:4d17cd9c8f9d 1511 VZ_call * call = (VZ_call *)v_call->get_element( i );
klauss 119:ee6a53069455 1512 if( call->get_cb_ext() == ext )
klauss 119:ee6a53069455 1513 {
klauss 81:3656f00ab3db 1514 already_removed = false;
klauss 119:ee6a53069455 1515
klauss 119:ee6a53069455 1516 data[ TIMESLICE_PLACE ] = 0;
klauss 91:c2a86b1f8aaa 1517
klauss 81:3656f00ab3db 1518 v_call->remove_element( i );
klauss 119:ee6a53069455 1519
klauss 119:ee6a53069455 1520 send2callboxes( build_cb_package( ext, port, CB_BYE,
klauss 119:ee6a53069455 1521 ( char * )data, data[ 0 ] |= BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 1522
klauss 3:cd9148672e25 1523 delete( call );
klauss 119:ee6a53069455 1524
klauss 119:ee6a53069455 1525 ts->return_timeslice( cb->call_end () );
klauss 0:4d17cd9c8f9d 1526 }
klauss 0:4d17cd9c8f9d 1527 }
klauss 119:ee6a53069455 1528
klauss 119:ee6a53069455 1529 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "[%d] Already removed from vector call", ext );
klauss 82:f55d13babca0 1530
klauss 119:ee6a53069455 1531 cb -> registry();
klauss 119:ee6a53069455 1532
klauss 119:ee6a53069455 1533 } else if( debug_invite || debug_main ) debug_msg("[%d] Bye from who ?", ext );
klauss 91:c2a86b1f8aaa 1534 }
klauss 91:c2a86b1f8aaa 1535 break;
klauss 91:c2a86b1f8aaa 1536
klauss 119:ee6a53069455 1537 case INVITE : {
klauss 114:472502b31a12 1538 if( drop_invite_pkg ){
klauss 119:ee6a53069455 1539 debug_msg("[%d] Dropando invite pck - msg id :: %d", ext, data[ 0 ] );
klauss 114:472502b31a12 1540 break;
klauss 114:472502b31a12 1541 }
klauss 119:ee6a53069455 1542
klauss 63:0d95da692bb4 1543 invite_counter++;
klauss 119:ee6a53069455 1544
klauss 119:ee6a53069455 1545 if( debug_invite ) debug_msg("[%d] Invite request", ext);
klauss 119:ee6a53069455 1546
klauss 0:4d17cd9c8f9d 1547 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 119:ee6a53069455 1548
klauss 91:c2a86b1f8aaa 1549 if( cb == NULL ) {
klauss 119:ee6a53069455 1550 if( v_cb->size() < MAX_CB_IN_A_BRANCH ) {
klauss 119:ee6a53069455 1551 if( debug_main ) debug_msg( "[%d] Adding CBx", ext );
klauss 91:c2a86b1f8aaa 1552 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 1553
klauss 91:c2a86b1f8aaa 1554 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1555 memory_is_over = true;
klauss 119:ee6a53069455 1556 if( debug_memory ) debug_msg("[%d] Invite allocation cb fail", ext );
klauss 91:c2a86b1f8aaa 1557 } else {
klauss 91:c2a86b1f8aaa 1558 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 1559 }
klauss 89:0fe315117b00 1560 }
klauss 0:4d17cd9c8f9d 1561 }
klauss 119:ee6a53069455 1562
klauss 119:ee6a53069455 1563 if( cb != NULL )
klauss 119:ee6a53069455 1564 {
klauss 119:ee6a53069455 1565 cb->invite_retry_count_reset();
klauss 119:ee6a53069455 1566
klauss 91:c2a86b1f8aaa 1567 cb->set_msg_id( data[ 0 ] );
klauss 119:ee6a53069455 1568
klauss 119:ee6a53069455 1569 if( cb->status == cb_idle ){
klauss 119:ee6a53069455 1570 cb -> call_config ();
klauss 119:ee6a53069455 1571 } else {
klauss 119:ee6a53069455 1572 data[ TIMESLICE_PLACE ] = cb->get_timeslice();
klauss 119:ee6a53069455 1573
klauss 119:ee6a53069455 1574 cb->set_invite_response_pending();
klauss 119:ee6a53069455 1575
klauss 119:ee6a53069455 1576 send2callboxes( build_cb_package( ext, port, INVITE,
klauss 119:ee6a53069455 1577 ( char * )data, cb->msg_id_update (), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 92:92df17f538a8 1578 }
klauss 119:ee6a53069455 1579
klauss 87:679ee0d594a9 1580 invite_handler( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 1581 }
klauss 91:c2a86b1f8aaa 1582 }
klauss 91:c2a86b1f8aaa 1583 break;
klauss 119:ee6a53069455 1584 case REGISTRY : {
klauss 63:0d95da692bb4 1585 registry_counter++;
klauss 78:1353744f01e1 1586 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 119:ee6a53069455 1587
klauss 119:ee6a53069455 1588 if( cb == NULL )
klauss 119:ee6a53069455 1589 {
klauss 119:ee6a53069455 1590 if( v_cb->size() < MAX_CB_IN_A_BRANCH )
klauss 119:ee6a53069455 1591 {
klauss 119:ee6a53069455 1592 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 91:c2a86b1f8aaa 1593 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 1594
klauss 91:c2a86b1f8aaa 1595 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1596 memory_is_over = true;
klauss 119:ee6a53069455 1597 if( debug_memory ) debug_msg("[%d] Registry cb allocation fail", ext );
klauss 91:c2a86b1f8aaa 1598 } else {
klauss 91:c2a86b1f8aaa 1599 v_cb->add( cb );
klauss 119:ee6a53069455 1600 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 91:c2a86b1f8aaa 1601 }
klauss 87:679ee0d594a9 1602 }
klauss 0:4d17cd9c8f9d 1603 }
klauss 119:ee6a53069455 1604
klauss 119:ee6a53069455 1605 if( debug_main ) debug_msg("[%d %d] Registered", ext, port );
klauss 91:c2a86b1f8aaa 1606
klauss 87:679ee0d594a9 1607 if( cb != NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 1608 }
klauss 91:c2a86b1f8aaa 1609 break;
klauss 119:ee6a53069455 1610 case BOOT : {
klauss 63:0d95da692bb4 1611 boot_counter++;
klauss 99:e80850c51106 1612 if( debug_boot == true ){
klauss 119:ee6a53069455 1613 send_msg("[%d %d] Boot pkg -- pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 1614 }
klauss 119:ee6a53069455 1615 send2callboxes( build_cb_package( ext, port, REGISTRY,
klauss 119:ee6a53069455 1616 ( char * )data, data[ 0 ] | BIT7, CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 1617 }
klauss 117:e9facba9db27 1618 break;
klauss 117:e9facba9db27 1619
klauss 119:ee6a53069455 1620 case FW : {
klauss 119:ee6a53069455 1621 if( debug_fw_print ) send_msg("[%d %d]::FW pkg::", ext, port );
klauss 99:e80850c51106 1622 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 1623 }
klauss 99:e80850c51106 1624 break;
klauss 91:c2a86b1f8aaa 1625
klauss 119:ee6a53069455 1626 case BOOTLOADER_CBX : {
klauss 117:e9facba9db27 1627 uint16_t bl_cnt2 = 0;
klauss 117:e9facba9db27 1628 //char bl_send_buffer[ BL_SIZE + 2 ];
klauss 117:e9facba9db27 1629 //int ret = bl_cbx_reply_to_eth( ext, ( char * )data );
klauss 117:e9facba9db27 1630 //BLEUBA
klauss 117:e9facba9db27 1631 //pc.printf("\r\nCBX RESPONDEU BOOTLOADER!\r\n");
klauss 117:e9facba9db27 1632 if (debug_bootloader) {
klauss 117:e9facba9db27 1633 pc.printf("\r\npacote CBX->HDR {");
klauss 117:e9facba9db27 1634 for (bl_cnt2 = 0;bl_cnt2 < BL_SIZE + 1;bl_cnt2++) {
klauss 117:e9facba9db27 1635 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 1636 pc.printf("\r\n ");
klauss 117:e9facba9db27 1637 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 1638 pc.printf(" : ");
klauss 117:e9facba9db27 1639 }
klauss 117:e9facba9db27 1640 pc.printf(hex8(data[bl_cnt2]));
klauss 117:e9facba9db27 1641 pc.printf(", ");
klauss 117:e9facba9db27 1642 }
klauss 117:e9facba9db27 1643 pc.printf("\r\n}");
klauss 117:e9facba9db27 1644 }
klauss 67:cdedc64d9921 1645 bootloader_cbx_counter++;
klauss 117:e9facba9db27 1646 bl_send_buffer[0] = (char)(ext >> 8);
klauss 117:e9facba9db27 1647 bl_send_buffer[1] = (char)(ext & 0xff);
klauss 117:e9facba9db27 1648 for (bl_cnt2 = 0; bl_cnt2 < BL_SIZE; bl_cnt2++) {
klauss 117:e9facba9db27 1649 bl_send_buffer[bl_cnt2 + 2] = data[bl_cnt2 + 1];
klauss 117:e9facba9db27 1650 }
klauss 117:e9facba9db27 1651 if (debug_bootloader) {
klauss 117:e9facba9db27 1652 pc.printf("\r\npacote HDR->SRV {");
klauss 117:e9facba9db27 1653 for (bl_cnt2 = 0;bl_cnt2 < UDP_BL_SIZE;bl_cnt2++) {
klauss 117:e9facba9db27 1654 if ((bl_cnt2 % 30) == 0) {
klauss 117:e9facba9db27 1655 pc.printf("\r\n ");
klauss 117:e9facba9db27 1656 pc.printf(hex16(bl_cnt2));
klauss 117:e9facba9db27 1657 pc.printf(" : ");
klauss 117:e9facba9db27 1658 }
klauss 117:e9facba9db27 1659 pc.printf(hex8(bl_send_buffer[bl_cnt2]));
klauss 117:e9facba9db27 1660 pc.printf(", ");
klauss 117:e9facba9db27 1661 }
klauss 117:e9facba9db27 1662 pc.printf("\r\n}");
klauss 117:e9facba9db27 1663 }
klauss 117:e9facba9db27 1664 udp_bl_client.sendTo( udp_bl_server, bl_send_buffer, UDP_BL_SIZE );
klauss 91:c2a86b1f8aaa 1665 }
klauss 91:c2a86b1f8aaa 1666 break;
klauss 91:c2a86b1f8aaa 1667
klauss 119:ee6a53069455 1668 case PROMPT : {
klauss 78:1353744f01e1 1669 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1670
klauss 91:c2a86b1f8aaa 1671 if( cb == NULL ) {
klauss 119:ee6a53069455 1672 if( v_cb->size() < MAX_CB_IN_A_BRANCH ) {
klauss 119:ee6a53069455 1673 if( debug_main ) debug_msg("[%d] Adding Cbx", ext );
klauss 119:ee6a53069455 1674 cb = new Call_Box( ext, port );
klauss 119:ee6a53069455 1675 if( cb == NULL ){
klauss 119:ee6a53069455 1676 memory_is_over = true;
klauss 119:ee6a53069455 1677 }else{
klauss 119:ee6a53069455 1678 v_cb->add( cb );
klauss 119:ee6a53069455 1679 if( debug_main ) debug_msg("[%d] Added CBx", ext );
klauss 119:ee6a53069455 1680 }
klauss 87:679ee0d594a9 1681 }
klauss 48:195c97f12e8e 1682 }
klauss 91:c2a86b1f8aaa 1683
klauss 92:92df17f538a8 1684 if( cb!= NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 1685
klauss 91:c2a86b1f8aaa 1686 if( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) {
klauss 119:ee6a53069455 1687 if( debug_ping ) send_msg( "[%d %d] Prompt pkg :: Ping", ext, port );
klauss 91:c2a86b1f8aaa 1688 } else {
klauss 78:1353744f01e1 1689 prompt_counter++;
klauss 114:472502b31a12 1690 //fixme isso nao poderia ser resolvido com um sendmsg ?
klauss 119:ee6a53069455 1691 send_msg( "[%i, %i] Prompt pkg::", ext, port );
klauss 91:c2a86b1f8aaa 1692 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 1693 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 1694 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 1695 }
klauss 100:09a23fcd3bdf 1696 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 1697
klauss 114:472502b31a12 1698 if( tcp_session ) {
klauss 119:ee6a53069455 1699 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 119:ee6a53069455 1700 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 78:1353744f01e1 1701 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 1702 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 1703 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 1704 }
klauss 48:195c97f12e8e 1705 }
klauss 91:c2a86b1f8aaa 1706 }
klauss 91:c2a86b1f8aaa 1707 break;
klauss 119:ee6a53069455 1708 case AUDIO : {
klauss 63:0d95da692bb4 1709 audio_counter++;
klauss 119:ee6a53069455 1710 if ( received_audio_from_cb ) {
klauss 119:ee6a53069455 1711 debug_msg("[%d] audio pkg", ext );
klauss 119:ee6a53069455 1712 }
klauss 119:ee6a53069455 1713
klauss 78:1353744f01e1 1714 VZ_call * call = __find_Call__( v_call, ext );
klauss 91:c2a86b1f8aaa 1715 if( call != NULL ) {
klauss 119:ee6a53069455 1716 if ( drop_rtp_from_cbx_pkg ){
klauss 114:472502b31a12 1717 led2 = !led2;
klauss 114:472502b31a12 1718 break;
klauss 119:ee6a53069455 1719 } else {
klauss 114:472502b31a12 1720 char * pkg = call->build_eth_package( data + 2 );
klauss 114:472502b31a12 1721 call->send_message( pkg );
klauss 114:472502b31a12 1722 call->cbx_pkg_idle_timer_reset();
klauss 114:472502b31a12 1723 }
klauss 119:ee6a53069455 1724 }
klauss 119:ee6a53069455 1725
klauss 119:ee6a53069455 1726 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 119:ee6a53069455 1727 if( cb != NULL ){
klauss 119:ee6a53069455 1728 if ( cb->get_invite_response() == false ) {
klauss 119:ee6a53069455 1729 cb->set_invite_response_ok();
klauss 119:ee6a53069455 1730 cb->invite_retry_count_reset();
klauss 119:ee6a53069455 1731 } else {
klauss 119:ee6a53069455 1732 if( debug_main ) debug_msg("[%d] received missed package", ext );
klauss 119:ee6a53069455 1733 }
klauss 0:4d17cd9c8f9d 1734 }
klauss 91:c2a86b1f8aaa 1735 }
klauss 91:c2a86b1f8aaa 1736 break;
klauss 114:472502b31a12 1737 }// fim switch
klauss 105:a930035b6556 1738
klauss 99:e80850c51106 1739 { // rajada
klauss 119:ee6a53069455 1740 if( invite_retry_timer.read_ms() >= 20 )
klauss 112:6ae726539ab9 1741 {
klauss 99:e80850c51106 1742 invite_retry_timer.reset();
klauss 99:e80850c51106 1743
klauss 112:6ae726539ab9 1744 static int retry_invite_pkg = 0;
klauss 112:6ae726539ab9 1745 bool need_retry = false;
klauss 112:6ae726539ab9 1746 Call_Box * cb = NULL;
klauss 112:6ae726539ab9 1747
klauss 112:6ae726539ab9 1748 for ( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 1749 {
klauss 112:6ae726539ab9 1750 retry_invite_pkg++;
klauss 112:6ae726539ab9 1751 if ( retry_invite_pkg >= v_cb->size() ) retry_invite_pkg = 0;
klauss 112:6ae726539ab9 1752
klauss 112:6ae726539ab9 1753 cb = (Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 1754 if ( cb != NULL )
klauss 112:6ae726539ab9 1755 {
klauss 112:6ae726539ab9 1756 if ( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) )
klauss 112:6ae726539ab9 1757 {
klauss 112:6ae726539ab9 1758 need_retry = true;
klauss 99:e80850c51106 1759 break;
klauss 99:e80850c51106 1760 }
klauss 92:92df17f538a8 1761 }
klauss 99:e80850c51106 1762 }
klauss 109:a5b8264ffbbc 1763
klauss 112:6ae726539ab9 1764 if ( need_retry )
klauss 112:6ae726539ab9 1765 {
klauss 112:6ae726539ab9 1766 if( cb->get_invite_response() == false )
klauss 112:6ae726539ab9 1767 {
klauss 112:6ae726539ab9 1768 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 1769
klauss 119:ee6a53069455 1770 buffer[ TIMESLICE_PLACE ] = cb->get_timeslice();
klauss 112:6ae726539ab9 1771
klauss 119:ee6a53069455 1772 send2callboxes( build_cb_package( cb->get_ext(), cb->get_port(), INVITE, ( char * )buffer,
klauss 119:ee6a53069455 1773 cb->get_msg_id(), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 117:e9facba9db27 1774
klauss 119:ee6a53069455 1775 if( debug_invite ) debug_msg("[%d] resend invite OK to Cbx : ( %d, %d )", cb->get_ext(), cb->get_ext(), cb->get_port() );
klauss 119:ee6a53069455 1776 }
klauss 119:ee6a53069455 1777
klauss 119:ee6a53069455 1778 if ( __find_Call__( v_call, cb->get_ext () ) == NULL )
klauss 119:ee6a53069455 1779 {
klauss 119:ee6a53069455 1780
klauss 119:ee6a53069455 1781 if ( ( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) ) )
klauss 112:6ae726539ab9 1782 {
klauss 119:ee6a53069455 1783 char rtp_src_tmp_write_buffer [ CB_BUFFER_SIZE ];
klauss 119:ee6a53069455 1784 uint8_t rtp_dst_tmp_write_buffer [ CB_BUFFER_SIZE ];
klauss 119:ee6a53069455 1785
klauss 119:ee6a53069455 1786 for ( register int i = 0; i < RTP_MSG_SIZE; i++ ) rtp_src_tmp_write_buffer [ i ] = 'U'; // 0x55
klauss 119:ee6a53069455 1787
klauss 119:ee6a53069455 1788 send2callboxes( build_cb_package( cb->get_ext (), cb->get_port (), AUDIO,
klauss 119:ee6a53069455 1789 rtp_src_tmp_write_buffer, AUDIO, RTP_MSG_SIZE, rtp_dst_tmp_write_buffer ) );
klauss 119:ee6a53069455 1790 } else {
klauss 119:ee6a53069455 1791 if ( cb->get_invite_retry_count() == 0 )
klauss 112:6ae726539ab9 1792 {
klauss 119:ee6a53069455 1793 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 119:ee6a53069455 1794
klauss 119:ee6a53069455 1795 for ( register uint8_t i = 0; i < v_call->size(); i++ )
klauss 119:ee6a53069455 1796 {
klauss 119:ee6a53069455 1797 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 119:ee6a53069455 1798 if( call->get_cb_ext() == cb->get_ext() )
klauss 119:ee6a53069455 1799 {
klauss 119:ee6a53069455 1800 v_call->remove_element( i );
klauss 119:ee6a53069455 1801 if( call != NULL ) delete( call );
klauss 119:ee6a53069455 1802 break;
klauss 119:ee6a53069455 1803 }
klauss 119:ee6a53069455 1804 }
klauss 119:ee6a53069455 1805
klauss 119:ee6a53069455 1806 ts->return_timeslice( cb->call_end () );
klauss 119:ee6a53069455 1807
klauss 119:ee6a53069455 1808 if( debug_invite ) debug_msg( "[%d]-- No audio pkgs --", cb->get_ext () );
klauss 92:92df17f538a8 1809 }
klauss 112:6ae726539ab9 1810 }
klauss 92:92df17f538a8 1811 }
klauss 92:92df17f538a8 1812 }
klauss 112:6ae726539ab9 1813 }
klauss 114:472502b31a12 1814 } // fim rajada
klauss 114:472502b31a12 1815
klauss 91:c2a86b1f8aaa 1816 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 1817 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 119:ee6a53069455 1818 if ( call != NULL )
klauss 119:ee6a53069455 1819 {
klauss 119:ee6a53069455 1820 int length = 0;
klauss 119:ee6a53069455 1821 char * tmp = call->get_eth_message( &length );
klauss 119:ee6a53069455 1822 if( tmp != NULL ) {
klauss 119:ee6a53069455 1823 int cb_port = 0xffff;
klauss 119:ee6a53069455 1824 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() );
klauss 119:ee6a53069455 1825
klauss 119:ee6a53069455 1826 if( cb != NULL ) {
klauss 119:ee6a53069455 1827 cb_port = cb->get_port();
klauss 119:ee6a53069455 1828
klauss 119:ee6a53069455 1829 if ( drop_rtp_from_ast_pkg )
klauss 119:ee6a53069455 1830 {
klauss 119:ee6a53069455 1831 led1 = !led1;
klauss 119:ee6a53069455 1832 }
klauss 119:ee6a53069455 1833 else
klauss 119:ee6a53069455 1834 {
klauss 119:ee6a53069455 1835 uint8_t * pkg2cb = build_cb_package( call->get_cb_ext(), cb_port, AUDIO,
klauss 119:ee6a53069455 1836 tmp, AUDIO, length, write_buffer );
klauss 119:ee6a53069455 1837
klauss 119:ee6a53069455 1838 send2callboxes( pkg2cb );
klauss 119:ee6a53069455 1839 }
klauss 119:ee6a53069455 1840
klauss 119:ee6a53069455 1841 } else if( debug_main ) debug_msg("[%d] received missed package -- Type :: %i", ext, type );
klauss 119:ee6a53069455 1842 }
klauss 0:4d17cd9c8f9d 1843 }
klauss 14:22a35f575502 1844 }
klauss 114:472502b31a12 1845
klauss 114:472502b31a12 1846 if( timer_sync_refresh.read_ms() > 250 ) {
klauss 114:472502b31a12 1847 timer_sync_refresh.reset();
klauss 106:a34fcf9f0e02 1848
klauss 119:ee6a53069455 1849 static uint8_t time_to_mode = TIME_TO_REFRESH;
klauss 114:472502b31a12 1850
klauss 119:ee6a53069455 1851 if ( time_to_mode == TIME_TO_REFRESH ){
klauss 119:ee6a53069455 1852 time_to_mode = TIME_TO_WAKE_UP;
klauss 119:ee6a53069455 1853 refresh ( v_cb );
klauss 114:472502b31a12 1854 } else {
klauss 119:ee6a53069455 1855 time_to_mode = TIME_TO_REFRESH;
klauss 119:ee6a53069455 1856 if ( wake_all ) if ( v_call->size() == 0 ) wake_all_up ( v_cb );
klauss 89:0fe315117b00 1857 }
klauss 89:0fe315117b00 1858 }
klauss 108:18a3702650f3 1859
klauss 78:1353744f01e1 1860 // check sip messages only for cbx in call ?
klauss 78:1353744f01e1 1861 int ext_to__be_removed = sip_manager( v_cb );
klauss 119:ee6a53069455 1862 if( ext_to__be_removed > 0 ) {
klauss 78:1353744f01e1 1863 Call_Box * cb = __find_CB__( v_cb, ext_to__be_removed );
klauss 91:c2a86b1f8aaa 1864 if( cb != NULL ) {
klauss 119:ee6a53069455 1865 //if( cb->status == cb_on_call ) // poderia ser if( cb->status != cb_idle ) ???
klauss 119:ee6a53069455 1866 if( cb->status == cb_on_call )
klauss 119:ee6a53069455 1867 {
klauss 119:ee6a53069455 1868 buffer[ TIMESLICE_PLACE ] = 0;
klauss 91:c2a86b1f8aaa 1869
klauss 91:c2a86b1f8aaa 1870 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 4:de46f0d9b14d 1871 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 91:c2a86b1f8aaa 1872 if( call->get_cb_ext() == ext_to__be_removed ) {
klauss 4:de46f0d9b14d 1873 v_call->remove_element( i );
klauss 4:de46f0d9b14d 1874 delete( call );
klauss 4:de46f0d9b14d 1875 }
klauss 2:93bec7313ccc 1876 }
klauss 119:ee6a53069455 1877
klauss 119:ee6a53069455 1878 ts->return_timeslice( cb->call_end ( false ) );
klauss 114:472502b31a12 1879
klauss 119:ee6a53069455 1880 send2callboxes( build_cb_package( cb->get_ext (), cb->get_port (), CB_BYE,
klauss 119:ee6a53069455 1881 ( char * )buffer, cb->get_msg_id(), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 119:ee6a53069455 1882
klauss 119:ee6a53069455 1883 if( debug_invite ) debug_msg("[%d] Received Bye from *", cb->get_ext () );
klauss 0:4d17cd9c8f9d 1884 }
klauss 119:ee6a53069455 1885 } else if( debug_main ) debug_msg("[%d] Missed bye request", ext_to__be_removed );
klauss 114:472502b31a12 1886 }
klauss 91:c2a86b1f8aaa 1887
klauss 81:3656f00ab3db 1888 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 119:ee6a53069455 1889 call_manager( v_call, v_cb, ts );
klauss 91:c2a86b1f8aaa 1890
klauss 114:472502b31a12 1891 /* tratamento de pedidos de ligação */
klauss 81:3656f00ab3db 1892 invite_handler( v_call, v_cb, ts, NULL );
klauss 114:472502b31a12 1893
klauss 119:ee6a53069455 1894 /* rotina de verificação de TS's perdidos */
klauss 91:c2a86b1f8aaa 1895 if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() != __MAX_TIMESLICES__ ) ) {
klauss 91:c2a86b1f8aaa 1896 bool ts_reset = true;
klauss 91:c2a86b1f8aaa 1897 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 117:e9facba9db27 1898 uint16_t cb_status = ((Call_Box *)v_cb->get_element( i ))->get_status();
klauss 117:e9facba9db27 1899 uint16_t cb_sip_status = ((Call_Box *)v_cb->get_element( i ))->get_sip_status();
klauss 117:e9facba9db27 1900
klauss 117:e9facba9db27 1901 if ((cb_status != cb_idle) and (cb_sip_status != sip_idle)) {
klauss 78:1353744f01e1 1902 ts_reset = false;
klauss 78:1353744f01e1 1903 break;
klauss 78:1353744f01e1 1904 }
klauss 117:e9facba9db27 1905
klauss 91:c2a86b1f8aaa 1906 }
klauss 117:e9facba9db27 1907 if( ts_reset && !bl_start_flag )
klauss 117:e9facba9db27 1908 {
klauss 114:472502b31a12 1909 if( debug_invite ) debug_msg("Resetando TS");
klauss 114:472502b31a12 1910 ts->reset();
klauss 78:1353744f01e1 1911 }
klauss 0:4d17cd9c8f9d 1912 }
klauss 112:6ae726539ab9 1913
klauss 112:6ae726539ab9 1914 /* rotina "zeradora" de portas RTP */
klauss 112:6ae726539ab9 1915 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 1916 {
klauss 112:6ae726539ab9 1917 Call_Box * cb = (Call_Box *) v_cb->get_element (i);
klauss 112:6ae726539ab9 1918 if ( cb != NULL )
klauss 112:6ae726539ab9 1919 {
klauss 112:6ae726539ab9 1920 if ( ( cb->get_status () == cb_idle ) && ( cb->get_sip_status () == sip_idle ) && ( cb -> is_rtp_timer_timeout () ) )
klauss 112:6ae726539ab9 1921 {
klauss 119:ee6a53069455 1922 if ( debug_reset_rtp ) debug_msg( "[%d] rtp reset", cb -> get_ext () );
klauss 112:6ae726539ab9 1923 set_status ( cb -> status, cb_idle );
klauss 112:6ae726539ab9 1924 set_status ( cb->sip->status, sip_idle );
klauss 112:6ae726539ab9 1925 cb -> reset_rtp_timer ();
klauss 112:6ae726539ab9 1926 cb -> set_rtp_port ( 0 );
klauss 112:6ae726539ab9 1927 }
klauss 112:6ae726539ab9 1928 }
klauss 112:6ae726539ab9 1929 }
klauss 114:472502b31a12 1930
klauss 81:3656f00ab3db 1931 /* rotina que esvazia possiveis pacotes que não foram transmitidos para evitar conflito */
klauss 72:895ca792c647 1932 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 1933
klauss 119:ee6a53069455 1934 type = DO_NOTHING;
klauss 114:472502b31a12 1935
klauss 81:3656f00ab3db 1936 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 114:472502b31a12 1937
klauss 91:c2a86b1f8aaa 1938 if( wdt_timer.read() >= 1 ) {
klauss 91:c2a86b1f8aaa 1939 //FIXME remove myself
klauss 114:472502b31a12 1940 //registry_test = true;
klauss 114:472502b31a12 1941 //invite_retry_time = true;
klauss 114:472502b31a12 1942
klauss 83:b8a1d8fdeaeb 1943 uptime++;
klauss 119:ee6a53069455 1944
klauss 119:ee6a53069455 1945 current_time++;
klauss 91:c2a86b1f8aaa 1946
klauss 81:3656f00ab3db 1947 wdt_timer.reset();
klauss 91:c2a86b1f8aaa 1948
klauss 81:3656f00ab3db 1949 if( wdt_show ) debug_wdt = true;
klauss 91:c2a86b1f8aaa 1950
klauss 81:3656f00ab3db 1951 if( external_wdt ) external_wdt--;
klauss 81:3656f00ab3db 1952 if( pkg_wdt ) pkg_wdt--;
klauss 81:3656f00ab3db 1953 if( eth_wdt ) eth_wdt--;
klauss 91:c2a86b1f8aaa 1954
klauss 91:c2a86b1f8aaa 1955 if( eth_wdt && external_wdt && pkg_wdt ){
klauss 81:3656f00ab3db 1956 wdt.kick();
klauss 81:3656f00ab3db 1957 }
klauss 114:472502b31a12 1958 }
klauss 114:472502b31a12 1959
klauss 91:c2a86b1f8aaa 1960 if( debug_wdt ) {
klauss 87:679ee0d594a9 1961 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 1962 lpc_low_level_input_counter = 0;
klauss 91:c2a86b1f8aaa 1963
klauss 81:3656f00ab3db 1964 debug_wdt = false;
klauss 91:c2a86b1f8aaa 1965 if( eth_status == 0 ) {
klauss 91:c2a86b1f8aaa 1966 send_msg( "Wdt last reset: %s - status_eth :: Connected - Extern Wdt idle for :: %3d sec ( %3d ) - Rx from CBx idle for :: %3d sec ( %3d )",
klauss 91:c2a86b1f8aaa 1967 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1968 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1969 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1970 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1971 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1972 );
klauss 91:c2a86b1f8aaa 1973 } else {
klauss 91:c2a86b1f8aaa 1974 send_msg( "Wdt last reset: %s - status_eth :: Disconnected :: since %3d sec - Extern Wdt idle for :: %3d sec ( %3d ) - Rx from CBx idle for :: %3d sec ( %3d )",
klauss 91:c2a86b1f8aaa 1975 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1976 ETH_CONNECT_TIMEOUT - eth_wdt,
klauss 91:c2a86b1f8aaa 1977 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1978 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1979 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1980 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1981 );
klauss 81:3656f00ab3db 1982 }
klauss 114:472502b31a12 1983 }
klauss 114:472502b31a12 1984 }
klauss 0:4d17cd9c8f9d 1985 }