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 16 12:57:13 2015 +0000
Revision:
113:db67ae00550e
Parent:
112:6ae726539ab9
Child:
114:472502b31a12
valide esse fw

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 113:db67ae00550e 1 #include "main_includes_configs.h"
klauss 113:db67ae00550e 2
klauss 113:db67ae00550e 3 // Contador low-level de pacotes recebifos na interface eth da embarcada, extern de lpc17_emac.c
klauss 87:679ee0d594a9 4 volatile u16_t lpc_low_level_input_counter = 0;
klauss 85:b6f2dc1d0f4f 5
klauss 91:c2a86b1f8aaa 6 int main()
klauss 113:db67ae00550e 7 {
klauss 113:db67ae00550e 8 // configura e inicia o wdt
klauss 81:3656f00ab3db 9 init_wdt();
klauss 91:c2a86b1f8aaa 10
klauss 113:db67ae00550e 11 // configs de sistema, irqs, I/O bounds
klauss 81:3656f00ab3db 12 config_lpc();
klauss 91:c2a86b1f8aaa 13
klauss 113:db67ae00550e 14 // inicializa a comunicacao com a laser
klauss 0:4d17cd9c8f9d 15 start_cpld();
klauss 91:c2a86b1f8aaa 16
klauss 113:db67ae00550e 17 // habilita a impressao de caracteres na interface UART3
klauss 100:09a23fcd3bdf 18 debug_uart3 = true;
klauss 113:db67ae00550e 19
klauss 113:db67ae00550e 20 // rotina de verificacao do uso do sistema de memoria
klauss 91:c2a86b1f8aaa 21 if( sdram_init() == 1 ) {
klauss 113:db67ae00550e 22 pc.printf("\r\n******* Failed to initialize SDRAM *******\r\n");
klauss 87:679ee0d594a9 23 return 1;
klauss 89:0fe315117b00 24 } else {
klauss 113:db67ae00550e 25 pc.printf("\r\n******* Success to initialize SDRAM *******\r\n");
klauss 87:679ee0d594a9 26 }
klauss 91:c2a86b1f8aaa 27
klauss 113:db67ae00550e 28 // inicializa o sistema de arquivo para uso
klauss 43:455522f98de5 29 init_fsystem();
klauss 91:c2a86b1f8aaa 30
klauss 113:db67ae00550e 31 // exibe endereco MAC da lpc
klauss 89:0fe315117b00 32 {
klauss 89:0fe315117b00 33 char s[ 32 ];
klauss 89:0fe315117b00 34 mbed_mac_address( s );
klauss 113:db67ae00550e 35 pc.printf( "\r\n******* ::Mac::%02x:%02x:%02x:%02x:%02x:%02x:: *******\r\n", s[0],s[1],s[2],s[3],s[4],s[5] );
klauss 89:0fe315117b00 36 }
klauss 91:c2a86b1f8aaa 37
klauss 113:db67ae00550e 38 // rotina de inicializacao da interface ETH
klauss 78:1353744f01e1 39 short int eth_status = __init_eth__();
klauss 91:c2a86b1f8aaa 40 if( eth_status ) {
klauss 113:db67ae00550e 41 pc.printf("\r\n******* Cannot connect to eth *******\r\n");
klauss 91:c2a86b1f8aaa 42 } else {
klauss 113:db67ae00550e 43 pc.printf("\r\n******* Connection eth - ok *******\r\n");
klauss 78:1353744f01e1 44 init_prompt_eth();
klauss 111:c0833f2455ed 45 init_external_wdt();
klauss 111:c0833f2455ed 46 init_bl();
klauss 8:e3bfe62a477e 47 }
klauss 91:c2a86b1f8aaa 48
klauss 113:db67ae00550e 49 // sync_timer : usado para sincronizar eventos a cada x unidades de tempo, usualmente em debugs
klauss 113:db67ae00550e 50 // led_sync_timer : usado para controlar a taxa de toggle do led de debug
klauss 78:1353744f01e1 51 Timer sync_timer, led_sync_timer;
klauss 113:db67ae00550e 52
klauss 113:db67ae00550e 53 sync_timer.start();
klauss 113:db67ae00550e 54 led_sync_timer.start();
klauss 91:c2a86b1f8aaa 55
klauss 113:db67ae00550e 56 // representa ramal do call box
klauss 0:4d17cd9c8f9d 57 int ext = 0;
klauss 91:c2a86b1f8aaa 58
klauss 113:db67ae00550e 59 // representa porta do call box
klauss 78:1353744f01e1 60 int port = 0;
klauss 91:c2a86b1f8aaa 61
klauss 113:db67ae00550e 62 // buffer para onde se copia os dados vindos do cb para tratameno interno
klauss 113:db67ae00550e 63 uint8_t buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 64
klauss 113:db67ae00550e 65 // buffer de escrita do pacote de saida que sera enviado pro cb / servidor
klauss 113:db67ae00550e 66 uint8_t write_buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 67
klauss 113:db67ae00550e 68 // ponteiro que aponta para os dados vindo do CPLD
klauss 0:4d17cd9c8f9d 69 uint8_t * buffer_from_cb_ptr = ( uint8_t * )RXBuffer;
klauss 91:c2a86b1f8aaa 70
klauss 113:db67ae00550e 71 // Armazena o ultimo pacote recebido dos CBx
klauss 113:db67ae00550e 72 uint8_t cb_rx_buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 73
klauss 113:db67ae00550e 74 // referencia para os dados contidos no pacote, sem o header
klauss 0:4d17cd9c8f9d 75 uint8_t * data = NULL;
klauss 91:c2a86b1f8aaa 76
klauss 113:db67ae00550e 77 // gerencia o tipo do pacote para providenciar tratamento adequado
klauss 0:4d17cd9c8f9d 78 volatile uint8_t type = __DO_NOTHING__;
klauss 91:c2a86b1f8aaa 79
klauss 113:db67ae00550e 80 // representa a lista dos Call Boxes atualmente recfonhecidos pela cabeceira
klauss 0:4d17cd9c8f9d 81 Vector * v_cb = new Vector();
klauss 91:c2a86b1f8aaa 82
klauss 113:db67ae00550e 83 // representa a lista de ligacoes ativas na cabeceira
klauss 0:4d17cd9c8f9d 84 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 85
klauss 113:db67ae00550e 86 // gerencia a distribuicao de timeslice para os call boxes
klauss 0:4d17cd9c8f9d 87 Timeslice * ts = new Timeslice();
klauss 91:c2a86b1f8aaa 88 if( ts == NULL ) {
klauss 89:0fe315117b00 89 memory_is_over = true;
klauss 89:0fe315117b00 90 if( debug_memory ) debug_msg("TS allocation fail");
klauss 89:0fe315117b00 91 }
klauss 91:c2a86b1f8aaa 92
klauss 113:db67ae00550e 93 // aloca o vetor de call boxes
klauss 91:c2a86b1f8aaa 94 if( v_cb == NULL ) {
klauss 91:c2a86b1f8aaa 95 while( v_cb == NULL ) {
klauss 0:4d17cd9c8f9d 96 Vector * v_cb = new Vector();
klauss 91:c2a86b1f8aaa 97 if( sync_timer.read() > 5 ) {
klauss 48:195c97f12e8e 98 send_msg("Erro ao alocar o vetor de CBx");
klauss 78:1353744f01e1 99 sync_timer.reset();
klauss 0:4d17cd9c8f9d 100 }
klauss 0:4d17cd9c8f9d 101 }
klauss 113:db67ae00550e 102 }
klauss 113:db67ae00550e 103
klauss 113:db67ae00550e 104 // aloca o vetor de calls
klauss 113:db67ae00550e 105 if( v_call == NULL ) {
klauss 91:c2a86b1f8aaa 106 while( v_call == NULL ) {
klauss 0:4d17cd9c8f9d 107 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 108 if( sync_timer.read() > 5 ) {
klauss 48:195c97f12e8e 109 send_msg("Erro ao alocar o vetor de Calls");
klauss 78:1353744f01e1 110 sync_timer.reset();
klauss 0:4d17cd9c8f9d 111 }
klauss 0:4d17cd9c8f9d 112 }
klauss 0:4d17cd9c8f9d 113 }
klauss 91:c2a86b1f8aaa 114
klauss 91:c2a86b1f8aaa 115 if( v_cb == NULL ) {
klauss 89:0fe315117b00 116 memory_is_over = true;
klauss 89:0fe315117b00 117 if( debug_memory ) debug_msg("Call_Box vector allocation fail");
klauss 89:0fe315117b00 118 }
klauss 91:c2a86b1f8aaa 119
klauss 91:c2a86b1f8aaa 120 if( v_call == NULL ) {
klauss 89:0fe315117b00 121 memory_is_over = true;
klauss 89:0fe315117b00 122 if( debug_memory ) debug_msg("Call vector allocation fail");
klauss 89:0fe315117b00 123 }
klauss 91:c2a86b1f8aaa 124
klauss 113:db67ae00550e 125 // inicializa buffers de armazenamento temporario de I/O com o CBx
klauss 113:db67ae00550e 126 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 63:0d95da692bb4 127 cb_rx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 128 cb_tx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 129 }
klauss 91:c2a86b1f8aaa 130
klauss 113:db67ae00550e 131 // apagar os leds do lpc
klauss 0:4d17cd9c8f9d 132 reset_leds();
klauss 91:c2a86b1f8aaa 133
klauss 113:db67ae00550e 134 //FIXME remover caso compravado desuso
klauss 33:735fd60e96d8 135 udp_timer.start();
klauss 99:e80850c51106 136
klauss 113:db67ae00550e 137 // inicializa o sistema para envio de pacotes do tipo __FW?__ e __TELEMETRY__ para servidor ( ip, porta ) previamente configurado.
klauss 99:e80850c51106 138 init_fw_handler();
klauss 99:e80850c51106 139
klauss 99:e80850c51106 140 led2 = 0;
klauss 113:db67ae00550e 141
klauss 113:db67ae00550e 142 // le do sistema de arquivos valores previamente configurados de primeiro e ultimo ramal de um determinado ramo.
klauss 81:3656f00ab3db 143 init_ranges();
klauss 113:db67ae00550e 144
klauss 113:db67ae00550e 145 // inicializa o timer de refresh dos cbx
klauss 80:61d61c9eb75c 146 init_refresh();
klauss 91:c2a86b1f8aaa 147
klauss 113:db67ae00550e 148 // inicializa o time de envelhecimento do CBx
klauss 78:1353744f01e1 149 init_aging();
klauss 91:c2a86b1f8aaa 150
klauss 113:db67ae00550e 151 // inicislizs o yimrt para sincronizar as rotinas de wake_all_up e refresh
klauss 89:0fe315117b00 152 init_sync_refresh();
klauss 91:c2a86b1f8aaa 153
klauss 113:db67ae00550e 154 // usada para delay na ativacao de algumas funcoes, wake_all_up e tentativa de eth reconnect
klauss 62:07e5bdc9f8f7 155 static uint8_t count = 0;
klauss 91:c2a86b1f8aaa 156
klauss 113:db67ae00550e 157 // contador usado para indicar quantos cbx foram registrados na logica
klauss 78:1353744f01e1 158 uint8_t max_registered_cbx = 0;
klauss 91:c2a86b1f8aaa 159
klauss 113:db67ae00550e 160 // inicia dizendo que a rotina nao deve rodar agora ( 35 sec. nas versoes originais )
klauss 81:3656f00ab3db 161 bool wake_all = false;
klauss 91:c2a86b1f8aaa 162
klauss 113:db67ae00550e 163 // inico das variaveis controladoras do extern wdt
klauss 113:db67ae00550e 164
klauss 113:db67ae00550e 165 // atribui valor maximo ao countdown que verifica comunicao com os CBx
klauss 81:3656f00ab3db 166 uint16_t pkg_wdt = RX_CB_IDLE;
klauss 113:db67ae00550e 167
klauss 113:db67ae00550e 168 // atribi falor maximo ao countdown que verifica conexao eth
klauss 81:3656f00ab3db 169 uint16_t eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 113:db67ae00550e 170
klauss 109:a5b8264ffbbc 171 led1 = 0;
klauss 105:a930035b6556 172
klauss 113:db67ae00550e 173 send_msg("\r\nReady");
klauss 113:db67ae00550e 174
klauss 113:db67ae00550e 175 // inicializa o timer de retry dos pacotes de invite, necessario para o comportamento "metralhadora" da header.
klauss 99:e80850c51106 176 Timer invite_retry_timer;
klauss 99:e80850c51106 177 invite_retry_timer.start();
klauss 105:a930035b6556 178
klauss 113:db67ae00550e 179 // desabilita a impressao de caracteres na interface UART3
klauss 113:db67ae00550e 180 //debug_uart3 = false;
klauss 113:db67ae00550e 181
klauss 113:db67ae00550e 182 reset_leds();
klauss 91:c2a86b1f8aaa 183
klauss 78:1353744f01e1 184 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 91:c2a86b1f8aaa 185 while( true ) {
klauss 113:db67ae00550e 186 // inicializa o loop afirmando que nao existe comando externo para ser processado pelo prompt.
klauss 113:db67ae00550e 187 udp_query = false;
klauss 113:db67ae00550e 188 from_eth = false;
klauss 113:db67ae00550e 189
klauss 113:db67ae00550e 190 // chama rotina de processamento de entrada serial para o prompp
klauss 113:db67ae00550e 191 prompt_process( NULL, 0 );
klauss 99:e80850c51106 192
klauss 113:db67ae00550e 193 //begin verificacao e tratamento dos pacotes recebidos via UDP-ETH
klauss 113:db67ae00550e 194 {
klauss 113:db67ae00550e 195 fd_set fdSet;
klauss 113:db67ae00550e 196 FD_ZERO(&fdSet);
klauss 113:db67ae00550e 197
klauss 113:db67ae00550e 198 // coloca o socket SIP de todos os CBx
klauss 113:db67ae00550e 199 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 113:db67ae00550e 200 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 113:db67ae00550e 201 FD_SET( cb->get_sip_socket_fd(), &fdSet );
klauss 113:db67ae00550e 202 }
klauss 113:db67ae00550e 203
klauss 113:db67ae00550e 204 // adiciona o socket do watchdog
klauss 113:db67ae00550e 205 FD_SET( udp_wdt_client.get_fd(), &fdSet );
klauss 113:db67ae00550e 206
klauss 113:db67ae00550e 207 // adiciona o socket de comandos prompt-UDP-ETH
klauss 113:db67ae00550e 208 FD_SET( udp_client.get_fd(), &fdSet );
klauss 113:db67ae00550e 209
klauss 113:db67ae00550e 210 struct timeval t;
klauss 113:db67ae00550e 211 t.tv_sec = 0;
klauss 113:db67ae00550e 212 t.tv_usec = 0;
klauss 113:db67ae00550e 213 // verifica se existe algo pendente para ser tratado
klauss 113:db67ae00550e 214 int ret = lwip_select( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 113:db67ae00550e 215
klauss 113:db67ae00550e 216 if(ret > 0 ) {
klauss 113:db67ae00550e 217 // existe algo na fila UDP pendente.
klauss 113:db67ae00550e 218 // verigica o socket SIP de cada CBx
klauss 113:db67ae00550e 219 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 113:db67ae00550e 220 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 113:db67ae00550e 221 int fd = cb->get_sip_socket_fd();
klauss 113:db67ae00550e 222 if( FD_ISSET( fd, &fdSet ) ) {
klauss 113:db67ae00550e 223 int rcv = cb->sip_udp_incomming_pkg();
klauss 113:db67ae00550e 224 }
klauss 113:db67ae00550e 225 }
klauss 113:db67ae00550e 226
klauss 113:db67ae00550e 227 // verifica o socket do prompt-UDP-ETH
klauss 113:db67ae00550e 228 if( FD_ISSET( udp_client.get_fd(), &fdSet ) ) {
klauss 113:db67ae00550e 229 char to_prompt_process[ PROMPT_UDP_COMMAND_SIZE ];
klauss 113:db67ae00550e 230 for( register int i = 0; i < PROMPT_UDP_COMMAND_SIZE; i++ ) to_prompt_process[ i ] = 0;
klauss 113:db67ae00550e 231
klauss 113:db67ae00550e 232 int prompt_process_msg_rcv = udp_client.receiveFrom( udp_server, to_prompt_process, ( sizeof( to_prompt_process ) - 1 ) );
klauss 113:db67ae00550e 233
klauss 113:db67ae00550e 234 to_prompt_process[ prompt_process_msg_rcv ] = 0;
klauss 113:db67ae00550e 235 if( prompt_process_msg_rcv == -1 )
klauss 113:db67ae00550e 236 {
klauss 113:db67ae00550e 237 if( debug_reconnect ) send_msg("Reconnect Prompt Process");
klauss 113:db67ae00550e 238 reconnect_udp_prompt_process();
klauss 113:db67ae00550e 239 miss_prompt_udp_rcv_pkg++;
klauss 113:db67ae00550e 240 }
klauss 113:db67ae00550e 241 else if( prompt_process_msg_rcv > 0 )
klauss 113:db67ae00550e 242 {
klauss 113:db67ae00550e 243 udp_query = true;
klauss 113:db67ae00550e 244 prompt_process( to_prompt_process, prompt_process_msg_rcv );
klauss 113:db67ae00550e 245 }
klauss 113:db67ae00550e 246 }
klauss 113:db67ae00550e 247
klauss 113:db67ae00550e 248 // verifica o socket do watchdog
klauss 113:db67ae00550e 249 if( FD_ISSET( udp_wdt_client.get_fd(), &fdSet ) ) {
klauss 113:db67ae00550e 250 char wake_msg[ 768 ];
klauss 113:db67ae00550e 251 Endpoint udp_wdt_server;
klauss 113:db67ae00550e 252
klauss 113:db67ae00550e 253 int wake_msg_rcv = udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) );
klauss 113:db67ae00550e 254
klauss 113:db67ae00550e 255 if( wake_msg_rcv == -1 )
klauss 113:db67ae00550e 256 {
klauss 113:db67ae00550e 257 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 113:db67ae00550e 258 reconnect_extern_wdt_socket();
klauss 113:db67ae00550e 259 miss_wdt_send_pkg++;
klauss 113:db67ae00550e 260 }
klauss 113:db67ae00550e 261 else if( wake_msg_rcv > 0 )
klauss 113:db67ae00550e 262 {
klauss 113:db67ae00550e 263 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 113:db67ae00550e 264 // Just ckeck but not set 'alive?'
klauss 113:db67ae00550e 265 // 'alive*' - force wdt tick right now
klauss 113:db67ae00550e 266 // Ckecking and set 'alive'
klauss 113:db67ae00550e 267 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 113:db67ae00550e 268 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 113:db67ae00550e 269
klauss 113:db67ae00550e 270 snprintf( wake_msg, 48,"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:",
klauss 113:db67ae00550e 271 uptime,
klauss 113:db67ae00550e 272 invite_counter,
klauss 113:db67ae00550e 273 external_wdt,
klauss 113:db67ae00550e 274 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 113:db67ae00550e 275 cb_new_counter,
klauss 113:db67ae00550e 276 v_cb->size(),
klauss 113:db67ae00550e 277 ts->remain_timeslices(),
klauss 113:db67ae00550e 278 sip_socket_send_failure,
klauss 113:db67ae00550e 279 v_call->size(),
klauss 113:db67ae00550e 280 pkg_cksok,
klauss 113:db67ae00550e 281 pkg_ckserr,
klauss 113:db67ae00550e 282 pkg_zero,
klauss 113:db67ae00550e 283 out_of_range,
klauss 113:db67ae00550e 284 missed_pkg,
klauss 113:db67ae00550e 285 delayed_pkg_to_cb,
klauss 113:db67ae00550e 286 cpld_pkg_tx_counter,
klauss 113:db67ae00550e 287 cpld_pkg_rx_counter,
klauss 113:db67ae00550e 288 eth_wdt,
klauss 113:db67ae00550e 289 pkg_wdt,
klauss 113:db67ae00550e 290 miss_fw_send_pkg,
klauss 113:db67ae00550e 291 miss_prompt_udp_send_pkg,
klauss 113:db67ae00550e 292 miss_sip_registry_send_pkg,
klauss 113:db67ae00550e 293 miss_sip_invite_send_pkg,
klauss 113:db67ae00550e 294 miss_sip_bye_send_pkg,
klauss 113:db67ae00550e 295 miss_sip_unregistry_send_pkg,
klauss 113:db67ae00550e 296 miss_sip_ok_send_pkg,
klauss 113:db67ae00550e 297 miss_sip_rcv_bye_send_pkg,
klauss 113:db67ae00550e 298 miss_wdt_send_pkg,
klauss 113:db67ae00550e 299 miss_prompt_udp_send_pkg,
klauss 113:db67ae00550e 300 miss_ftp_udp_send_pkg,
klauss 113:db67ae00550e 301 miss_prompt_udp_rcv_pkg
klauss 113:db67ae00550e 302 );
klauss 113:db67ae00550e 303
klauss 113:db67ae00550e 304 wake_msg[ 768 - 1 ] = 0;
klauss 113:db67ae00550e 305 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 113:db67ae00550e 306 if( send != strlen( wake_msg ) )
klauss 113:db67ae00550e 307 {
klauss 113:db67ae00550e 308 if( debug_reconnect ) debug_msg("Reconnect Extern wdt (%d, %d)", send, strlen( wake_msg ) );
klauss 113:db67ae00550e 309 reconnect_extern_wdt_socket();
klauss 113:db67ae00550e 310 miss_wdt_send_pkg++;
klauss 113:db67ae00550e 311 }
klauss 113:db67ae00550e 312
klauss 113:db67ae00550e 313 if( ( (!question_alive) && ( cb_new_counter <= __MAX_CB_IN_A_BRANCH__ ) && ( cb_new_counter >= 2 ) ) ) {
klauss 113:db67ae00550e 314 external_wdt = EXTERN_WDT_IDLE;
klauss 113:db67ae00550e 315 }
klauss 113:db67ae00550e 316 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 113:db67ae00550e 317 external_wdt = 0;
klauss 113:db67ae00550e 318
klauss 113:db67ae00550e 319 sprintf( wake_msg, "rst:%u:", uptime );
klauss 113:db67ae00550e 320 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 113:db67ae00550e 321 if( send != strlen( wake_msg ) )
klauss 113:db67ae00550e 322 {
klauss 113:db67ae00550e 323 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 113:db67ae00550e 324 reconnect_extern_wdt_socket();
klauss 113:db67ae00550e 325 miss_wdt_send_pkg++;
klauss 113:db67ae00550e 326 }
klauss 113:db67ae00550e 327 }
klauss 113:db67ae00550e 328 }
klauss 113:db67ae00550e 329 }
klauss 113:db67ae00550e 330 }
klauss 113:db67ae00550e 331 }//end verificacao e tratamento dos pacotes recebidos via UDP-ETH
klauss 113:db67ae00550e 332
klauss 113:db67ae00550e 333
klauss 113:db67ae00550e 334 // atualiza o valor do contador max_registered_cbx
klauss 78:1353744f01e1 335 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 91:c2a86b1f8aaa 336
klauss 113:db67ae00550e 337 // executa a cada 5 segundos comandos e verificacoes ( principalmente debugs )
klauss 91:c2a86b1f8aaa 338 if( sync_timer.read() > 5 ) {
klauss 78:1353744f01e1 339 sync_timer.reset();
klauss 113:db67ae00550e 340
klauss 113:db67ae00550e 341 // atualiza valor da variavel de delay
klauss 113:db67ae00550e 342 count++;
klauss 91:c2a86b1f8aaa 343
klauss 113:db67ae00550e 344 // enable na variavel que exibe estatisticas de cks dos pacotes recebidos pela header
klauss 91:c2a86b1f8aaa 345 if( debug_cks == true ) {
klauss 81:3656f00ab3db 346 pcks_s = true;
klauss 78:1353744f01e1 347 }
klauss 91:c2a86b1f8aaa 348
klauss 113:db67ae00550e 349 // enable na variavel que exibe uma lista ( por ordem de pedido de registro ) dos cbx
klauss 91:c2a86b1f8aaa 350 if( debug_alive == true ) {
klauss 81:3656f00ab3db 351 pshowcb = true;
klauss 78:1353744f01e1 352 }
klauss 100:09a23fcd3bdf 353
klauss 113:db67ae00550e 354 // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth
klauss 113:db67ae00550e 355 if( debug_missed )
klauss 105:a930035b6556 356 {
klauss 113:db67ae00550e 357 missed_send_udp_pkg = true;
klauss 105:a930035b6556 358 }
klauss 105:a930035b6556 359
klauss 113:db67ae00550e 360 // verifica status da conexao eth, em caso de falha na inicializacao anterior, tenta conectar periodicamente a cada 75 sec.
klauss 113:db67ae00550e 361 // nas implementacoes inicias
klauss 113:db67ae00550e 362 if( !( count % 15 ) ) {
klauss 91:c2a86b1f8aaa 363 if( eth_status ) {
klauss 78:1353744f01e1 364 eth_status = __init_eth__();
klauss 91:c2a86b1f8aaa 365 if( eth_status ) {
klauss 113:db67ae00550e 366 if( debug_main ) pc.printf("\r\nCannot connect to eth\r\n");
klauss 91:c2a86b1f8aaa 367 } else {
klauss 113:db67ae00550e 368 if( debug_main ) pc.printf("\r\nConnection eth - ok");
klauss 78:1353744f01e1 369 init_prompt_eth();
klauss 113:db67ae00550e 370 init_external_wdt()
klauss 78:1353744f01e1 371 }
klauss 78:1353744f01e1 372 }
klauss 78:1353744f01e1 373 }
klauss 100:09a23fcd3bdf 374
klauss 113:db67ae00550e 375 // inicializa rotina de verificacao de "pares" de CBx apos 35 sec. nas implementacoes iniciais
klauss 91:c2a86b1f8aaa 376 if( ( count > 7 ) && ( wake_all == false ) ) {
klauss 81:3656f00ab3db 377 wake_all = true;
klauss 78:1353744f01e1 378 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 379 }
klauss 113:db67ae00550e 380 }
klauss 91:c2a86b1f8aaa 381
klauss 113:db67ae00550e 382 // zera os contadores de pacotes recebidos na interface CBx->Header
klauss 91:c2a86b1f8aaa 383 if( r_stats ) {
klauss 91:c2a86b1f8aaa 384 boot_counter = 0;
klauss 91:c2a86b1f8aaa 385 registry_counter = 0;
klauss 91:c2a86b1f8aaa 386 invite_counter = 0;
klauss 91:c2a86b1f8aaa 387 audio_counter = 0;
klauss 91:c2a86b1f8aaa 388 telemetry_counter = 0;
klauss 91:c2a86b1f8aaa 389 cb_bye_counter = 0;
klauss 91:c2a86b1f8aaa 390 prompt_counter = 0;
klauss 91:c2a86b1f8aaa 391 flood_counter = 0;
klauss 67:cdedc64d9921 392 bootloader_cbx_counter = 0;
klauss 99:e80850c51106 393 cb_stats_counter = 0;
klauss 113:db67ae00550e 394 fw_counter = 0;
klauss 63:0d95da692bb4 395 r_stats = false;
klauss 63:0d95da692bb4 396 stats = true;
klauss 63:0d95da692bb4 397 }
klauss 91:c2a86b1f8aaa 398
klauss 113:db67ae00550e 399 // exibe o valor dos contadores de pacotes recebidos na interfacao CBx->ETH
klauss 91:c2a86b1f8aaa 400 if( stats ) {
klauss 63:0d95da692bb4 401 char str[ 200 ];
klauss 113:db67ae00550e 402 snprintf( str, 200, "\n\r Received Pkgs ::\n\r Boot :: %u\n\r Registry :: %u\n\r Invite :: %u\n\r Audio :: %u\n\r Telemetry :: %u\n\r CB_stats :: %u\n\r CB_bye :: %u\n\r Prompt :: %u\n\r Flood :: %u\n\r Bootloader_cbx :: %u\n\r Fw :: %u\n\r",
klauss 113:db67ae00550e 403 boot_counter, registry_counter, invite_counter, audio_counter, telemetry_counter, cb_stats_counter, cb_bye_counter, prompt_counter, flood_counter, bootloader_cbx_counter, fw_counter );
klauss 63:0d95da692bb4 404 send_msg( str );
klauss 63:0d95da692bb4 405 stats =false;
klauss 63:0d95da692bb4 406 }
klauss 113:db67ae00550e 407
klauss 113:db67ae00550e 408 // exibe uma lista ( em ordem crescente e por ramais ) dos cbx que ja se registraram ao menos uma vez
klauss 113:db67ae00550e 409 if( list )
klauss 113:db67ae00550e 410 {
klauss 78:1353744f01e1 411 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 412
klauss 78:1353744f01e1 413 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 91:c2a86b1f8aaa 414
klauss 78:1353744f01e1 415 if( min_ext % 2 ) missed_cb++;
klauss 91:c2a86b1f8aaa 416
klauss 78:1353744f01e1 417 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 91:c2a86b1f8aaa 418
klauss 78:1353744f01e1 419 send_msg("Registered %d[ %d ] CBx ( %d - %d ) - Missed %d -- Remain_timeslices :: %d :: v_call->size() :: %d", v_cb->size(), max_registered_cbx, min_ext, max_ext, missed_cb, ts->remain_timeslices(), v_call->size() );
klauss 91:c2a86b1f8aaa 420 if( v_cb->size() == 1 ) {
klauss 78:1353744f01e1 421 send_msg(" %d ", ( ( Call_Box * )v_cb->get_element( 0 ) )->get_ext() );
klauss 91:c2a86b1f8aaa 422 } else if( v_cb->size() > 1 ) {
klauss 62:07e5bdc9f8f7 423 char str[ 1024 ];
klauss 78:1353744f01e1 424 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 62:07e5bdc9f8f7 425 register int i = 0;
klauss 91:c2a86b1f8aaa 426 for( ; i < v_cb->size(); i++ ) {
klauss 78:1353744f01e1 427 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 62:07e5bdc9f8f7 428 }
klauss 91:c2a86b1f8aaa 429
klauss 62:07e5bdc9f8f7 430 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 91:c2a86b1f8aaa 431
klauss 62:07e5bdc9f8f7 432 char aux[ 16 ];
klauss 78:1353744f01e1 433 strcpy( str, "\r\n> " );
klauss 91:c2a86b1f8aaa 434 for( i = 0; i < v_cb->size() - 1; i++ ) {
klauss 62:07e5bdc9f8f7 435 sprintf( aux, "%i, ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 436 strcat( str, aux );
klauss 78:1353744f01e1 437 if( ( i != 0 ) && !( ( i + 1 ) % 16 ) ) strcat( str, "\r\n> " );
klauss 62:07e5bdc9f8f7 438 }
klauss 62:07e5bdc9f8f7 439 sprintf( aux, "%i ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 440 strcat( str, aux );
klauss 62:07e5bdc9f8f7 441 send_msg( "%s", str );
klauss 62:07e5bdc9f8f7 442 }
klauss 91:c2a86b1f8aaa 443 list = false;
klauss 113:db67ae00550e 444 }
klauss 113:db67ae00550e 445
klauss 113:db67ae00550e 446 // validar na proxima iteracao.
klauss 106:a34fcf9f0e02 447 if( long_list )
klauss 106:a34fcf9f0e02 448 {
klauss 106:a34fcf9f0e02 449 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 450
klauss 106:a34fcf9f0e02 451 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 106:a34fcf9f0e02 452
klauss 106:a34fcf9f0e02 453 if( min_ext % 2 ) missed_cb++;
klauss 106:a34fcf9f0e02 454
klauss 106:a34fcf9f0e02 455 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 106:a34fcf9f0e02 456
klauss 106:a34fcf9f0e02 457 {
klauss 106:a34fcf9f0e02 458 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 106:a34fcf9f0e02 459
klauss 106:a34fcf9f0e02 460 if( v_cb->size() >= 1 ) {
klauss 106:a34fcf9f0e02 461 for( register int i = 0; i < v_cb->size(); i++ )
klauss 106:a34fcf9f0e02 462 {
klauss 106:a34fcf9f0e02 463 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 106:a34fcf9f0e02 464 }
klauss 106:a34fcf9f0e02 465 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 106:a34fcf9f0e02 466 }
klauss 106:a34fcf9f0e02 467
klauss 106:a34fcf9f0e02 468 send_msg("Registered %d[ %d ] CBx ( %d - %d ) - Missed %d -- Remain_timeslices :: %d :: v_call->size() :: %d", v_cb->size(), max_registered_cbx, min_ext, max_ext, missed_cb, ts->remain_timeslices(), v_call->size() );
klauss 106:a34fcf9f0e02 469
klauss 106:a34fcf9f0e02 470 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 106:a34fcf9f0e02 471
klauss 106:a34fcf9f0e02 472 Call_Box * cb = __find_CB__( v_cb, ext_list[ i ] );
klauss 106:a34fcf9f0e02 473
klauss 106:a34fcf9f0e02 474 if( cb != NULL )
klauss 106:a34fcf9f0e02 475 {
klauss 106:a34fcf9f0e02 476 char cb_status[ 32 ];
klauss 106:a34fcf9f0e02 477 char cb_sip_status[ 32 ];
klauss 106:a34fcf9f0e02 478 switch( cb->status ) {
klauss 106:a34fcf9f0e02 479 case cb_idle : {
klauss 106:a34fcf9f0e02 480 strcpy( cb_status, "cb_idle" );
klauss 106:a34fcf9f0e02 481 break;
klauss 106:a34fcf9f0e02 482 }
klauss 106:a34fcf9f0e02 483 case cb_ringing : {
klauss 106:a34fcf9f0e02 484 strcpy( cb_status, "cb_ringing" );
klauss 106:a34fcf9f0e02 485 break;
klauss 106:a34fcf9f0e02 486 }
klauss 106:a34fcf9f0e02 487 case cb_trying : {
klauss 106:a34fcf9f0e02 488 strcpy( cb_status,"cb_trying" );
klauss 106:a34fcf9f0e02 489 break;
klauss 106:a34fcf9f0e02 490 }
klauss 106:a34fcf9f0e02 491 case cb_on_call : {
klauss 106:a34fcf9f0e02 492 strcpy( cb_status, "cb_on_call" );
klauss 106:a34fcf9f0e02 493 break;
klauss 106:a34fcf9f0e02 494 }
klauss 106:a34fcf9f0e02 495 case cb_busy : {
klauss 106:a34fcf9f0e02 496 strcpy( cb_status, "cb_busy" );
klauss 106:a34fcf9f0e02 497 break;
klauss 106:a34fcf9f0e02 498 }
klauss 106:a34fcf9f0e02 499 case cb_denied : {
klauss 106:a34fcf9f0e02 500 strcpy( cb_status, "cb_denied" );
klauss 106:a34fcf9f0e02 501 break;
klauss 106:a34fcf9f0e02 502 }
klauss 106:a34fcf9f0e02 503 }
klauss 106:a34fcf9f0e02 504 switch( cb->sip->status ) {
klauss 106:a34fcf9f0e02 505 case sip_idle : {
klauss 106:a34fcf9f0e02 506 strcpy( cb_sip_status, "sip_idle" );
klauss 106:a34fcf9f0e02 507 break;
klauss 106:a34fcf9f0e02 508 }
klauss 106:a34fcf9f0e02 509 case sip_waiting_trying : {
klauss 106:a34fcf9f0e02 510 strcpy( cb_sip_status, "sip_waiting_trying" );
klauss 106:a34fcf9f0e02 511 break;
klauss 106:a34fcf9f0e02 512 }
klauss 106:a34fcf9f0e02 513 case sip_trying : {
klauss 106:a34fcf9f0e02 514 strcpy( cb_sip_status, "sip_trying" );
klauss 106:a34fcf9f0e02 515 break;
klauss 106:a34fcf9f0e02 516 }
klauss 106:a34fcf9f0e02 517 case sip_ringing : {
klauss 106:a34fcf9f0e02 518 strcpy( cb_sip_status, "sip_ringing" );
klauss 106:a34fcf9f0e02 519 break;
klauss 106:a34fcf9f0e02 520 }
klauss 106:a34fcf9f0e02 521 case sip_busy : {
klauss 106:a34fcf9f0e02 522 strcpy( cb_sip_status, "sip_busy" );
klauss 106:a34fcf9f0e02 523 break;
klauss 106:a34fcf9f0e02 524 }
klauss 106:a34fcf9f0e02 525 case sip_ok : {
klauss 106:a34fcf9f0e02 526 strcpy( cb_sip_status, "sip_ok" );
klauss 106:a34fcf9f0e02 527 break;
klauss 106:a34fcf9f0e02 528 }
klauss 106:a34fcf9f0e02 529 case sip_on_call : {
klauss 106:a34fcf9f0e02 530 strcpy( cb_sip_status, "sip_on_call" );
klauss 106:a34fcf9f0e02 531 break;
klauss 106:a34fcf9f0e02 532 }
klauss 106:a34fcf9f0e02 533 case sip_denied : {
klauss 106:a34fcf9f0e02 534 strcpy( cb_sip_status, "sip_denied" );
klauss 106:a34fcf9f0e02 535 break;
klauss 106:a34fcf9f0e02 536 }
klauss 106:a34fcf9f0e02 537 }
klauss 106:a34fcf9f0e02 538 char cbx_to_string[ 254 ];
klauss 106:a34fcf9f0e02 539 char aux[ 16 ];
klauss 106:a34fcf9f0e02 540 strcpy( cbx_to_string, "Ext :: " );
klauss 106:a34fcf9f0e02 541 itoa( cb->get_ext(), aux , 10 );
klauss 106:a34fcf9f0e02 542 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 543 strcat( cbx_to_string, " :: Port :: " );
klauss 106:a34fcf9f0e02 544 itoa( cb->get_port(), aux , 10 );
klauss 106:a34fcf9f0e02 545 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 546 strcat( cbx_to_string, " :: Status -- " );
klauss 106:a34fcf9f0e02 547 strcat( cbx_to_string, cb_status );
klauss 106:a34fcf9f0e02 548 strcat( cbx_to_string, " - " );
klauss 106:a34fcf9f0e02 549 strcat( cbx_to_string, cb_sip_status );
klauss 106:a34fcf9f0e02 550 if( cb->get_timeslice() != 0 ) {
klauss 106:a34fcf9f0e02 551 strcat( cbx_to_string, " -- on TimeSlice :: " );
klauss 106:a34fcf9f0e02 552 itoa( cb->get_timeslice(), aux , 10 );
klauss 106:a34fcf9f0e02 553 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 554 }
klauss 106:a34fcf9f0e02 555 send_msg( cbx_to_string );
klauss 106:a34fcf9f0e02 556 }
klauss 106:a34fcf9f0e02 557 }
klauss 106:a34fcf9f0e02 558
klauss 106:a34fcf9f0e02 559 }
klauss 91:c2a86b1f8aaa 560 long_list = false;
klauss 52:12930cef17c4 561 }
klauss 113:db67ae00550e 562
klauss 113:db67ae00550e 563 // exibe uma lista de cbx por ordem de registro contendo status do cbx e do sip vinculado nesse cbx
klauss 113:db67ae00550e 564 if( pshowcb == true )
klauss 113:db67ae00550e 565 {
klauss 78:1353744f01e1 566 send_msg("Registered %d ( of %d ) CBx ( %d - %d ) -- Remain_timeslices :: %d :: v_call->size() :: %d", v_cb->size(), max_registered_cbx, min_ext, max_ext, ts->remain_timeslices(), v_call->size() );
klauss 91:c2a86b1f8aaa 567 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 30:8dfb6d8de53d 568 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 78:1353744f01e1 569 char cb_status[ 32 ];
klauss 78:1353744f01e1 570 char cb_sip_status[ 32 ];
klauss 91:c2a86b1f8aaa 571 switch( cb->status ) {
klauss 91:c2a86b1f8aaa 572 case cb_idle : {
klauss 91:c2a86b1f8aaa 573 strcpy( cb_status, "cb_idle" );
klauss 91:c2a86b1f8aaa 574 break;
klauss 91:c2a86b1f8aaa 575 }
klauss 91:c2a86b1f8aaa 576 case cb_ringing : {
klauss 91:c2a86b1f8aaa 577 strcpy( cb_status, "cb_ringing" );
klauss 91:c2a86b1f8aaa 578 break;
klauss 91:c2a86b1f8aaa 579 }
klauss 91:c2a86b1f8aaa 580 case cb_trying : {
klauss 91:c2a86b1f8aaa 581 strcpy( cb_status,"cb_trying" );
klauss 91:c2a86b1f8aaa 582 break;
klauss 91:c2a86b1f8aaa 583 }
klauss 91:c2a86b1f8aaa 584 case cb_on_call : {
klauss 91:c2a86b1f8aaa 585 strcpy( cb_status, "cb_on_call" );
klauss 91:c2a86b1f8aaa 586 break;
klauss 91:c2a86b1f8aaa 587 }
klauss 91:c2a86b1f8aaa 588 case cb_busy : {
klauss 91:c2a86b1f8aaa 589 strcpy( cb_status, "cb_busy" );
klauss 91:c2a86b1f8aaa 590 break;
klauss 91:c2a86b1f8aaa 591 }
klauss 91:c2a86b1f8aaa 592 case cb_denied : {
klauss 91:c2a86b1f8aaa 593 strcpy( cb_status, "cb_denied" );
klauss 91:c2a86b1f8aaa 594 break;
klauss 91:c2a86b1f8aaa 595 }
klauss 78:1353744f01e1 596 }
klauss 91:c2a86b1f8aaa 597 switch( cb->sip->status ) {
klauss 91:c2a86b1f8aaa 598 case sip_idle : {
klauss 91:c2a86b1f8aaa 599 strcpy( cb_sip_status, "sip_idle" );
klauss 91:c2a86b1f8aaa 600 break;
klauss 91:c2a86b1f8aaa 601 }
klauss 91:c2a86b1f8aaa 602 case sip_waiting_trying : {
klauss 91:c2a86b1f8aaa 603 strcpy( cb_sip_status, "sip_waiting_trying" );
klauss 91:c2a86b1f8aaa 604 break;
klauss 91:c2a86b1f8aaa 605 }
klauss 91:c2a86b1f8aaa 606 case sip_trying : {
klauss 91:c2a86b1f8aaa 607 strcpy( cb_sip_status, "sip_trying" );
klauss 91:c2a86b1f8aaa 608 break;
klauss 91:c2a86b1f8aaa 609 }
klauss 91:c2a86b1f8aaa 610 case sip_ringing : {
klauss 91:c2a86b1f8aaa 611 strcpy( cb_sip_status, "sip_ringing" );
klauss 91:c2a86b1f8aaa 612 break;
klauss 91:c2a86b1f8aaa 613 }
klauss 91:c2a86b1f8aaa 614 case sip_busy : {
klauss 91:c2a86b1f8aaa 615 strcpy( cb_sip_status, "sip_busy" );
klauss 91:c2a86b1f8aaa 616 break;
klauss 91:c2a86b1f8aaa 617 }
klauss 91:c2a86b1f8aaa 618 case sip_ok : {
klauss 91:c2a86b1f8aaa 619 strcpy( cb_sip_status, "sip_ok" );
klauss 91:c2a86b1f8aaa 620 break;
klauss 91:c2a86b1f8aaa 621 }
klauss 91:c2a86b1f8aaa 622 case sip_on_call : {
klauss 91:c2a86b1f8aaa 623 strcpy( cb_sip_status, "sip_on_call" );
klauss 91:c2a86b1f8aaa 624 break;
klauss 91:c2a86b1f8aaa 625 }
klauss 91:c2a86b1f8aaa 626 case sip_denied : {
klauss 91:c2a86b1f8aaa 627 strcpy( cb_sip_status, "sip_denied" );
klauss 91:c2a86b1f8aaa 628 break;
klauss 91:c2a86b1f8aaa 629 }
klauss 78:1353744f01e1 630 }
klauss 78:1353744f01e1 631 char cbx_to_string[ 254 ];
klauss 78:1353744f01e1 632 char aux[ 16 ];
klauss 78:1353744f01e1 633 strcpy( cbx_to_string, "Ext :: " );
klauss 78:1353744f01e1 634 itoa( cb->get_ext(), aux , 10 );
klauss 98:43b45f26b430 635 strcat( cbx_to_string, aux );
klauss 97:8985817e8847 636 strcat( cbx_to_string, " :: Port :: " );
klauss 97:8985817e8847 637 itoa( cb->get_port(), aux , 10 );
klauss 78:1353744f01e1 638 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 639 strcat( cbx_to_string, " :: Status -- " );
klauss 78:1353744f01e1 640 strcat( cbx_to_string, cb_status );
klauss 78:1353744f01e1 641 strcat( cbx_to_string, " - " );
klauss 78:1353744f01e1 642 strcat( cbx_to_string, cb_sip_status );
klauss 91:c2a86b1f8aaa 643 if( cb->get_timeslice() != 0 ) {
klauss 78:1353744f01e1 644 strcat( cbx_to_string, " -- on TimeSlice :: " );
klauss 78:1353744f01e1 645 itoa( cb->get_timeslice(), aux , 10 );
klauss 78:1353744f01e1 646 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 647 }
klauss 78:1353744f01e1 648 send_msg( cbx_to_string );
klauss 48:195c97f12e8e 649 }
klauss 78:1353744f01e1 650 pshowcb = false;
klauss 48:195c97f12e8e 651 }
klauss 97:8985817e8847 652
klauss 113:db67ae00550e 653 // exibe Ramal e Porta do objeto SIP associado a cada cbx
klauss 113:db67ae00550e 654 // assim como exibe um timer crescente em segundos, desde o ultimo pacote recebido deste cbx respondendo registro.
klauss 97:8985817e8847 655 if( show_sip == true ){
klauss 97:8985817e8847 656 show_sip = false;
klauss 99:e80850c51106 657 send_msg(":: Sip :: %u", v_cb->size() );
klauss 97:8985817e8847 658 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 97:8985817e8847 659 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 113:db67ae00550e 660 if( cb != NULL ) send_msg("ext :: %d -- port :: %d -- timer %d", cb->get_sip_ext(), cb->get_sip_port(), cb->get_timer() );
klauss 97:8985817e8847 661 }
klauss 97:8985817e8847 662 }
klauss 113:db67ae00550e 663
klauss 113:db67ae00550e 664 if( dshow_rtp == true ){
klauss 113:db67ae00550e 665 dshow_rtp = false;
klauss 113:db67ae00550e 666 send_msg(":: RTP :: %u", v_cb->size() );
klauss 113:db67ae00550e 667
klauss 113:db67ae00550e 668 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 113:db67ae00550e 669
klauss 113:db67ae00550e 670 if( v_cb->size() >= 1 ) {
klauss 113:db67ae00550e 671 for( register int i = 0; i < v_cb->size(); i++ )
klauss 113:db67ae00550e 672 {
klauss 113:db67ae00550e 673 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 113:db67ae00550e 674 }
klauss 113:db67ae00550e 675 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 113:db67ae00550e 676 }
klauss 113:db67ae00550e 677
klauss 113:db67ae00550e 678 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 113:db67ae00550e 679 {
klauss 113:db67ae00550e 680 Call_Box * cb = __find_CB__( v_cb, ext_list[ i ] );
klauss 113:db67ae00550e 681 if( cb != NULL )
klauss 113:db67ae00550e 682 {
klauss 113:db67ae00550e 683 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d ) - Timer ( %d )",
klauss 113:db67ae00550e 684 cb -> get_ext (),
klauss 113:db67ae00550e 685 cb -> get_port (),
klauss 113:db67ae00550e 686 cb -> get_sip_ext (),
klauss 113:db67ae00550e 687 cb -> get_sip_port (),
klauss 113:db67ae00550e 688 cb -> get_rtp_port (),
klauss 113:db67ae00550e 689 cb -> get_rtp_timer ()
klauss 113:db67ae00550e 690 );
klauss 113:db67ae00550e 691 }
klauss 113:db67ae00550e 692 }
klauss 113:db67ae00550e 693 }
klauss 113:db67ae00550e 694
klauss 113:db67ae00550e 695 if( dcallshow_rtp == true ){
klauss 113:db67ae00550e 696 dcallshow_rtp = false;
klauss 113:db67ae00550e 697 send_msg(":: CAll RTP :: %u", v_call->size() );
klauss 113:db67ae00550e 698 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 113:db67ae00550e 699 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 113:db67ae00550e 700 if( call != NULL )
klauss 113:db67ae00550e 701 {
klauss 113:db67ae00550e 702 send_msg("CBX ( %d, %d ) - Server ( %d, %d )",
klauss 113:db67ae00550e 703 call->get_cb_ext(),
klauss 113:db67ae00550e 704 call->get_cb_port(),
klauss 113:db67ae00550e 705 call->get_rtp_server_ext(),
klauss 113:db67ae00550e 706 call->get_rtp_server_port()
klauss 113:db67ae00550e 707 );
klauss 113:db67ae00550e 708 }
klauss 113:db67ae00550e 709 }
klauss 113:db67ae00550e 710 }
klauss 91:c2a86b1f8aaa 711
klauss 113:db67ae00550e 712 // aciona rotina de envio de pacote de flood
klauss 81:3656f00ab3db 713 if( pflood == true ) flood();
klauss 113:db67ae00550e 714
klauss 113:db67ae00550e 715
klauss 91:c2a86b1f8aaa 716
klauss 113:db67ae00550e 717 // exibe status de conexao ETH
klauss 91:c2a86b1f8aaa 718 if( debug_eth ) {
klauss 81:3656f00ab3db 719 debug_eth = false;
klauss 81:3656f00ab3db 720 send_msg("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" );
klauss 81:3656f00ab3db 721 }
klauss 113:db67ae00550e 722
klauss 113:db67ae00550e 723
klauss 91:c2a86b1f8aaa 724
klauss 113:db67ae00550e 725 // testa se existe um pacote recebido pela interface CBx->Header pendente para ser processado.
klauss 91:c2a86b1f8aaa 726 if( status != __WAITING__ ) {
klauss 81:3656f00ab3db 727 pkg_wdt = RX_CB_IDLE;
klauss 113:db67ae00550e 728 xmemcpy( cb_rx_buffer, buffer_from_cb_ptr, CB_BUFFER_SIZE );
klauss 0:4d17cd9c8f9d 729 status = __WAITING__;
klauss 81:3656f00ab3db 730 missed_pkg--;
klauss 113:db67ae00550e 731 xmemcpy( buffer, cb_rx_buffer, CB_BUFFER_SIZE );
klauss 91:c2a86b1f8aaa 732
klauss 113:db67ae00550e 733 // exibe esta pacote caso seja solicitado
klauss 113:db67ae00550e 734 // TODO implementar um debug que exibe somente, todos os pacotes recebidos
klauss 91:c2a86b1f8aaa 735 if( rx ) {
klauss 81:3656f00ab3db 736 char str[ 1024 ];
klauss 81:3656f00ab3db 737 strcpy( str, "RX :: \n\r " );
klauss 113:db67ae00550e 738 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 81:3656f00ab3db 739 char tmp[ 16 ];
klauss 81:3656f00ab3db 740 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 81:3656f00ab3db 741 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 91:c2a86b1f8aaa 742
klauss 81:3656f00ab3db 743 else strcat( str, " " );
klauss 81:3656f00ab3db 744 }
klauss 81:3656f00ab3db 745 send_msg( "%s", str );
klauss 91:c2a86b1f8aaa 746 rx = false;
klauss 81:3656f00ab3db 747 }
klauss 113:db67ae00550e 748
klauss 113:db67ae00550e 749 // chama rotina para interpretar e validar o pacote recebido
klauss 113:db67ae00550e 750 data = parse_vz_pkg( &ext, &port, &type, buffer );
klauss 91:c2a86b1f8aaa 751
klauss 113:db67ae00550e 752 // caso parse_vz_pkg tenha retorno diferente de NULL, trata-se de um pacote valido para ser processado
klauss 91:c2a86b1f8aaa 753 if( data != NULL ) {
klauss 113:db67ae00550e 754 // atualiza referencias de menor e maior ramal conhecidos ate o momento
klauss 78:1353744f01e1 755 if( min_ext == 0 ) min_ext = ext;
klauss 91:c2a86b1f8aaa 756
klauss 78:1353744f01e1 757 if( ext > max_ext ) max_ext = ext;
klauss 91:c2a86b1f8aaa 758
klauss 78:1353744f01e1 759 if( ext < min_ext ) min_ext = ext;
klauss 99:e80850c51106 760
klauss 113:db67ae00550e 761 // verifica se precisa "exportar" esse pacote para debug externo
klauss 99:e80850c51106 762 if( debug_fw ){
klauss 99:e80850c51106 763 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 764 }
klauss 99:e80850c51106 765
klauss 113:db67ae00550e 766 // por decisao de projeto, todos os pacote de telemetria sao exportados para parse no servidor
klauss 113:db67ae00550e 767 if( type == __TELEMETRY__ )
klauss 113:db67ae00550e 768 {
klauss 113:db67ae00550e 769 telemetry_counter++;
klauss 113:db67ae00550e 770 //FIXME colocar o dtelos aqui
klauss 113:db67ae00550e 771 }
klauss 113:db67ae00550e 772
klauss 113:db67ae00550e 773 // alguns tratamentos adicionais que sao pertinentes em caso de pacotes diferentes do tipo __AUDIO__
klauss 113:db67ae00550e 774 if( type != __AUDIO__ )
klauss 113:db67ae00550e 775 {
klauss 113:db67ae00550e 776 // vefifica quais pacotes precisam ser exportados para o servidor e faz a substituicao do typo para __FW__ sem com isso
klauss 113:db67ae00550e 777 // alterar o pacote de origem.
klauss 99:e80850c51106 778 if(
klauss 99:e80850c51106 779 type == __TELEMETRY__ ||
klauss 99:e80850c51106 780 type == __CB_STATS__ ||
klauss 99:e80850c51106 781 type == __FW1__ ||
klauss 99:e80850c51106 782 type == __FW2__ ||
klauss 99:e80850c51106 783 type == __FW3__ ||
klauss 99:e80850c51106 784 type == __FW4__ ||
klauss 99:e80850c51106 785 type == __FW5__ ||
klauss 99:e80850c51106 786 type == __FW6__
klauss 99:e80850c51106 787 ) type = __FW__;
klauss 99:e80850c51106 788
klauss 113:db67ae00550e 789 // exibe que o pacote foi recebido porem sem exibir o conteudo do pacote, apenas ramal e porta do remetente e tipo do pkg
klauss 99:e80850c51106 790 if( debug_cb_rx == true ){
klauss 99:e80850c51106 791 send_msg("Pkg from CBx :: ( %d, %d ) -- Type :: %d", ext, port, type );
klauss 99:e80850c51106 792 }
klauss 113:db67ae00550e 793
klauss 113:db67ae00550e 794 // exibe o pacote recebido propriamente
klauss 113:db67ae00550e 795 if( debug_show_cpld )
klauss 113:db67ae00550e 796 {
klauss 113:db67ae00550e 797 char str[ 1024 ];
klauss 113:db67ae00550e 798 strcpy( str, "RX :: \n\r " );
klauss 113:db67ae00550e 799 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 113:db67ae00550e 800 char tmp[ 16 ];
klauss 113:db67ae00550e 801 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 113:db67ae00550e 802 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 113:db67ae00550e 803
klauss 113:db67ae00550e 804 else strcat( str, " " );
klauss 113:db67ae00550e 805 }
klauss 113:db67ae00550e 806 send_msg( "%s", str );
klauss 113:db67ae00550e 807 }
klauss 99:e80850c51106 808
klauss 113:db67ae00550e 809 // verificacoes de ACKS
klauss 0:4d17cd9c8f9d 810 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 811 if( cb != NULL ) {
klauss 92:92df17f538a8 812 if( data[ 0 ] & BIT7 ) {
klauss 91:c2a86b1f8aaa 813 if( type == __BOOT__ ) {
klauss 113:db67ae00550e 814 send2callboxes( build_cb_package( ext, port, __REGISTRY__,
klauss 113:db67ae00550e 815 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 816 } else {
klauss 81:3656f00ab3db 817 if( debug_main ) debug_msg("Received ack pkg with seq_num %d", data[ 0 ] );
klauss 91:c2a86b1f8aaa 818
klauss 91:c2a86b1f8aaa 819 switch( type ) {
klauss 81:3656f00ab3db 820 case __INVITE__ : {
klauss 81:3656f00ab3db 821 if( debug_main || debug_invite ) debug_msg("Invite Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 91:c2a86b1f8aaa 822 break;
klauss 81:3656f00ab3db 823 }
klauss 81:3656f00ab3db 824 case __CB_BYE__ : {
klauss 81:3656f00ab3db 825 if( debug_main || debug_invite ) debug_msg("BYE Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 826 cb->set_bye_response_ok();
klauss 91:c2a86b1f8aaa 827 break;
klauss 81:3656f00ab3db 828 }
klauss 81:3656f00ab3db 829 case __REGISTRY__ : {
klauss 81:3656f00ab3db 830 if( debug_main || debug_aging ) debug_msg("Registry ACK from %d in pkg :: %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 831 break;
klauss 81:3656f00ab3db 832 }
klauss 81:3656f00ab3db 833 default : {
klauss 91:c2a86b1f8aaa 834 if( debug_main || debug_aging ) debug_msg("ACK from %d in pkg :: %d :: type %d", ext, cb->get_msg_id(), type );
klauss 91:c2a86b1f8aaa 835 }
klauss 81:3656f00ab3db 836 }
klauss 92:92df17f538a8 837 if( type != __REGISTRY__ && type != __CB_BYE__ ) type = __DO_NOTHING__;
klauss 92:92df17f538a8 838 if( type == __CB_BYE__ ){
klauss 92:92df17f538a8 839 VZ_call * call = __find_Call__( v_call, ext );
klauss 92:92df17f538a8 840 if( call != NULL ){
klauss 92:92df17f538a8 841 if( call->get_elapsed_time() < 120000 ){
klauss 113:db67ae00550e 842 // devido a um bug na implementacao do protocolo, eventualmente o cbx envia
klauss 113:db67ae00550e 843 // um pacote de bye nao intencional que encerrava ligacoes precocemente
klauss 113:db67ae00550e 844 // solucao encontrada, colocado um timer de controle.
klauss 92:92df17f538a8 845 if( debug_invite ) debug_msg("%d ack bye ignored", ext );
klauss 92:92df17f538a8 846 type = __DO_NOTHING__;
klauss 92:92df17f538a8 847 }
klauss 92:92df17f538a8 848 }
klauss 92:92df17f538a8 849 }
klauss 0:4d17cd9c8f9d 850 }
klauss 0:4d17cd9c8f9d 851 }
klauss 0:4d17cd9c8f9d 852 }
klauss 0:4d17cd9c8f9d 853 }
klauss 91:c2a86b1f8aaa 854 } else type = __DO_NOTHING__;
klauss 0:4d17cd9c8f9d 855 }
klauss 113:db67ae00550e 856
klauss 113:db67ae00550e 857 // exibe uptime atual
klauss 113:db67ae00550e 858 if( show_uptime )
klauss 113:db67ae00550e 859 {
klauss 113:db67ae00550e 860 show_uptime = false;
klauss 113:db67ae00550e 861 send_msg("Uptime: %d", uptime );
klauss 113:db67ae00550e 862 }
klauss 91:c2a86b1f8aaa 863
klauss 113:db67ae00550e 864 // exibe algumas informacoes pertinentes sobre quantidade de variaveis alocadas e tamanho de alguns objetos.
klauss 113:db67ae00550e 865 if( sizes == true ) {
klauss 113:db67ae00550e 866 sizes = false;
klauss 85:b6f2dc1d0f4f 867 send_msg("CB_New (%u) -- CB_Delete (%u)", cb_new_counter, cb_delete_counter );
klauss 85:b6f2dc1d0f4f 868 send_msg("SIP_New (%u) -- SIP_Delete (%u)", sip_new_counter, sip_delete_counter );
klauss 87:679ee0d594a9 869 send_msg("RTP_header_New (%u) -- RTP_header_Delete (%u)", rtp_header_new_counter, rtp_header_delete_counter );
klauss 87:679ee0d594a9 870 send_msg("RTP_body_New (%u) -- RTP_body_Delete (%u)", rtp_body_new_counter, rtp_body_delete_counter );
klauss 109:a5b8264ffbbc 871 send_msg("Call_New (%u) -- Call_Delete (%u)", call_new_counter, call_delete_counter );
klauss 87:679ee0d594a9 872 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 873 send_msg("Memory is %s", ( memory_is_over ) ? "Over" : "Ok" );
klauss 81:3656f00ab3db 874 send_msg("Missed_Pkg :: %d ::", missed_pkg );
klauss 87:679ee0d594a9 875 send_msg("Sizeof Sip :: %u", sizeof( Sip ) );
klauss 113:db67ae00550e 876 send_msg("Sizeof Call_Box :: %u", sizeof( Call_Box ) );
klauss 87:679ee0d594a9 877 send_msg("Sizeof VZ_call :: %u", sizeof( VZ_call ) );
klauss 87:679ee0d594a9 878 send_msg("Sizeof RTP :: %u", sizeof( RTP ) );
klauss 87:679ee0d594a9 879 send_msg("Sizeof RTP_Header :: %u", sizeof( RTP_Header ) );
klauss 87:679ee0d594a9 880 send_msg("Sizeof RTP_Body :: %u", sizeof( RTP_Body ) );
klauss 87:679ee0d594a9 881 send_msg("Sizeof Vector :: %u", sizeof( Vector ) );
klauss 87:679ee0d594a9 882 send_msg("Sizeof Timeslice :: %u", sizeof( Timeslice ) );
klauss 87:679ee0d594a9 883 send_msg("Sizeof Watchdog :: %u", sizeof( Watchdog ) );
klauss 109:a5b8264ffbbc 884 }
klauss 109:a5b8264ffbbc 885
klauss 113:db67ae00550e 886 if ( registra )
klauss 112:6ae726539ab9 887 {
klauss 112:6ae726539ab9 888 int internal_ext = 8000;
klauss 112:6ae726539ab9 889 registra = false;
klauss 112:6ae726539ab9 890 for( register uint8_t i = 0; i < 4; i++ ) {
klauss 112:6ae726539ab9 891 v_cb -> add ( new Call_Box ( internal_ext, internal_ext++ ) );
klauss 112:6ae726539ab9 892 }
klauss 112:6ae726539ab9 893 }
klauss 112:6ae726539ab9 894
klauss 109:a5b8264ffbbc 895 {
klauss 109:a5b8264ffbbc 896 fd_set fdSet;
klauss 109:a5b8264ffbbc 897 FD_ZERO(&fdSet);
klauss 109:a5b8264ffbbc 898
klauss 109:a5b8264ffbbc 899 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 109:a5b8264ffbbc 900 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 901 FD_SET( cb->get_sip_socket_fd(), &fdSet);
klauss 109:a5b8264ffbbc 902 }
klauss 109:a5b8264ffbbc 903
klauss 109:a5b8264ffbbc 904 FD_SET( udp_wdt_client.get_fd(), &fdSet);
klauss 109:a5b8264ffbbc 905
klauss 109:a5b8264ffbbc 906 struct timeval t;
klauss 109:a5b8264ffbbc 907 t.tv_sec = 0;
klauss 109:a5b8264ffbbc 908 t.tv_usec = 0;
klauss 109:a5b8264ffbbc 909 int ret = lwip_select( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 109:a5b8264ffbbc 910
klauss 109:a5b8264ffbbc 911 if(ret > 0 ) {
klauss 109:a5b8264ffbbc 912 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 109:a5b8264ffbbc 913 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 914 int fd = cb->get_sip_socket_fd();
klauss 109:a5b8264ffbbc 915 if( FD_ISSET( fd, &fdSet ) ) {
klauss 109:a5b8264ffbbc 916 int rcv = cb->sip_udp_incomming_pkg();
klauss 109:a5b8264ffbbc 917 }
klauss 109:a5b8264ffbbc 918 }
klauss 109:a5b8264ffbbc 919 if( FD_ISSET( udp_wdt_client.get_fd(), &fdSet ) ) {
klauss 109:a5b8264ffbbc 920 char wake_msg[ 768 ];
klauss 109:a5b8264ffbbc 921 Endpoint udp_wdt_server;
klauss 109:a5b8264ffbbc 922
klauss 109:a5b8264ffbbc 923 if( udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) ) > 0 ){
klauss 109:a5b8264ffbbc 924 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 109:a5b8264ffbbc 925 // Just ckeck but not set 'alive?'
klauss 109:a5b8264ffbbc 926 // 'alive*' - force wdt tick right now
klauss 109:a5b8264ffbbc 927 // Ckecking and set 'alive'
klauss 109:a5b8264ffbbc 928 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 109:a5b8264ffbbc 929 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 109:a5b8264ffbbc 930
klauss 109:a5b8264ffbbc 931 /*
klauss 109:a5b8264ffbbc 932 uint8_t registered_cbx = v_cb->size();
klauss 109:a5b8264ffbbc 933 for( register int i = 0; i < v_cb->size(); i++ ){
klauss 109:a5b8264ffbbc 934 Call_Box * cb = (Call_Box * )v_cb->get_element( i );
klauss 109:a5b8264ffbbc 935 if( cb->is_timeout() ){ if( registered_cbx ) registered_cbx--; }
klauss 109:a5b8264ffbbc 936 }
klauss 109:a5b8264ffbbc 937 */
klauss 109:a5b8264ffbbc 938
klauss 109:a5b8264ffbbc 939 snprintf( wake_msg, 48,"wdt:%u,%u,%u,%c,%u,%u,%u,%u,%u:",
klauss 109:a5b8264ffbbc 940 uptime,
klauss 109:a5b8264ffbbc 941 invite_counter,
klauss 109:a5b8264ffbbc 942 external_wdt,
klauss 109:a5b8264ffbbc 943 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 109:a5b8264ffbbc 944 cb_new_counter,
klauss 109:a5b8264ffbbc 945 v_cb->size(),
klauss 109:a5b8264ffbbc 946 ts->remain_timeslices(),
klauss 109:a5b8264ffbbc 947 sip_socket_send_failure,
klauss 109:a5b8264ffbbc 948 v_call->size()
klauss 109:a5b8264ffbbc 949 // registered_cbx
klauss 109:a5b8264ffbbc 950 );
klauss 109:a5b8264ffbbc 951 wake_msg[ 768 - 1 ] = 0;
klauss 109:a5b8264ffbbc 952 udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 109:a5b8264ffbbc 953
klauss 109:a5b8264ffbbc 954 if( ( (!question_alive) && ( cb_new_counter <= __MAX_CB_IN_A_BRANCH__ ) && ( cb_new_counter >= 2 ) ) ) {
klauss 109:a5b8264ffbbc 955 external_wdt = EXTERN_WDT_IDLE;
klauss 109:a5b8264ffbbc 956 }
klauss 109:a5b8264ffbbc 957 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 109:a5b8264ffbbc 958 external_wdt = 0;
klauss 109:a5b8264ffbbc 959
klauss 109:a5b8264ffbbc 960 sprintf( wake_msg, "rst:%u:", uptime );
klauss 109:a5b8264ffbbc 961 udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 109:a5b8264ffbbc 962 }
klauss 109:a5b8264ffbbc 963 }
klauss 109:a5b8264ffbbc 964 }
klauss 109:a5b8264ffbbc 965 }
klauss 109:a5b8264ffbbc 966 }
klauss 109:a5b8264ffbbc 967
klauss 112:6ae726539ab9 968 if ( cogumelo )
klauss 112:6ae726539ab9 969 {
klauss 112:6ae726539ab9 970 cogumelo = false;
klauss 112:6ae726539ab9 971 for( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 972 {
klauss 112:6ae726539ab9 973 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 974 if ( cb )
klauss 112:6ae726539ab9 975 {
klauss 112:6ae726539ab9 976 set_status( cb->status, cb_on_call );
klauss 112:6ae726539ab9 977 set_status( cb->sip->status, sip_on_call );
klauss 112:6ae726539ab9 978 }
klauss 112:6ae726539ab9 979 else
klauss 112:6ae726539ab9 980 {
klauss 112:6ae726539ab9 981 debug_msg("%d congumelo missed", i );
klauss 112:6ae726539ab9 982 }
klauss 112:6ae726539ab9 983 }
klauss 112:6ae726539ab9 984
klauss 112:6ae726539ab9 985 }
klauss 112:6ae726539ab9 986
klauss 112:6ae726539ab9 987 if ( gnomo )
klauss 112:6ae726539ab9 988 {
klauss 112:6ae726539ab9 989 gnomo = false;
klauss 112:6ae726539ab9 990 for( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 991 {
klauss 112:6ae726539ab9 992 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 993 if ( cb )
klauss 112:6ae726539ab9 994 {
klauss 112:6ae726539ab9 995 set_status( cb->status, cb_idle );
klauss 112:6ae726539ab9 996 set_status( cb->sip->status, sip_idle );
klauss 112:6ae726539ab9 997 }
klauss 112:6ae726539ab9 998 else
klauss 112:6ae726539ab9 999 {
klauss 112:6ae726539ab9 1000 debug_msg("%d gnomo missed", i );
klauss 112:6ae726539ab9 1001 }
klauss 112:6ae726539ab9 1002 }
klauss 112:6ae726539ab9 1003
klauss 112:6ae726539ab9 1004 }
klauss 112:6ae726539ab9 1005
klauss 112:6ae726539ab9 1006
klauss 109:a5b8264ffbbc 1007 if( dshow_rtp == true ){
klauss 109:a5b8264ffbbc 1008 dshow_rtp = false;
klauss 109:a5b8264ffbbc 1009 send_msg(":: RTP :: %u", v_cb->size() );
klauss 109:a5b8264ffbbc 1010
klauss 109:a5b8264ffbbc 1011 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 109:a5b8264ffbbc 1012
klauss 109:a5b8264ffbbc 1013 if( v_cb->size() >= 1 ) {
klauss 109:a5b8264ffbbc 1014 for( register int i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 1015 {
klauss 109:a5b8264ffbbc 1016 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 109:a5b8264ffbbc 1017 }
klauss 109:a5b8264ffbbc 1018 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 109:a5b8264ffbbc 1019 }
klauss 109:a5b8264ffbbc 1020
klauss 109:a5b8264ffbbc 1021 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 1022 {
klauss 109:a5b8264ffbbc 1023 Call_Box * cb = __find_CB__( v_cb, ext_list[ i ] );
klauss 109:a5b8264ffbbc 1024 if( cb != NULL )
klauss 109:a5b8264ffbbc 1025 {
klauss 109:a5b8264ffbbc 1026 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 1027 cb -> get_ext (),
klauss 109:a5b8264ffbbc 1028 cb -> get_port (),
klauss 109:a5b8264ffbbc 1029 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 1030 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 1031 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 1032 );
klauss 109:a5b8264ffbbc 1033 }
klauss 109:a5b8264ffbbc 1034 }
klauss 109:a5b8264ffbbc 1035 }
klauss 109:a5b8264ffbbc 1036
klauss 109:a5b8264ffbbc 1037 if( malasia )
klauss 109:a5b8264ffbbc 1038 {
klauss 109:a5b8264ffbbc 1039 malasia = false;
klauss 109:a5b8264ffbbc 1040 // conclusao, mudar o nro nao impala, talvez mudar o nro no pacote ...
klauss 109:a5b8264ffbbc 1041 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 1042 if( cb != NULL )
klauss 109:a5b8264ffbbc 1043 {
klauss 109:a5b8264ffbbc 1044 cb -> set_rtp_port ( cb -> get_rtp_port () * 10 + 1 );
klauss 109:a5b8264ffbbc 1045 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 1046 cb -> get_ext (),
klauss 109:a5b8264ffbbc 1047 cb -> get_port (),
klauss 109:a5b8264ffbbc 1048 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 1049 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 1050 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 1051 );
klauss 109:a5b8264ffbbc 1052 }
klauss 109:a5b8264ffbbc 1053 }
klauss 109:a5b8264ffbbc 1054
klauss 109:a5b8264ffbbc 1055 if( york )
klauss 109:a5b8264ffbbc 1056 {
klauss 109:a5b8264ffbbc 1057 york = false;
klauss 109:a5b8264ffbbc 1058 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 1059 if( cb != NULL )
klauss 109:a5b8264ffbbc 1060 {
klauss 109:a5b8264ffbbc 1061 cb -> set_rtp_port ( 80 );
klauss 109:a5b8264ffbbc 1062 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 1063 cb -> get_ext (),
klauss 109:a5b8264ffbbc 1064 cb -> get_port (),
klauss 109:a5b8264ffbbc 1065 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 1066 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 1067 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 1068 );
klauss 109:a5b8264ffbbc 1069 }
klauss 109:a5b8264ffbbc 1070 }
klauss 109:a5b8264ffbbc 1071
klauss 109:a5b8264ffbbc 1072 if ( frtp )
klauss 109:a5b8264ffbbc 1073 {
klauss 109:a5b8264ffbbc 1074 frtp = false;
klauss 109:a5b8264ffbbc 1075 Call_Box * cb = __find_CB__( v_cb, frtp_target );
klauss 109:a5b8264ffbbc 1076 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1077 {
klauss 109:a5b8264ffbbc 1078 cb -> set_rtp_port ( -1008789032 );
klauss 109:a5b8264ffbbc 1079 }
klauss 109:a5b8264ffbbc 1080 else
klauss 109:a5b8264ffbbc 1081 {
klauss 109:a5b8264ffbbc 1082 debug_msg("frtp fail");
klauss 109:a5b8264ffbbc 1083 }
klauss 109:a5b8264ffbbc 1084
klauss 109:a5b8264ffbbc 1085 }
klauss 109:a5b8264ffbbc 1086
klauss 109:a5b8264ffbbc 1087 if ( rescue_rtp )
klauss 109:a5b8264ffbbc 1088 {
klauss 109:a5b8264ffbbc 1089 rescue_rtp = false;
klauss 109:a5b8264ffbbc 1090 Call_Box * cb = __find_CB__( v_cb, rescue_rtp_target );
klauss 109:a5b8264ffbbc 1091 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1092 {
klauss 109:a5b8264ffbbc 1093 cb -> set_rtp_port ( rescue_rtp_value );
klauss 109:a5b8264ffbbc 1094 }
klauss 109:a5b8264ffbbc 1095 else
klauss 109:a5b8264ffbbc 1096 {
klauss 109:a5b8264ffbbc 1097 debug_msg("rescue rtp fail");
klauss 109:a5b8264ffbbc 1098 }
klauss 109:a5b8264ffbbc 1099
klauss 109:a5b8264ffbbc 1100 }
klauss 109:a5b8264ffbbc 1101
klauss 109:a5b8264ffbbc 1102 if( america )
klauss 109:a5b8264ffbbc 1103 {
klauss 109:a5b8264ffbbc 1104 america = false;
klauss 109:a5b8264ffbbc 1105 Call_Box * cb = __find_CB__( v_cb, 5016 );
klauss 109:a5b8264ffbbc 1106 if( cb != NULL )
klauss 109:a5b8264ffbbc 1107 {
klauss 109:a5b8264ffbbc 1108 cb -> set_rtp_port ( 8929415 );
klauss 109:a5b8264ffbbc 1109 send_msg("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 109:a5b8264ffbbc 1110 cb -> get_ext (),
klauss 109:a5b8264ffbbc 1111 cb -> get_port (),
klauss 109:a5b8264ffbbc 1112 cb -> get_sip_ext (),
klauss 109:a5b8264ffbbc 1113 cb -> get_sip_port (),
klauss 109:a5b8264ffbbc 1114 cb -> get_rtp_port ()
klauss 109:a5b8264ffbbc 1115 );
klauss 109:a5b8264ffbbc 1116 }
klauss 109:a5b8264ffbbc 1117 }
klauss 109:a5b8264ffbbc 1118
klauss 113:db67ae00550e 1119 //begin debug print
klauss 109:a5b8264ffbbc 1120 if ( print_v_cb )
klauss 109:a5b8264ffbbc 1121 {
klauss 109:a5b8264ffbbc 1122 print_v_cb = false;
klauss 113:db67ae00550e 1123 v_cb -> print_yourself ();
klauss 109:a5b8264ffbbc 1124 }
klauss 109:a5b8264ffbbc 1125
klauss 109:a5b8264ffbbc 1126 if ( print_v_call )
klauss 109:a5b8264ffbbc 1127 {
klauss 109:a5b8264ffbbc 1128 print_v_call = false;
klauss 109:a5b8264ffbbc 1129 v_call->print_yourself ();
klauss 109:a5b8264ffbbc 1130 }
klauss 109:a5b8264ffbbc 1131
klauss 109:a5b8264ffbbc 1132 if ( print_cb_var )
klauss 109:a5b8264ffbbc 1133 {
klauss 109:a5b8264ffbbc 1134 print_cb_var = false;
klauss 109:a5b8264ffbbc 1135 Call_Box * cb = __find_CB__ ( v_cb, print_this_cb );
klauss 109:a5b8264ffbbc 1136 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1137 {
klauss 109:a5b8264ffbbc 1138 cb -> print_yourself ();
klauss 109:a5b8264ffbbc 1139 }
klauss 109:a5b8264ffbbc 1140 else
klauss 109:a5b8264ffbbc 1141 {
klauss 109:a5b8264ffbbc 1142 if( print_values )
klauss 109:a5b8264ffbbc 1143 {
klauss 109:a5b8264ffbbc 1144 debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1145 }
klauss 109:a5b8264ffbbc 1146 else
klauss 109:a5b8264ffbbc 1147 {
klauss 109:a5b8264ffbbc 1148 send_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1149 }
klauss 109:a5b8264ffbbc 1150 }
klauss 109:a5b8264ffbbc 1151 }
klauss 109:a5b8264ffbbc 1152
klauss 109:a5b8264ffbbc 1153 if ( print_cb_all )
klauss 109:a5b8264ffbbc 1154 {
klauss 109:a5b8264ffbbc 1155 print_cb_all = false;
klauss 109:a5b8264ffbbc 1156
klauss 109:a5b8264ffbbc 1157 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 1158 {
klauss 109:a5b8264ffbbc 1159 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 1160 }
klauss 109:a5b8264ffbbc 1161
klauss 109:a5b8264ffbbc 1162 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 1163 {
klauss 109:a5b8264ffbbc 1164 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 1165
klauss 109:a5b8264ffbbc 1166 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1167 {
klauss 109:a5b8264ffbbc 1168 cb -> print_yourself ();
klauss 109:a5b8264ffbbc 1169 }
klauss 109:a5b8264ffbbc 1170 else
klauss 109:a5b8264ffbbc 1171 {
klauss 109:a5b8264ffbbc 1172 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", i );
klauss 109:a5b8264ffbbc 1173 }
klauss 109:a5b8264ffbbc 1174 }
klauss 109:a5b8264ffbbc 1175 }
klauss 109:a5b8264ffbbc 1176
klauss 109:a5b8264ffbbc 1177 if ( print_hex_cb_var )
klauss 109:a5b8264ffbbc 1178 {
klauss 109:a5b8264ffbbc 1179 print_hex_cb_var = false;
klauss 109:a5b8264ffbbc 1180 uint8_t * ptr = ( uint8_t * ) __find_CB__ ( v_cb, print_hex_this_cb );
klauss 109:a5b8264ffbbc 1181
klauss 109:a5b8264ffbbc 1182 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1183 {
klauss 109:a5b8264ffbbc 1184 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1185 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1186 {
klauss 109:a5b8264ffbbc 1187 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1188
klauss 109:a5b8264ffbbc 1189 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1190 {
klauss 109:a5b8264ffbbc 1191 if( i != 0 )
klauss 109:a5b8264ffbbc 1192 {
klauss 109:a5b8264ffbbc 1193 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1194 }
klauss 109:a5b8264ffbbc 1195 else
klauss 109:a5b8264ffbbc 1196 {
klauss 109:a5b8264ffbbc 1197 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1198 }
klauss 109:a5b8264ffbbc 1199 }
klauss 109:a5b8264ffbbc 1200 else
klauss 109:a5b8264ffbbc 1201 {
klauss 109:a5b8264ffbbc 1202 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1203 }
klauss 109:a5b8264ffbbc 1204 }
klauss 109:a5b8264ffbbc 1205 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1206
klauss 109:a5b8264ffbbc 1207 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1208 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 1209
klauss 109:a5b8264ffbbc 1210 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1211
klauss 109:a5b8264ffbbc 1212 uint8_t * ptr = ( uint8_t * ) __find_CB__ ( v_cb, print_hex_this_cb );
klauss 109:a5b8264ffbbc 1213
klauss 109:a5b8264ffbbc 1214 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1215 {
klauss 109:a5b8264ffbbc 1216 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1217 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1218 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1219 }
klauss 109:a5b8264ffbbc 1220
klauss 109:a5b8264ffbbc 1221 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1222 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1223 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1224 }
klauss 109:a5b8264ffbbc 1225 }
klauss 109:a5b8264ffbbc 1226 else
klauss 109:a5b8264ffbbc 1227 {
klauss 109:a5b8264ffbbc 1228 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1229 }
klauss 81:3656f00ab3db 1230 }
klauss 106:a34fcf9f0e02 1231
klauss 109:a5b8264ffbbc 1232 if ( print_hex_cb_all )
klauss 109:a5b8264ffbbc 1233 {
klauss 109:a5b8264ffbbc 1234 print_hex_cb_all = false;
klauss 109:a5b8264ffbbc 1235
klauss 109:a5b8264ffbbc 1236 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 1237 {
klauss 109:a5b8264ffbbc 1238 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 1239 }
klauss 109:a5b8264ffbbc 1240
klauss 109:a5b8264ffbbc 1241 for ( register uint8_t j = 0; j < v_cb->size(); j++ )
klauss 109:a5b8264ffbbc 1242 {
klauss 109:a5b8264ffbbc 1243 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1244
klauss 109:a5b8264ffbbc 1245 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1246 {
klauss 109:a5b8264ffbbc 1247 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1248 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1249 {
klauss 109:a5b8264ffbbc 1250 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1251
klauss 109:a5b8264ffbbc 1252 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1253 {
klauss 109:a5b8264ffbbc 1254 if( i != 0 )
klauss 109:a5b8264ffbbc 1255 {
klauss 109:a5b8264ffbbc 1256 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1257 }
klauss 109:a5b8264ffbbc 1258 else
klauss 109:a5b8264ffbbc 1259 {
klauss 109:a5b8264ffbbc 1260 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1261 }
klauss 109:a5b8264ffbbc 1262 }
klauss 109:a5b8264ffbbc 1263 else
klauss 109:a5b8264ffbbc 1264 {
klauss 109:a5b8264ffbbc 1265 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1266 }
klauss 109:a5b8264ffbbc 1267 }
klauss 109:a5b8264ffbbc 1268 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1269
klauss 109:a5b8264ffbbc 1270 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1271 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 1272
klauss 109:a5b8264ffbbc 1273 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1274
klauss 109:a5b8264ffbbc 1275 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1276
klauss 109:a5b8264ffbbc 1277 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1278 {
klauss 109:a5b8264ffbbc 1279 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1280 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1281 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1282 }
klauss 109:a5b8264ffbbc 1283
klauss 109:a5b8264ffbbc 1284 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1285 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1286 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1287 }
klauss 109:a5b8264ffbbc 1288 }
klauss 109:a5b8264ffbbc 1289 else
klauss 109:a5b8264ffbbc 1290 {
klauss 109:a5b8264ffbbc 1291 if ( print_values )
klauss 109:a5b8264ffbbc 1292 {
klauss 109:a5b8264ffbbc 1293 debug_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 1294 }
klauss 109:a5b8264ffbbc 1295 else
klauss 109:a5b8264ffbbc 1296 {
klauss 109:a5b8264ffbbc 1297 send_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 1298 }
klauss 109:a5b8264ffbbc 1299 }
klauss 109:a5b8264ffbbc 1300 }
klauss 109:a5b8264ffbbc 1301 }
klauss 106:a34fcf9f0e02 1302
klauss 109:a5b8264ffbbc 1303 //begin Sip debug print
klauss 109:a5b8264ffbbc 1304 {
klauss 109:a5b8264ffbbc 1305 if ( print_sip_var )
klauss 109:a5b8264ffbbc 1306 {
klauss 109:a5b8264ffbbc 1307 print_sip_var = false;
klauss 109:a5b8264ffbbc 1308 Call_Box * cb = __find_CB__ ( v_cb, print_this_sip );
klauss 109:a5b8264ffbbc 1309 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1310 {
klauss 109:a5b8264ffbbc 1311 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 1312 {
klauss 109:a5b8264ffbbc 1313 cb -> sip -> print_yourself ();
klauss 109:a5b8264ffbbc 1314 }
klauss 109:a5b8264ffbbc 1315 else
klauss 109:a5b8264ffbbc 1316 {
klauss 109:a5b8264ffbbc 1317 if( print_values )
klauss 109:a5b8264ffbbc 1318 {
klauss 109:a5b8264ffbbc 1319 debug_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 1320 }
klauss 109:a5b8264ffbbc 1321 else
klauss 109:a5b8264ffbbc 1322 {
klauss 109:a5b8264ffbbc 1323 send_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 1324 }
klauss 109:a5b8264ffbbc 1325 }
klauss 109:a5b8264ffbbc 1326 }
klauss 109:a5b8264ffbbc 1327 else
klauss 109:a5b8264ffbbc 1328 {
klauss 109:a5b8264ffbbc 1329 if ( print_values )
klauss 109:a5b8264ffbbc 1330 {
klauss 109:a5b8264ffbbc 1331 debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1332 }
klauss 109:a5b8264ffbbc 1333 else
klauss 109:a5b8264ffbbc 1334 {
klauss 109:a5b8264ffbbc 1335 send_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1336 } }
klauss 109:a5b8264ffbbc 1337 }
klauss 109:a5b8264ffbbc 1338
klauss 109:a5b8264ffbbc 1339 if ( print_sip_all )
klauss 109:a5b8264ffbbc 1340 {
klauss 109:a5b8264ffbbc 1341 print_sip_all = false;
klauss 109:a5b8264ffbbc 1342
klauss 109:a5b8264ffbbc 1343 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 1344 {
klauss 109:a5b8264ffbbc 1345 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 1346 }
klauss 109:a5b8264ffbbc 1347
klauss 109:a5b8264ffbbc 1348 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 109:a5b8264ffbbc 1349 {
klauss 109:a5b8264ffbbc 1350 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 109:a5b8264ffbbc 1351
klauss 109:a5b8264ffbbc 1352 if ( cb != NULL )
klauss 109:a5b8264ffbbc 1353 {
klauss 109:a5b8264ffbbc 1354 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 1355 {
klauss 109:a5b8264ffbbc 1356 cb -> sip -> print_yourself ();
klauss 109:a5b8264ffbbc 1357 }
klauss 109:a5b8264ffbbc 1358 else
klauss 109:a5b8264ffbbc 1359 {
klauss 109:a5b8264ffbbc 1360 if( print_values )
klauss 109:a5b8264ffbbc 1361 {
klauss 109:a5b8264ffbbc 1362 debug_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 1363 }
klauss 109:a5b8264ffbbc 1364 else
klauss 109:a5b8264ffbbc 1365 {
klauss 109:a5b8264ffbbc 1366 send_msg("Sip param of %d equals NULL", print_this_sip );
klauss 109:a5b8264ffbbc 1367 }
klauss 109:a5b8264ffbbc 1368 }
klauss 109:a5b8264ffbbc 1369 }
klauss 109:a5b8264ffbbc 1370 else
klauss 109:a5b8264ffbbc 1371 {
klauss 109:a5b8264ffbbc 1372 if( print_values )
klauss 109:a5b8264ffbbc 1373 {
klauss 109:a5b8264ffbbc 1374 debug_msg("CBx %d not found", print_this_sip );
klauss 109:a5b8264ffbbc 1375 }
klauss 109:a5b8264ffbbc 1376 else
klauss 109:a5b8264ffbbc 1377 {
klauss 109:a5b8264ffbbc 1378 send_msg("CBx %d not found", print_this_sip );
klauss 109:a5b8264ffbbc 1379 }
klauss 109:a5b8264ffbbc 1380 }
klauss 109:a5b8264ffbbc 1381 }
klauss 109:a5b8264ffbbc 1382 }
klauss 109:a5b8264ffbbc 1383
klauss 109:a5b8264ffbbc 1384 if ( print_hex_sip_var )
klauss 109:a5b8264ffbbc 1385 {
klauss 109:a5b8264ffbbc 1386 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1387
klauss 109:a5b8264ffbbc 1388 print_hex_sip_var = false;
klauss 109:a5b8264ffbbc 1389 Call_Box * cb = __find_CB__ ( v_cb, print_hex_this_sip );
klauss 109:a5b8264ffbbc 1390 if( cb != NULL )
klauss 109:a5b8264ffbbc 1391 {
klauss 109:a5b8264ffbbc 1392 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 1393 ptr = ( uint8_t * ) cb -> sip;
klauss 109:a5b8264ffbbc 1394 }
klauss 109:a5b8264ffbbc 1395
klauss 109:a5b8264ffbbc 1396 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1397 {
klauss 109:a5b8264ffbbc 1398 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1399 for ( register int i = 0; i < sizeof( Sip ); i++ )
klauss 109:a5b8264ffbbc 1400 {
klauss 109:a5b8264ffbbc 1401 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1402
klauss 109:a5b8264ffbbc 1403 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1404 {
klauss 109:a5b8264ffbbc 1405 if( i != 0 )
klauss 109:a5b8264ffbbc 1406 {
klauss 109:a5b8264ffbbc 1407 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1408 }
klauss 109:a5b8264ffbbc 1409 else
klauss 109:a5b8264ffbbc 1410 {
klauss 109:a5b8264ffbbc 1411 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1412 }
klauss 109:a5b8264ffbbc 1413 }
klauss 109:a5b8264ffbbc 1414 else
klauss 109:a5b8264ffbbc 1415 {
klauss 109:a5b8264ffbbc 1416 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1417 }
klauss 109:a5b8264ffbbc 1418 }
klauss 109:a5b8264ffbbc 1419 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1420
klauss 109:a5b8264ffbbc 1421 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1422 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 1423
klauss 109:a5b8264ffbbc 1424 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1425
klauss 109:a5b8264ffbbc 1426 ptr = NULL;
klauss 109:a5b8264ffbbc 1427
klauss 109:a5b8264ffbbc 1428 print_hex_sip_var = false;
klauss 109:a5b8264ffbbc 1429 Call_Box * cb = __find_CB__ ( v_cb, print_hex_this_sip );
klauss 109:a5b8264ffbbc 1430 if( cb != NULL )
klauss 109:a5b8264ffbbc 1431 {
klauss 109:a5b8264ffbbc 1432 if( ( cb -> sip ) != NULL )
klauss 109:a5b8264ffbbc 1433 ptr = ( uint8_t * ) cb -> sip;
klauss 109:a5b8264ffbbc 1434 }
klauss 109:a5b8264ffbbc 1435
klauss 109:a5b8264ffbbc 1436 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1437 {
klauss 109:a5b8264ffbbc 1438 bool finished = false;
klauss 109:a5b8264ffbbc 1439 volatile int i = 0;
klauss 109:a5b8264ffbbc 1440 int count = 0;
klauss 109:a5b8264ffbbc 1441 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 1442 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 1443 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 1444
klauss 109:a5b8264ffbbc 1445 while ( !finished )
klauss 109:a5b8264ffbbc 1446 {
klauss 109:a5b8264ffbbc 1447 if( dont_overwrite_tcp_buffer.read_ms () >= 500 )
klauss 109:a5b8264ffbbc 1448 {
klauss 109:a5b8264ffbbc 1449 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1450 for ( ; i < sizeof( Sip ); i++ )
klauss 109:a5b8264ffbbc 1451 {
klauss 109:a5b8264ffbbc 1452 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1453 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1454 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1455 count++;
klauss 109:a5b8264ffbbc 1456
klauss 109:a5b8264ffbbc 1457 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1458 {
klauss 109:a5b8264ffbbc 1459 count = 0;
klauss 109:a5b8264ffbbc 1460 i++;
klauss 109:a5b8264ffbbc 1461 break;
klauss 109:a5b8264ffbbc 1462 }
klauss 109:a5b8264ffbbc 1463 }
klauss 109:a5b8264ffbbc 1464 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1465 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1466 if ( i >= sizeof ( Sip ) ) finished = true;
klauss 109:a5b8264ffbbc 1467 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1468 }
klauss 109:a5b8264ffbbc 1469 }
klauss 109:a5b8264ffbbc 1470 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1471 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1472 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1473 }
klauss 109:a5b8264ffbbc 1474 }
klauss 109:a5b8264ffbbc 1475 }
klauss 109:a5b8264ffbbc 1476 else
klauss 109:a5b8264ffbbc 1477 {
klauss 109:a5b8264ffbbc 1478 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 109:a5b8264ffbbc 1479 }
klauss 109:a5b8264ffbbc 1480 }
klauss 109:a5b8264ffbbc 1481 /*
klauss 109:a5b8264ffbbc 1482 if ( print_hex_cb_all )
klauss 109:a5b8264ffbbc 1483 {
klauss 109:a5b8264ffbbc 1484 print_hex_cb_all = false;
klauss 109:a5b8264ffbbc 1485
klauss 109:a5b8264ffbbc 1486 if ( v_cb -> size () == 0 )
klauss 109:a5b8264ffbbc 1487 {
klauss 109:a5b8264ffbbc 1488 send_msg("known CBx :: 0");
klauss 109:a5b8264ffbbc 1489 }
klauss 109:a5b8264ffbbc 1490
klauss 109:a5b8264ffbbc 1491 for ( register uint8_t j = 0; j < v_cb->size(); j++ )
klauss 109:a5b8264ffbbc 1492 {
klauss 109:a5b8264ffbbc 1493 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1494
klauss 109:a5b8264ffbbc 1495 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1496 {
klauss 109:a5b8264ffbbc 1497 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1498 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1499 {
klauss 109:a5b8264ffbbc 1500 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1501
klauss 109:a5b8264ffbbc 1502 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1503 {
klauss 109:a5b8264ffbbc 1504 if( i != 0 )
klauss 109:a5b8264ffbbc 1505 {
klauss 109:a5b8264ffbbc 1506 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1507 }
klauss 109:a5b8264ffbbc 1508 else
klauss 109:a5b8264ffbbc 1509 {
klauss 109:a5b8264ffbbc 1510 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1511 }
klauss 109:a5b8264ffbbc 1512 }
klauss 109:a5b8264ffbbc 1513 else
klauss 109:a5b8264ffbbc 1514 {
klauss 109:a5b8264ffbbc 1515 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1516 }
klauss 109:a5b8264ffbbc 1517 }
klauss 109:a5b8264ffbbc 1518 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1519
klauss 109:a5b8264ffbbc 1520 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1521 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 109:a5b8264ffbbc 1522
klauss 109:a5b8264ffbbc 1523 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1524
klauss 109:a5b8264ffbbc 1525 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 109:a5b8264ffbbc 1526
klauss 109:a5b8264ffbbc 1527 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 109:a5b8264ffbbc 1528 {
klauss 109:a5b8264ffbbc 1529 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1530 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1531 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1532 }
klauss 109:a5b8264ffbbc 1533
klauss 109:a5b8264ffbbc 1534 strcat( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1535 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1536 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1537 }
klauss 109:a5b8264ffbbc 1538 }
klauss 109:a5b8264ffbbc 1539 else
klauss 109:a5b8264ffbbc 1540 {
klauss 109:a5b8264ffbbc 1541 if ( print_values ) debug_msg ("Objeto CBx ( %d ) nao encontrado", j );
klauss 109:a5b8264ffbbc 1542 }
klauss 109:a5b8264ffbbc 1543 }
klauss 109:a5b8264ffbbc 1544 }
klauss 109:a5b8264ffbbc 1545 */
klauss 109:a5b8264ffbbc 1546 }//end Sip debug print
klauss 109:a5b8264ffbbc 1547
klauss 109:a5b8264ffbbc 1548 if( dcallshow_rtp == true ){
klauss 109:a5b8264ffbbc 1549 dcallshow_rtp = false;
klauss 109:a5b8264ffbbc 1550 send_msg(":: CAll RTP :: %u", v_call->size() );
klauss 109:a5b8264ffbbc 1551 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 109:a5b8264ffbbc 1552 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 109:a5b8264ffbbc 1553 if( call != NULL )
klauss 109:a5b8264ffbbc 1554 {
klauss 109:a5b8264ffbbc 1555 send_msg("CBX ( %d, %d ) - Server ( %d, %d )",
klauss 109:a5b8264ffbbc 1556 call->get_cb_ext(),
klauss 109:a5b8264ffbbc 1557 call->get_cb_port(),
klauss 109:a5b8264ffbbc 1558 call->get_rtp_server_ext(),
klauss 109:a5b8264ffbbc 1559 call->get_rtp_server_port()
klauss 109:a5b8264ffbbc 1560 );
klauss 109:a5b8264ffbbc 1561 }
klauss 109:a5b8264ffbbc 1562 }
klauss 109:a5b8264ffbbc 1563 }
klauss 109:a5b8264ffbbc 1564
klauss 109:a5b8264ffbbc 1565 if ( print_call_var )
klauss 109:a5b8264ffbbc 1566 {
klauss 109:a5b8264ffbbc 1567 print_call_var = false;
klauss 109:a5b8264ffbbc 1568 VZ_call * call = __find_Call__( v_call, print_this_call );
klauss 109:a5b8264ffbbc 1569 if ( call != NULL )
klauss 109:a5b8264ffbbc 1570 {
klauss 109:a5b8264ffbbc 1571 send_msg ("Values :: %p\r\n", ( void *) call );
klauss 109:a5b8264ffbbc 1572 call -> print_yourself ();
klauss 109:a5b8264ffbbc 1573 }
klauss 109:a5b8264ffbbc 1574 else
klauss 109:a5b8264ffbbc 1575 {
klauss 109:a5b8264ffbbc 1576 if( print_values )
klauss 109:a5b8264ffbbc 1577 {
klauss 109:a5b8264ffbbc 1578 debug_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1579 }
klauss 109:a5b8264ffbbc 1580 else
klauss 109:a5b8264ffbbc 1581 {
klauss 109:a5b8264ffbbc 1582 send_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1583 }
klauss 109:a5b8264ffbbc 1584 }
klauss 109:a5b8264ffbbc 1585 }
klauss 109:a5b8264ffbbc 1586
klauss 109:a5b8264ffbbc 1587 if ( print_hex_call_var )
klauss 109:a5b8264ffbbc 1588 {
klauss 109:a5b8264ffbbc 1589 print_hex_call_var = false;
klauss 109:a5b8264ffbbc 1590 VZ_call * call = __find_Call__( v_call, print_hex_this_call );
klauss 109:a5b8264ffbbc 1591
klauss 109:a5b8264ffbbc 1592 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1593 if( call != NULL )
klauss 109:a5b8264ffbbc 1594 {
klauss 109:a5b8264ffbbc 1595 ptr = ( uint8_t * ) call;
klauss 109:a5b8264ffbbc 1596 }
klauss 109:a5b8264ffbbc 1597
klauss 109:a5b8264ffbbc 1598 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1599 {
klauss 109:a5b8264ffbbc 1600 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1601 for ( register int i = 0; i < sizeof( VZ_call ); i++ )
klauss 109:a5b8264ffbbc 1602 {
klauss 109:a5b8264ffbbc 1603 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1604
klauss 109:a5b8264ffbbc 1605 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1606 {
klauss 109:a5b8264ffbbc 1607 if( i != 0 )
klauss 109:a5b8264ffbbc 1608 {
klauss 109:a5b8264ffbbc 1609 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1610 }
klauss 109:a5b8264ffbbc 1611 else
klauss 109:a5b8264ffbbc 1612 {
klauss 109:a5b8264ffbbc 1613 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1614 }
klauss 109:a5b8264ffbbc 1615 }
klauss 109:a5b8264ffbbc 1616 else
klauss 109:a5b8264ffbbc 1617 {
klauss 109:a5b8264ffbbc 1618 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1619 }
klauss 109:a5b8264ffbbc 1620 }
klauss 109:a5b8264ffbbc 1621 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1622
klauss 109:a5b8264ffbbc 1623 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1624 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 1625
klauss 109:a5b8264ffbbc 1626 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1627
klauss 109:a5b8264ffbbc 1628 ptr = NULL;
klauss 109:a5b8264ffbbc 1629
klauss 109:a5b8264ffbbc 1630 VZ_call * call = __find_Call__( v_call, print_hex_this_call );
klauss 109:a5b8264ffbbc 1631
klauss 109:a5b8264ffbbc 1632 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1633 if( call != NULL )
klauss 109:a5b8264ffbbc 1634 {
klauss 109:a5b8264ffbbc 1635 ptr = ( uint8_t * ) call;
klauss 109:a5b8264ffbbc 1636 }
klauss 109:a5b8264ffbbc 1637
klauss 109:a5b8264ffbbc 1638 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1639 {
klauss 109:a5b8264ffbbc 1640 bool finished = false;
klauss 109:a5b8264ffbbc 1641 volatile int i = 0;
klauss 109:a5b8264ffbbc 1642 int count = 0;
klauss 109:a5b8264ffbbc 1643 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 1644 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 1645 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 1646
klauss 109:a5b8264ffbbc 1647 while ( !finished )
klauss 109:a5b8264ffbbc 1648 {
klauss 109:a5b8264ffbbc 1649 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 109:a5b8264ffbbc 1650 {
klauss 109:a5b8264ffbbc 1651 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1652 for ( ; i < sizeof( VZ_call ); i++ )
klauss 109:a5b8264ffbbc 1653 {
klauss 109:a5b8264ffbbc 1654 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1655 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1656 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1657 count++;
klauss 109:a5b8264ffbbc 1658
klauss 109:a5b8264ffbbc 1659 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1660 {
klauss 109:a5b8264ffbbc 1661 count = 0;
klauss 109:a5b8264ffbbc 1662 i++;
klauss 109:a5b8264ffbbc 1663 break;
klauss 109:a5b8264ffbbc 1664 }
klauss 109:a5b8264ffbbc 1665 }
klauss 109:a5b8264ffbbc 1666 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1667 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1668 if ( i >= sizeof ( VZ_call ) ) finished = true;
klauss 109:a5b8264ffbbc 1669 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1670 }
klauss 109:a5b8264ffbbc 1671 }
klauss 109:a5b8264ffbbc 1672 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1673 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1674 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1675 }
klauss 109:a5b8264ffbbc 1676 }
klauss 109:a5b8264ffbbc 1677 }
klauss 109:a5b8264ffbbc 1678 else
klauss 109:a5b8264ffbbc 1679 {
klauss 109:a5b8264ffbbc 1680 if( print_values )
klauss 109:a5b8264ffbbc 1681 {
klauss 109:a5b8264ffbbc 1682 debug_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1683 }
klauss 109:a5b8264ffbbc 1684 else
klauss 109:a5b8264ffbbc 1685 {
klauss 109:a5b8264ffbbc 1686 send_msg("Call %d not found", print_this_call );
klauss 109:a5b8264ffbbc 1687 }
klauss 109:a5b8264ffbbc 1688 }
klauss 109:a5b8264ffbbc 1689 }
klauss 109:a5b8264ffbbc 1690
klauss 109:a5b8264ffbbc 1691
klauss 109:a5b8264ffbbc 1692 if ( print_hex_rtp_var )
klauss 109:a5b8264ffbbc 1693 {
klauss 109:a5b8264ffbbc 1694 print_hex_rtp_var = false;
klauss 109:a5b8264ffbbc 1695 VZ_call * call = __find_Call__( v_call, print_hex_this_rtp );
klauss 109:a5b8264ffbbc 1696
klauss 109:a5b8264ffbbc 1697 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1698 if( call != NULL )
klauss 109:a5b8264ffbbc 1699 {
klauss 109:a5b8264ffbbc 1700 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 109:a5b8264ffbbc 1701 }
klauss 109:a5b8264ffbbc 1702
klauss 109:a5b8264ffbbc 1703 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1704 {
klauss 109:a5b8264ffbbc 1705 send_msg ("Values :: %p\r\n", ( void *) ptr );
klauss 109:a5b8264ffbbc 1706 for ( register int i = 0; i < sizeof( RTP ); i++ )
klauss 109:a5b8264ffbbc 1707 {
klauss 109:a5b8264ffbbc 1708 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 109:a5b8264ffbbc 1709
klauss 109:a5b8264ffbbc 1710 if ( ( i % 32 ) == 0 )
klauss 109:a5b8264ffbbc 1711 {
klauss 109:a5b8264ffbbc 1712 if( i != 0 )
klauss 109:a5b8264ffbbc 1713 {
klauss 109:a5b8264ffbbc 1714 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1715 }
klauss 109:a5b8264ffbbc 1716 else
klauss 109:a5b8264ffbbc 1717 {
klauss 109:a5b8264ffbbc 1718 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1719 }
klauss 109:a5b8264ffbbc 1720 }
klauss 109:a5b8264ffbbc 1721 else
klauss 109:a5b8264ffbbc 1722 {
klauss 109:a5b8264ffbbc 1723 if( debug_uart3 ) pc.printf(" ");
klauss 109:a5b8264ffbbc 1724 }
klauss 109:a5b8264ffbbc 1725 }
klauss 109:a5b8264ffbbc 1726 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 109:a5b8264ffbbc 1727
klauss 109:a5b8264ffbbc 1728 if ( tcp_session ) {
klauss 109:a5b8264ffbbc 1729 char aux[ ( 32 * 3 ) + 5 ];
klauss 109:a5b8264ffbbc 1730
klauss 109:a5b8264ffbbc 1731 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 109:a5b8264ffbbc 1732
klauss 109:a5b8264ffbbc 1733 ptr = NULL;
klauss 109:a5b8264ffbbc 1734
klauss 109:a5b8264ffbbc 1735 VZ_call * call = __find_Call__( v_call, print_hex_this_rtp );
klauss 109:a5b8264ffbbc 1736
klauss 109:a5b8264ffbbc 1737 uint8_t * ptr = NULL;
klauss 109:a5b8264ffbbc 1738 if( call != NULL )
klauss 109:a5b8264ffbbc 1739 {
klauss 109:a5b8264ffbbc 1740 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 109:a5b8264ffbbc 1741 }
klauss 109:a5b8264ffbbc 1742
klauss 109:a5b8264ffbbc 1743 if ( ptr != NULL )
klauss 109:a5b8264ffbbc 1744 {
klauss 109:a5b8264ffbbc 1745 bool finished = false;
klauss 109:a5b8264ffbbc 1746 volatile int i = 0;
klauss 109:a5b8264ffbbc 1747 int count = 0;
klauss 109:a5b8264ffbbc 1748 Timer dont_overwrite_tcp_buffer;
klauss 109:a5b8264ffbbc 1749 dont_overwrite_tcp_buffer.reset ();
klauss 109:a5b8264ffbbc 1750 dont_overwrite_tcp_buffer.start ();
klauss 109:a5b8264ffbbc 1751
klauss 109:a5b8264ffbbc 1752 while ( !finished )
klauss 109:a5b8264ffbbc 1753 {
klauss 109:a5b8264ffbbc 1754 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 109:a5b8264ffbbc 1755 {
klauss 109:a5b8264ffbbc 1756 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1757 for ( ; i < sizeof( RTP ); i++ )
klauss 109:a5b8264ffbbc 1758 {
klauss 109:a5b8264ffbbc 1759 char tmp[ 16 ];
klauss 109:a5b8264ffbbc 1760 sprintf( tmp, "%x ", *ptr++ );
klauss 109:a5b8264ffbbc 1761 strcat( aux, tmp );
klauss 109:a5b8264ffbbc 1762 count++;
klauss 109:a5b8264ffbbc 1763
klauss 109:a5b8264ffbbc 1764 if ( count >= 32 )
klauss 109:a5b8264ffbbc 1765 {
klauss 109:a5b8264ffbbc 1766 count = 0;
klauss 109:a5b8264ffbbc 1767 i++;
klauss 109:a5b8264ffbbc 1768 break;
klauss 109:a5b8264ffbbc 1769 }
klauss 109:a5b8264ffbbc 1770 }
klauss 109:a5b8264ffbbc 1771 strcat ( aux, "\n\r\0" );
klauss 109:a5b8264ffbbc 1772 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 109:a5b8264ffbbc 1773 if ( i >= sizeof ( RTP ) ) finished = true;
klauss 109:a5b8264ffbbc 1774 strcpy ( aux, "\0" );
klauss 109:a5b8264ffbbc 1775 }
klauss 109:a5b8264ffbbc 1776 }
klauss 109:a5b8264ffbbc 1777 dont_overwrite_tcp_buffer.reset();
klauss 109:a5b8264ffbbc 1778 dont_overwrite_tcp_buffer.stop();
klauss 109:a5b8264ffbbc 1779 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 109:a5b8264ffbbc 1780 }
klauss 109:a5b8264ffbbc 1781 }
klauss 109:a5b8264ffbbc 1782 }
klauss 109:a5b8264ffbbc 1783 else
klauss 109:a5b8264ffbbc 1784 {
klauss 109:a5b8264ffbbc 1785 if( print_values )
klauss 109:a5b8264ffbbc 1786 {
klauss 109:a5b8264ffbbc 1787 debug_msg("Call %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1788 }
klauss 109:a5b8264ffbbc 1789 else
klauss 109:a5b8264ffbbc 1790 {
klauss 109:a5b8264ffbbc 1791 send_msg("Call %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1792 }
klauss 109:a5b8264ffbbc 1793 }
klauss 109:a5b8264ffbbc 1794 }
klauss 109:a5b8264ffbbc 1795
klauss 109:a5b8264ffbbc 1796 if ( print_rtp_var )
klauss 109:a5b8264ffbbc 1797 {
klauss 109:a5b8264ffbbc 1798 print_rtp_var = false;
klauss 109:a5b8264ffbbc 1799 VZ_call * call = __find_Call__( v_call, print_this_rtp );
klauss 109:a5b8264ffbbc 1800 if ( call != NULL )
klauss 109:a5b8264ffbbc 1801 {
klauss 109:a5b8264ffbbc 1802 if ( call -> check_rtp () != NULL )
klauss 109:a5b8264ffbbc 1803 {
klauss 109:a5b8264ffbbc 1804 send_msg ("Values :: %p\r\n", ( void *) call -> check_rtp () );
klauss 109:a5b8264ffbbc 1805 call -> rtp_print_yourself ();
klauss 109:a5b8264ffbbc 1806 }
klauss 109:a5b8264ffbbc 1807 else
klauss 109:a5b8264ffbbc 1808 {
klauss 109:a5b8264ffbbc 1809 if( print_values )
klauss 109:a5b8264ffbbc 1810 {
klauss 109:a5b8264ffbbc 1811 debug_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1812 }
klauss 109:a5b8264ffbbc 1813 else
klauss 109:a5b8264ffbbc 1814 {
klauss 109:a5b8264ffbbc 1815 send_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1816 }
klauss 109:a5b8264ffbbc 1817 }
klauss 109:a5b8264ffbbc 1818 }
klauss 109:a5b8264ffbbc 1819 else
klauss 109:a5b8264ffbbc 1820 {
klauss 109:a5b8264ffbbc 1821 if( print_values )
klauss 109:a5b8264ffbbc 1822 {
klauss 109:a5b8264ffbbc 1823 debug_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1824 }
klauss 109:a5b8264ffbbc 1825 else
klauss 109:a5b8264ffbbc 1826 {
klauss 109:a5b8264ffbbc 1827 send_msg("Call->RTP %d not found", print_this_rtp );
klauss 109:a5b8264ffbbc 1828 }
klauss 109:a5b8264ffbbc 1829 }
klauss 109:a5b8264ffbbc 1830 }
klauss 109:a5b8264ffbbc 1831
klauss 113:db67ae00550e 1832 //end debug print
klauss 91:c2a86b1f8aaa 1833
klauss 113:db67ae00550e 1834 // zera os contadores de cks de pacotes recebidos na interface CBx->Header, e outros contadores relacionados
klauss 91:c2a86b1f8aaa 1835 if( reset_cks == true ) {
klauss 81:3656f00ab3db 1836 pkg_cksok = 0;
klauss 81:3656f00ab3db 1837 pkg_ckserr = 0;
klauss 99:e80850c51106 1838 pkg_zero = 0;
klauss 81:3656f00ab3db 1839 reset_cks = false;
klauss 99:e80850c51106 1840 out_of_range = 0;
klauss 99:e80850c51106 1841 missed_pkg = 0;
klauss 100:09a23fcd3bdf 1842 delayed_pkg_to_cb = 0;
klauss 99:e80850c51106 1843 cpld_pkg_tx_counter = 0;
klauss 99:e80850c51106 1844 cpld_pkg_rx_counter = 0;
klauss 81:3656f00ab3db 1845 pcks_s = true;
klauss 81:3656f00ab3db 1846 }
klauss 91:c2a86b1f8aaa 1847
klauss 113:db67ae00550e 1848 // exibe os contadores de cks de pacotes recebidos na interface CBx->Header, e outros contadores relacionados
klauss 91:c2a86b1f8aaa 1849 if( pcks_s == true ) {
klauss 113:db67ae00550e 1850 send_msg(
klauss 113:db67ae00550e 1851 "\r\n"
klauss 113:db67ae00550e 1852 " PKG_CKS OK: %d ( %003.2f )\r\n"
klauss 113:db67ae00550e 1853 " PKG_CKS ERR: %d ( %003.2f )\r\n"
klauss 113:db67ae00550e 1854 " PKG_0: %d ( %003.2f )\r\n"
klauss 113:db67ae00550e 1855 " Out_of_range: %d ( %003.2f )\r\n"
klauss 113:db67ae00550e 1856 " Miss_Pkg: %d\r\n"
klauss 113:db67ae00550e 1857 " TX_delayed: %d\n\r"
klauss 113:db67ae00550e 1858 " TX_Counter: %d\n\r"
klauss 113:db67ae00550e 1859 " RX_Counter: %d\r\n",
klauss 113:db67ae00550e 1860 pkg_cksok, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_cksok / cpld_pkg_rx_counter ) * 100,
klauss 113:db67ae00550e 1861 pkg_ckserr, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_ckserr / cpld_pkg_rx_counter ) * 100,
klauss 113:db67ae00550e 1862 pkg_zero, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_zero / cpld_pkg_rx_counter ) * 100,
klauss 113:db67ae00550e 1863 out_of_range, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) out_of_range / cpld_pkg_rx_counter ) * 100,
klauss 113:db67ae00550e 1864 missed_pkg,
klauss 113:db67ae00550e 1865 delayed_pkg_to_cb,
klauss 113:db67ae00550e 1866 cpld_pkg_tx_counter,
klauss 113:db67ae00550e 1867 cpld_pkg_rx_counter
klauss 113:db67ae00550e 1868 );
klauss 81:3656f00ab3db 1869 pcks_s = false;
klauss 81:3656f00ab3db 1870 }
klauss 113:db67ae00550e 1871
klauss 113:db67ae00550e 1872 // zera os contadores de pacotes que resultaram em falha de envio vio ETH
klauss 113:db67ae00550e 1873 if( reset_missed_send_udp_pkg ){
klauss 113:db67ae00550e 1874 miss_fw_send_pkg = 0;
klauss 113:db67ae00550e 1875 miss_prompt_udp_send_pkg = 0;
klauss 113:db67ae00550e 1876 miss_sip_registry_send_pkg = 0;
klauss 113:db67ae00550e 1877 miss_sip_invite_send_pkg = 0;
klauss 113:db67ae00550e 1878 miss_sip_bye_send_pkg = 0;
klauss 113:db67ae00550e 1879 miss_sip_unregistry_send_pkg = 0;
klauss 113:db67ae00550e 1880 miss_sip_ok_send_pkg = 0;
klauss 113:db67ae00550e 1881 miss_sip_rcv_bye_send_pkg = 0;
klauss 113:db67ae00550e 1882 miss_wdt_send_pkg = 0;
klauss 113:db67ae00550e 1883 miss_prompt_udp_send_pkg = 0;
klauss 113:db67ae00550e 1884 miss_ftp_udp_send_pkg = 0;
klauss 113:db67ae00550e 1885 miss_prompt_udp_rcv_pkg = 0;
klauss 113:db67ae00550e 1886 reset_missed_send_udp_pkg = false;
klauss 113:db67ae00550e 1887 missed_send_udp_pkg = true;
klauss 113:db67ae00550e 1888 }
klauss 113:db67ae00550e 1889
klauss 113:db67ae00550e 1890
klauss 113:db67ae00550e 1891
klauss 113:db67ae00550e 1892 // exibe estatisticas de pacotes que resultaram em falha de envio na interface ETH
klauss 113:db67ae00550e 1893 if( missed_send_udp_pkg )
klauss 113:db67ae00550e 1894 {
klauss 113:db67ae00550e 1895 send_msg( "\r\nMissed pkgs ::\r\n "
klauss 113:db67ae00550e 1896 "FW: %d\r\n "
klauss 113:db67ae00550e 1897 "Prompt UDP %d\r\n "
klauss 113:db67ae00550e 1898 "Registry %d\r\n "
klauss 113:db67ae00550e 1899 "Invite %d\r\n "
klauss 113:db67ae00550e 1900 "Bye %d\r\n "
klauss 113:db67ae00550e 1901 "Unregistry %d\r\n "
klauss 113:db67ae00550e 1902 "UDP incoming ( invite ans ) %d\r\n "
klauss 113:db67ae00550e 1903 "UDP incoming ( bye from * ) %d\r\n "
klauss 113:db67ae00550e 1904 "Wdt [ alive | rst ] %d\r\n "
klauss 113:db67ae00550e 1905 "Rcv prompt %d\r\n "
klauss 113:db67ae00550e 1906 "[ debug | send ]_msg %d\r\n "
klauss 113:db67ae00550e 1907 "RTP %d\r\n",
klauss 113:db67ae00550e 1908 miss_fw_send_pkg,
klauss 113:db67ae00550e 1909 miss_prompt_udp_send_pkg,
klauss 113:db67ae00550e 1910 miss_sip_registry_send_pkg,
klauss 113:db67ae00550e 1911 miss_sip_invite_send_pkg,
klauss 113:db67ae00550e 1912 miss_sip_bye_send_pkg,
klauss 113:db67ae00550e 1913 miss_sip_unregistry_send_pkg,
klauss 113:db67ae00550e 1914 miss_sip_ok_send_pkg,
klauss 113:db67ae00550e 1915 miss_sip_rcv_bye_send_pkg,
klauss 113:db67ae00550e 1916 miss_wdt_send_pkg,
klauss 113:db67ae00550e 1917 miss_prompt_udp_send_pkg,
klauss 113:db67ae00550e 1918 miss_prompt_udp_rcv_pkg,
klauss 113:db67ae00550e 1919 miss_ftp_udp_send_pkg
klauss 113:db67ae00550e 1920 );
klauss 113:db67ae00550e 1921
klauss 113:db67ae00550e 1922 missed_send_udp_pkg = false;
klauss 113:db67ae00550e 1923 }
klauss 113:db67ae00550e 1924
klauss 113:db67ae00550e 1925
klauss 113:db67ae00550e 1926 // rotina de teste para sobrecarga do processamento do cbx.
klauss 100:09a23fcd3bdf 1927 if( flood_bug_pkg ){
klauss 100:09a23fcd3bdf 1928 static int id = 0x10;
klauss 100:09a23fcd3bdf 1929 if( id < 10 ) id = 0x0b;
klauss 113:db67ae00550e 1930 send2callboxes( build_cb_package( 5828, 5123, __REGISTRY__,
klauss 113:db67ae00550e 1931 ( char * )buffer, id++, CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 100:09a23fcd3bdf 1932 }
klauss 100:09a23fcd3bdf 1933
klauss 113:db67ae00550e 1934 // toggle nos leds de debug da header.
klauss 113:db67ae00550e 1935 if( led_sync_timer.read() >= 1 ) {
klauss 78:1353744f01e1 1936 led_sync_timer.reset();
klauss 78:1353744f01e1 1937 led3 = !led3;
klauss 78:1353744f01e1 1938 CAB_LED = !CAB_LED;
klauss 78:1353744f01e1 1939 }
klauss 113:db67ae00550e 1940
klauss 113:db67ae00550e 1941 // rotina de teste ( usados durante desenvolvimento
klauss 113:db67ae00550e 1942 if( main_test )
klauss 113:db67ae00550e 1943 {
klauss 113:db67ae00550e 1944 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 108:18a3702650f3 1945 {
klauss 113:db67ae00550e 1946 Call_Box * cb = (Call_Box *) v_cb->get_element (i);
klauss 113:db67ae00550e 1947 if( ( cb != NULL ) && ( cb -> get_ext () == 5000 ) )
klauss 113:db67ae00550e 1948 {
klauss 113:db67ae00550e 1949 main_test = false;
klauss 113:db67ae00550e 1950 cb -> init_rtp_timer ();
klauss 113:db67ae00550e 1951 }
klauss 113:db67ae00550e 1952 }
klauss 105:a930035b6556 1953 }
klauss 113:db67ae00550e 1954
klauss 113:db67ae00550e 1955 // begin switch para tratemento de pacote baseado no type
klauss 91:c2a86b1f8aaa 1956 switch( type ) {
klauss 91:c2a86b1f8aaa 1957 case __DO_NOTHING__ :
klauss 91:c2a86b1f8aaa 1958 {}
klauss 91:c2a86b1f8aaa 1959 break;
klauss 91:c2a86b1f8aaa 1960
klauss 0:4d17cd9c8f9d 1961 case __CB_BYE__ : {
klauss 113:db67ae00550e 1962 /***
klauss 113:db67ae00550e 1963 end call
klauss 113:db67ae00550e 1964 -- Fluxo --
klauss 113:db67ae00550e 1965 [ Principio ]
klauss 113:db67ae00550e 1966 -- Receber um pedido de bye
klauss 113:db67ae00550e 1967 -- procurar e encerrar a ligacao
klauss 113:db67ae00550e 1968
klauss 113:db67ae00550e 1969 - Incrementa o contador de pacotes recebidos
klauss 113:db67ae00550e 1970 - Procura por este cbx no vetor logico de CBx.
klauss 113:db67ae00550e 1971 - Em caso de nao localizacao - Nao executa tratamento e exibe mensagem informando, caso seja habilitado degub
klauss 113:db67ae00550e 1972 - Em caso de localizacao do cbx
klauss 113:db67ae00550e 1973 - Seta o BIT7 para ACK
klauss 113:db67ae00550e 1974 - assume que esta ligacao já foi removida
klauss 113:db67ae00550e 1975 - procura por essa call no vetor logico de calls
klauss 113:db67ae00550e 1976 - Em caso de nao localizacao
klauss 113:db67ae00550e 1977 - Executa Busca no vetor logico de CBX
klauss 113:db67ae00550e 1978 - Em caso de localizacao
klauss 113:db67ae00550e 1979 - assume que esta ligacao já foi removida
klauss 113:db67ae00550e 1980 - Confirma que a ligacao nao tinha sido removida
klauss 113:db67ae00550e 1981 - Envia pacote de BYE para o servidor asterisk ( * )
klauss 113:db67ae00550e 1982 - Recupera o TimeSlice ( ts ) usado nesta call
klauss 113:db67ae00550e 1983 - Atribui o TS 0 neste cbx
klauss 113:db67ae00550e 1984 - Preenche a posição do TS com 0
klauss 113:db67ae00550e 1985 - Retorna o status do CBx e do SIP deste CBx para idle
klauss 113:db67ae00550e 1986 - Remove a call do vetor
klauss 113:db67ae00550e 1987 - Envia pacote de ack para o CBx
klauss 113:db67ae00550e 1988 - Atualiza o id da próxima msg que sera enviada para este CBx
klauss 113:db67ae00550e 1989 - Em caso de nao localizacao
klauss 113:db67ae00550e 1990 Exibe mensagem informando que exta call ja tinha sido removida, caso habilitado debug
klauss 113:db67ae00550e 1991 - Em caso de localizacao
klauss 113:db67ae00550e 1992 - Confirma que a ligacao nao tinha sido removida
klauss 113:db67ae00550e 1993 - Envia pacote de BYE para o servidor asterisk ( * )
klauss 113:db67ae00550e 1994 - Recupera o TimeSlice ( ts ) usado nesta call
klauss 113:db67ae00550e 1995 - Atribui o TS 0 neste cbx
klauss 113:db67ae00550e 1996 - Preenche a posição do TS com 0
klauss 113:db67ae00550e 1997 - Retorna o status do CBx e do SIP deste CBx para idle
klauss 113:db67ae00550e 1998 - Remove a call do vetor
klauss 113:db67ae00550e 1999 - Envia pacote de ack para o CBx
klauss 113:db67ae00550e 2000 - Atualiza o id da próxima msg que sera enviada para este CBx
klauss 113:db67ae00550e 2001 - Deleta o objeto call.
klauss 113:db67ae00550e 2002 - Em caso de nao localizacao
klauss 113:db67ae00550e 2003 Exibe mensagem informando que exta call ja tinha sido removida, caso habilitado debug
klauss 113:db67ae00550e 2004 ***/
klauss 113:db67ae00550e 2005
klauss 63:0d95da692bb4 2006 cb_bye_counter++;
klauss 0:4d17cd9c8f9d 2007 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 2008 if( cb != NULL ) {
klauss 81:3656f00ab3db 2009 if( debug_invite || debug_main ) debug_msg("Received bye pkg with msg_id %d e pkg_id %d", cb->get_msg_id(), data[ 0 ] );
klauss 0:4d17cd9c8f9d 2010 data[ 0 ] |= BIT7;
klauss 0:4d17cd9c8f9d 2011 cb->set_msg_id( data[ 0 ] );
klauss 81:3656f00ab3db 2012 if( debug_main || debug_invite ) debug_msg( "Request bye from CBx " );
klauss 92:92df17f538a8 2013
klauss 81:3656f00ab3db 2014 bool already_removed = true;
klauss 91:c2a86b1f8aaa 2015 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 2016 VZ_call * call = (VZ_call *)v_call->get_element( i );
klauss 91:c2a86b1f8aaa 2017 if( call->get_cb_ext() == ext ) {
klauss 81:3656f00ab3db 2018 already_removed = false;
klauss 4:de46f0d9b14d 2019 cb->send_bye();
klauss 91:c2a86b1f8aaa 2020
klauss 0:4d17cd9c8f9d 2021 ts->return_timeslice( cb->get_timeslice() );
klauss 0:4d17cd9c8f9d 2022 cb->set_timeslice( 0x00 );
klauss 78:1353744f01e1 2023 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 2024
klauss 0:4d17cd9c8f9d 2025 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 2026 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 2027
klauss 81:3656f00ab3db 2028 v_call->remove_element( i );
klauss 91:c2a86b1f8aaa 2029
klauss 113:db67ae00550e 2030 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 113:db67ae00550e 2031 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 2032
klauss 92:92df17f538a8 2033 // envia o ack bye depois atualiza o msg_id
klauss 92:92df17f538a8 2034 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 113:db67ae00550e 2035
klauss 113:db67ae00550e 2036 cb -> set_rtp_port ( 0 );
klauss 113:db67ae00550e 2037
klauss 113:db67ae00550e 2038 cb -> reset_rtp_timer ();
klauss 91:c2a86b1f8aaa 2039
klauss 3:cd9148672e25 2040 delete( call );
klauss 0:4d17cd9c8f9d 2041 }
klauss 0:4d17cd9c8f9d 2042 }
klauss 113:db67ae00550e 2043
klauss 82:f55d13babca0 2044 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from vector call" );
klauss 113:db67ae00550e 2045
klauss 113:db67ae00550e 2046 // ok, mas nem sempre o cbx "entrou" em call
klauss 113:db67ae00550e 2047 // Faz-se agora a busca no vetor logico de CBx e nao no de calls como acima
klauss 82:f55d13babca0 2048 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 2049 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 82:f55d13babca0 2050 if( cb->get_ext() == ext ) {
klauss 82:f55d13babca0 2051 already_removed = true;
klauss 113:db67ae00550e 2052 // nao entra nesse if caso tenha sido removido no for de cima.
klauss 82:f55d13babca0 2053 if( cb->get_status() != cb_idle ) {
klauss 82:f55d13babca0 2054 already_removed = false;
klauss 82:f55d13babca0 2055 cb->send_bye();
klauss 82:f55d13babca0 2056
klauss 82:f55d13babca0 2057 ts->return_timeslice( cb->get_timeslice() );
klauss 82:f55d13babca0 2058 cb->set_timeslice( 0x00 );
klauss 82:f55d13babca0 2059 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 82:f55d13babca0 2060
klauss 82:f55d13babca0 2061 set_status( cb->status, cb_idle );
klauss 82:f55d13babca0 2062 set_status( cb->sip->status, sip_idle );
klauss 82:f55d13babca0 2063
klauss 113:db67ae00550e 2064 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 113:db67ae00550e 2065 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 82:f55d13babca0 2066
klauss 92:92df17f538a8 2067 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 82:f55d13babca0 2068 }
klauss 82:f55d13babca0 2069 }
klauss 82:f55d13babca0 2070 }
klauss 91:c2a86b1f8aaa 2071
klauss 82:f55d13babca0 2072 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from inviting queue" );
klauss 91:c2a86b1f8aaa 2073
klauss 78:1353744f01e1 2074 cb->registry();
klauss 113:db67ae00550e 2075 cb -> set_rtp_port ( 0 );
klauss 113:db67ae00550e 2076 cb -> reset_rtp_timer ();
klauss 91:c2a86b1f8aaa 2077 } else if( debug_invite || debug_main ) debug_msg("Bye from who ? %d", ext );
klauss 91:c2a86b1f8aaa 2078 }
klauss 91:c2a86b1f8aaa 2079 break;
klauss 91:c2a86b1f8aaa 2080
klauss 0:4d17cd9c8f9d 2081 case __INVITE__ : {
klauss 113:db67ae00550e 2082 /***
klauss 113:db67ae00550e 2083 init call
klauss 113:db67ae00550e 2084 [ Principio ]
klauss 113:db67ae00550e 2085 -- Receber um pedido de chamada
klauss 113:db67ae00550e 2086 -- tratar com o cbx o andamento da negociacao SIP ( informando disponibilidade de TS )
klauss 113:db67ae00550e 2087 -- tratar com o * a negociacao SIP
klauss 113:db67ae00550e 2088
klauss 113:db67ae00550e 2089 -- Fluxo --
klauss 113:db67ae00550e 2090 - Incrementa o contador de pacotes de pedido de chamada ( invite ) enviados.
klauss 113:db67ae00550e 2091 - Procura por este CBx no vetor logico de CBX
klauss 113:db67ae00550e 2092 - Em caso de nao localizacao
klauss 113:db67ae00550e 2093 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 113:db67ae00550e 2094 - Tenta criar o objeto CBx
klauss 113:db67ae00550e 2095 - Caso consiga criar : adiciona o novo elemento no vetor logico de CBx
klauss 113:db67ae00550e 2096 - Caso nao consiga criar : Exibe msg de erro condicionada a debuf e seta variavel indicando ausencia de memoria
klauss 113:db67ae00550e 2097 - Em caso de localizacao ( ou tenha conseguido criar no caso acima )
klauss 113:db67ae00550e 2098 - Atribui o valor recebido no pacote na posicao ID como sendo o id da proxima msg
klauss 113:db67ae00550e 2099 - Verifica o status do CBx
klauss 113:db67ae00550e 2100 - Caso status idle, inicia timer de tratamento de envio de ACK pro CBx
klauss 113:db67ae00550e 2101 - Invoca rotina de tratamento SIP deste pedido de chamada.
klauss 113:db67ae00550e 2102 ***/
klauss 113:db67ae00550e 2103
klauss 63:0d95da692bb4 2104 invite_counter++;
klauss 113:db67ae00550e 2105 if( debug_invite ) debug_msg("Invite request from Cbx %i", ext);
klauss 0:4d17cd9c8f9d 2106 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 2107 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 2108 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 2109 if( debug_main ) debug_msg( "Adding CBx :: %i", ext );
klauss 91:c2a86b1f8aaa 2110 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 2111
klauss 91:c2a86b1f8aaa 2112 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 2113 memory_is_over = true;
klauss 91:c2a86b1f8aaa 2114 if( debug_memory ) debug_msg("Invite allocation cb fail");
klauss 91:c2a86b1f8aaa 2115 } else {
klauss 91:c2a86b1f8aaa 2116 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 2117 }
klauss 89:0fe315117b00 2118 }
klauss 0:4d17cd9c8f9d 2119 }
klauss 91:c2a86b1f8aaa 2120 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 2121 cb->set_msg_id( data[ 0 ] );
klauss 92:92df17f538a8 2122 if( cb->status == cb_idle ){
klauss 92:92df17f538a8 2123 cb->set_invite_response_ok();
klauss 92:92df17f538a8 2124 cb->invite_retry_count_reset();
klauss 113:db67ae00550e 2125 cb -> reset_rtp_timer ();
klauss 113:db67ae00550e 2126 cb -> init_rtp_timer ();
klauss 92:92df17f538a8 2127 }
klauss 87:679ee0d594a9 2128 invite_handler( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 2129 }
klauss 91:c2a86b1f8aaa 2130 }
klauss 91:c2a86b1f8aaa 2131 break;
klauss 4:de46f0d9b14d 2132 case __REGISTRY__ : {
klauss 113:db67ae00550e 2133 /***
klauss 113:db67ae00550e 2134 [ Principio ]
klauss 113:db67ae00550e 2135 -- Receber um pacote de registro
klauss 113:db67ae00550e 2136 -- Encaminhar para o *
klauss 113:db67ae00550e 2137
klauss 113:db67ae00550e 2138 -- Fluxo --
klauss 113:db67ae00550e 2139 - incrementa o contador de pacotes de registro recebidos
klauss 113:db67ae00550e 2140 - Procura por este cbx no vetor logico de CBx.
klauss 113:db67ae00550e 2141 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 113:db67ae00550e 2142 - Caso nao exista
klauss 113:db67ae00550e 2143 - Verifica se o CBx foi encontrado no vetor
klauss 113:db67ae00550e 2144 - Caso nao tenha sido
klauss 113:db67ae00550e 2145 - Tentar criar este elemento
klauss 113:db67ae00550e 2146 - Verifica criacao bem sucedida
klauss 113:db67ae00550e 2147 - Caso tenha criado o elemento
klauss 113:db67ae00550e 2148 - Adiciona o mesmo no vetor logico de CBX
klauss 113:db67ae00550e 2149 - Caso nao tenha criado o elemento
klauss 113:db67ae00550e 2150 - seta variavel de erro
klauss 113:db67ae00550e 2151 - exibe mensagem de erro condicionada a debug.
klauss 113:db67ae00550e 2152 - Caso o CBx tenha sido encontrado ( ou criado acima )
klauss 113:db67ae00550e 2153 - Envia pacote de registro para o *
klauss 113:db67ae00550e 2154 ***/
klauss 63:0d95da692bb4 2155 registry_counter++;
klauss 78:1353744f01e1 2156 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 2157 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 2158 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 2159 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 91:c2a86b1f8aaa 2160 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 2161
klauss 91:c2a86b1f8aaa 2162 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 2163 memory_is_over = true;
klauss 91:c2a86b1f8aaa 2164 if( debug_memory ) debug_msg("Registry cb allocation fail");
klauss 91:c2a86b1f8aaa 2165 } else {
klauss 91:c2a86b1f8aaa 2166 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 2167 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 91:c2a86b1f8aaa 2168 }
klauss 87:679ee0d594a9 2169 }
klauss 0:4d17cd9c8f9d 2170 }
klauss 78:1353744f01e1 2171 if( debug_main ) debug_msg("Registered %d - %d", ext, port );
klauss 91:c2a86b1f8aaa 2172
klauss 87:679ee0d594a9 2173 if( cb != NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 2174 }
klauss 91:c2a86b1f8aaa 2175 break;
klauss 4:de46f0d9b14d 2176 case __BOOT__ : {
klauss 113:db67ae00550e 2177 /***
klauss 113:db67ae00550e 2178 [ Principio ]
klauss 113:db67ae00550e 2179 -- Receber um pacote de boot do CBx
klauss 113:db67ae00550e 2180 -- Encaminhar um pacote do tipo "Registro" para o CBx
klauss 113:db67ae00550e 2181 [ NOTA ] Por decisao de projeto, o CBx responde pacotes do tipo __REGISTRY__ pendindo pra se registrar.
klauss 113:db67ae00550e 2182
klauss 113:db67ae00550e 2183 -- Fluxo --
klauss 113:db67ae00550e 2184 - Incrementa o contador de pacotes de boot recebidos
klauss 113:db67ae00550e 2185 - Envia para o CBx remetendo o mesmo pacote, contendo o tipo __REGISTRY__ e o id como sendo o id recebido "OR" BIT7
klauss 113:db67ae00550e 2186
klauss 113:db67ae00550e 2187 ***/
klauss 63:0d95da692bb4 2188 boot_counter++;
klauss 99:e80850c51106 2189 if( debug_boot == true ){
klauss 99:e80850c51106 2190 send_msg("Rcv boot pkg from (%d, %d) pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 2191 }
klauss 113:db67ae00550e 2192 send2callboxes( build_cb_package( ext, port, __REGISTRY__,
klauss 113:db67ae00550e 2193 ( char * )data, data[ 0 ] | BIT7, CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 2194 }
klauss 91:c2a86b1f8aaa 2195 break;
klauss 99:e80850c51106 2196
klauss 99:e80850c51106 2197 case __FW__ : {
klauss 113:db67ae00550e 2198 /***
klauss 113:db67ae00550e 2199 [ Principio ]
klauss 113:db67ae00550e 2200 -- Encaminhar para o servidor predeterminado todo pacote do tipo __FW__
klauss 113:db67ae00550e 2201
klauss 113:db67ae00550e 2202 -- Fluxo --
klauss 113:db67ae00550e 2203 - Incrementa o contador de pacotes de __FW__ recebidos
klauss 113:db67ae00550e 2204 - invoca rotina que exporta este pacote para o servidor
klauss 113:db67ae00550e 2205 ***/
klauss 113:db67ae00550e 2206 fw_counter++;
klauss 99:e80850c51106 2207 if( debug_fw_print ) send_msg("::FW pkg from %d - %d::", ext, port );
klauss 99:e80850c51106 2208 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 2209 }
klauss 99:e80850c51106 2210 break;
klauss 91:c2a86b1f8aaa 2211
klauss 113:db67ae00550e 2212 case __BL__ : {
klauss 113:db67ae00550e 2213 /***
klauss 113:db67ae00550e 2214 [ Principio ]
klauss 113:db67ae00550e 2215 -- A definir, a priori a header seria um bypass responsavel apenas por gerenciar um TS.
klauss 113:db67ae00550e 2216 -- Fluxo --
klauss 113:db67ae00550e 2217 - incrementa o contador de pacote de bootloader CBx recebidos
klauss 113:db67ae00550e 2218 - ???
klauss 113:db67ae00550e 2219 ***/
klauss 67:cdedc64d9921 2220 bootloader_cbx_counter++;
klauss 91:c2a86b1f8aaa 2221 }
klauss 91:c2a86b1f8aaa 2222 break;
klauss 91:c2a86b1f8aaa 2223
klauss 113:db67ae00550e 2224 case __PROMPT__ : {
klauss 113:db67ae00550e 2225 /***
klauss 113:db67ae00550e 2226 [ Principio ]
klauss 113:db67ae00550e 2227 -- Receber um pacote do CBx
klauss 113:db67ae00550e 2228 -- Criar, adicionar e registrar o CBx remetente
klauss 113:db67ae00550e 2229 -- Exibir na tela possiveis comandos/saidas do CBx de interesse.
klauss 113:db67ae00550e 2230 -- Fluxo --
klauss 113:db67ae00550e 2231 - Procura por este cbx no vetor logico de CBx.
klauss 113:db67ae00550e 2232 - Verifica se o CBx foi encontrado no vetor
klauss 113:db67ae00550e 2233 - Caso nao tenha sido encontrado
klauss 113:db67ae00550e 2234 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 113:db67ae00550e 2235 - Caso nao exista
klauss 113:db67ae00550e 2236 - Tentar criar este elemento
klauss 113:db67ae00550e 2237 - Verifica criacao bem sucedida
klauss 113:db67ae00550e 2238 - Caso nao tenha criado o elemento
klauss 113:db67ae00550e 2239 - seta variavel de erro
klauss 113:db67ae00550e 2240 - Caso tenha criado o elemento
klauss 113:db67ae00550e 2241 - Adiciona o mesmo no vetor logico de CBX
klauss 113:db67ae00550e 2242 - Caso tenha sido encontrado ( ou criado no caso acima )
klauss 113:db67ae00550e 2243 - Encaminha pedido de registro para o *
klauss 113:db67ae00550e 2244 - Verifica se o pacote recebido possui como conteudo "ping"
klauss 113:db67ae00550e 2245 - em caso positivo
klauss 113:db67ae00550e 2246 - exibe msg indicativa condicionada a debug
klauss 113:db67ae00550e 2247 - em caso negativo
klauss 113:db67ae00550e 2248 - Incrementa o contador de pacotes recebidos
klauss 113:db67ae00550e 2249 - Exibe conteudo de pacote ( 32 primeiros bytes ) condicionado a debug
klauss 113:db67ae00550e 2250 ***/
klauss 113:db67ae00550e 2251
klauss 78:1353744f01e1 2252 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 2253
klauss 91:c2a86b1f8aaa 2254 if( cb == NULL ) {
klauss 113:db67ae00550e 2255 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 113:db67ae00550e 2256 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 113:db67ae00550e 2257 cb = new Call_Box( ext, port );
klauss 113:db67ae00550e 2258 if( cb == NULL ) {
klauss 113:db67ae00550e 2259 memory_is_over = true;
klauss 113:db67ae00550e 2260 } else {
klauss 113:db67ae00550e 2261 v_cb->add( cb );
klauss 113:db67ae00550e 2262 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 113:db67ae00550e 2263 }
klauss 87:679ee0d594a9 2264 }
klauss 48:195c97f12e8e 2265 }
klauss 91:c2a86b1f8aaa 2266
klauss 92:92df17f538a8 2267 if( cb!= NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 2268
klauss 91:c2a86b1f8aaa 2269 if( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) {
klauss 78:1353744f01e1 2270 if( debug_ping ) send_msg( "Prompt pkg from ( %i, %i ) :: Ping", ext, port );
klauss 91:c2a86b1f8aaa 2271 } else {
klauss 78:1353744f01e1 2272 prompt_counter++;
klauss 113:db67ae00550e 2273 //FIXME acumular a string e mandar via send_msg
klauss 78:1353744f01e1 2274 send_msg( "Prompt pkg from ( %i, %i ) ::", ext, port );
klauss 91:c2a86b1f8aaa 2275 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 2276 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 2277 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 2278 }
klauss 100:09a23fcd3bdf 2279 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 2280
klauss 113:db67ae00550e 2281 if( tcp_session && !udp_query ) {
klauss 113:db67ae00550e 2282 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 113:db67ae00550e 2283 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 78:1353744f01e1 2284 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 2285 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 2286 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 2287 }
klauss 113:db67ae00550e 2288 else if( udp_query )
klauss 113:db67ae00550e 2289 {
klauss 113:db67ae00550e 2290 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 113:db67ae00550e 2291 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 113:db67ae00550e 2292 strcat( aux, "\n\r\0" );
klauss 113:db67ae00550e 2293 udp_query_send_msg( ( char *)data );
klauss 113:db67ae00550e 2294 udp_query_send_msg( "\r\n> " );
klauss 113:db67ae00550e 2295 }
klauss 48:195c97f12e8e 2296 }
klauss 91:c2a86b1f8aaa 2297 }
klauss 91:c2a86b1f8aaa 2298 break;
klauss 0:4d17cd9c8f9d 2299 case __AUDIO__ : {
klauss 113:db67ae00550e 2300 /***
klauss 113:db67ae00550e 2301 [ Principio ]
klauss 113:db67ae00550e 2302 -- Receber pacote de audio do CBx
klauss 113:db67ae00550e 2303 -- Encaminhar para o *
klauss 113:db67ae00550e 2304 -- Fluxo --
klauss 113:db67ae00550e 2305 - Incrementa o contador de pacotes recebidos
klauss 113:db67ae00550e 2306 - Procura por este cbx no vetor logico de calls.
klauss 113:db67ae00550e 2307 - Caso nao encontre
klauss 113:db67ae00550e 2308 - Exibe mensagem de erro condicionada a debug
klauss 113:db67ae00550e 2309 - Caso encontre
klauss 113:db67ae00550e 2310 - Encaminha o pacote para o servidor
klauss 113:db67ae00550e 2311 - Reseta o timer de idle desta ligacao
klauss 113:db67ae00550e 2312 - Busca pelo CBX no vetor logico de CBx
klauss 113:db67ae00550e 2313 - Caso encontre
klauss 113:db67ae00550e 2314 - Informa que esta tendo comunicacao CBx->Header
klauss 113:db67ae00550e 2315 ***/
klauss 63:0d95da692bb4 2316 audio_counter++;
klauss 78:1353744f01e1 2317 VZ_call * call = __find_Call__( v_call, ext );
klauss 91:c2a86b1f8aaa 2318 if( call != NULL ) {
klauss 113:db67ae00550e 2319 // Por definicao de projeto, os dados de audio comecam no data + 2
klauss 113:db67ae00550e 2320 // esses 2 bytes foram usados para id de debug durante o desenvolvimento
klauss 113:db67ae00550e 2321 char * pkg = call->build_eth_package( data + 2 );
klauss 113:db67ae00550e 2322 call->send_message( pkg );
klauss 113:db67ae00550e 2323 call->cbx_pkg_idle_timer_reset();
klauss 113:db67ae00550e 2324 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 113:db67ae00550e 2325 if( cb != NULL ){
klauss 113:db67ae00550e 2326 cb->set_invite_response_ok();
klauss 113:db67ae00550e 2327 cb->invite_retry_count_reset();
klauss 113:db67ae00550e 2328 }
klauss 91:c2a86b1f8aaa 2329 } else {
klauss 78:1353744f01e1 2330 if( debug_main ) debug_msg("received missed package from CBx :: %i", ext );
klauss 0:4d17cd9c8f9d 2331 }
klauss 91:c2a86b1f8aaa 2332 }
klauss 91:c2a86b1f8aaa 2333 break;
klauss 113:db67ae00550e 2334 }//end switch para tratemento de pacote baseado no type
klauss 105:a930035b6556 2335
klauss 99:e80850c51106 2336 { // rajada
klauss 112:6ae726539ab9 2337 if( invite_retry_timer.read_ms() > 30 )
klauss 112:6ae726539ab9 2338 {
klauss 99:e80850c51106 2339 invite_retry_timer.reset();
klauss 99:e80850c51106 2340
klauss 112:6ae726539ab9 2341 static int retry_invite_pkg = 0;
klauss 112:6ae726539ab9 2342 bool need_retry = false;
klauss 112:6ae726539ab9 2343 Call_Box * cb = NULL;
klauss 112:6ae726539ab9 2344
klauss 112:6ae726539ab9 2345 for ( register int i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 2346 {
klauss 112:6ae726539ab9 2347 retry_invite_pkg++;
klauss 112:6ae726539ab9 2348 if ( retry_invite_pkg >= v_cb->size() ) retry_invite_pkg = 0;
klauss 112:6ae726539ab9 2349
klauss 112:6ae726539ab9 2350 cb = (Call_Box * )v_cb->get_element( i );
klauss 112:6ae726539ab9 2351 if ( cb != NULL )
klauss 112:6ae726539ab9 2352 {
klauss 112:6ae726539ab9 2353 if ( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) )
klauss 112:6ae726539ab9 2354 {
klauss 112:6ae726539ab9 2355 need_retry = true;
klauss 99:e80850c51106 2356 break;
klauss 99:e80850c51106 2357 }
klauss 92:92df17f538a8 2358 }
klauss 99:e80850c51106 2359 }
klauss 109:a5b8264ffbbc 2360
klauss 112:6ae726539ab9 2361 if ( need_retry )
klauss 112:6ae726539ab9 2362 {
klauss 112:6ae726539ab9 2363 if( cb->get_invite_response() == false )
klauss 112:6ae726539ab9 2364 {
klauss 112:6ae726539ab9 2365 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 2366
klauss 112:6ae726539ab9 2367 buffer[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
klauss 112:6ae726539ab9 2368
klauss 113:db67ae00550e 2369 send2callboxes( build_cb_package( cb->get_ext(), cb->get_port(), __INVITE__, ( char * )buffer,
klauss 113:db67ae00550e 2370 cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 109:a5b8264ffbbc 2371
klauss 112:6ae726539ab9 2372 if( debug_invite ) debug_msg("resend invite OK to Cbx : ( %d, %d )", cb->get_ext(), cb->get_port() );
klauss 112:6ae726539ab9 2373 }
klauss 112:6ae726539ab9 2374
klauss 112:6ae726539ab9 2375 if( cb->get_invite_retry_count() == 0 )
klauss 112:6ae726539ab9 2376 {
klauss 112:6ae726539ab9 2377 cb->send_bye();
klauss 92:92df17f538a8 2378
klauss 112:6ae726539ab9 2379 ts->return_timeslice( cb->get_timeslice() );
klauss 112:6ae726539ab9 2380 cb->set_timeslice( 0x00 );
klauss 99:e80850c51106 2381
klauss 112:6ae726539ab9 2382 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 2383
klauss 112:6ae726539ab9 2384 for( register uint8_t i = 0; i < v_call->size(); i++ )
klauss 112:6ae726539ab9 2385 {
klauss 112:6ae726539ab9 2386 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 112:6ae726539ab9 2387 if( call->get_cb_ext() == cb->get_ext() )
klauss 112:6ae726539ab9 2388 {
klauss 112:6ae726539ab9 2389 v_call->remove_element( i );
klauss 112:6ae726539ab9 2390 if( call != NULL ) delete( call );
klauss 112:6ae726539ab9 2391 break;
klauss 92:92df17f538a8 2392 }
klauss 112:6ae726539ab9 2393 }
klauss 99:e80850c51106 2394
klauss 112:6ae726539ab9 2395 if( debug_invite ) debug_msg( "-- No audio pkgs --" );
klauss 112:6ae726539ab9 2396 set_status( cb->status, cb_idle );
klauss 112:6ae726539ab9 2397 set_status( cb->sip->status, sip_idle );
klauss 92:92df17f538a8 2398 }
klauss 92:92df17f538a8 2399 }
klauss 112:6ae726539ab9 2400 }
klauss 113:db67ae00550e 2401 } // fim rajada
klauss 113:db67ae00550e 2402
klauss 113:db67ae00550e 2403 /***
klauss 113:db67ae00550e 2404 [ Principio ]
klauss 113:db67ae00550e 2405 -- Para cada CBx em ligaçao
klauss 113:db67ae00550e 2406 -- Verificar e encaminhar pacotes recebidos da interface ETH-Header-CBx
klauss 113:db67ae00550e 2407 -- Fluxo --
klauss 113:db67ae00550e 2408 - Para cada elemento do vetor call
klauss 113:db67ae00550e 2409 - Verificar se consta algo pendente para processamento no sentido ETH->Header->Cbx
klauss 113:db67ae00550e 2410 - Caso existe
klauss 113:db67ae00550e 2411 - Procurar por este CBx no vetor lógico de CBx
klauss 113:db67ae00550e 2412 - Caso seja encontrado
klauss 113:db67ae00550e 2413 - Enviar pacote recebido para este CBx
klauss 113:db67ae00550e 2414 - Caso nao seja encontrado
klauss 113:db67ae00550e 2415 - Exibe msg de erro condicionado a debug
klauss 113:db67ae00550e 2416 ***/
klauss 113:db67ae00550e 2417
klauss 91:c2a86b1f8aaa 2418 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 2419 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 113:db67ae00550e 2420 if ( call != NULL )
klauss 113:db67ae00550e 2421 {
klauss 113:db67ae00550e 2422 int length = 0;
klauss 113:db67ae00550e 2423 char * tmp = call->get_eth_message( &length );
klauss 113:db67ae00550e 2424 if( tmp != NULL ) {
klauss 113:db67ae00550e 2425 int cb_port = 0xffff;
klauss 113:db67ae00550e 2426 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() );
klauss 113:db67ae00550e 2427 if( cb != NULL ) {
klauss 113:db67ae00550e 2428 cb_port = cb->get_port();
klauss 113:db67ae00550e 2429
klauss 113:db67ae00550e 2430 uint8_t * pkg2cb = build_cb_package( call->get_cb_ext(), cb_port, __AUDIO__,
klauss 108:18a3702650f3 2431 tmp, __AUDIO__, length, write_buffer );
klauss 113:db67ae00550e 2432
klauss 108:18a3702650f3 2433 send2callboxes( pkg2cb );
klauss 113:db67ae00550e 2434
klauss 113:db67ae00550e 2435 } else if( debug_main ) debug_msg("received missed package from CBx :: %i -- Type :: %i", ext, type );
klauss 113:db67ae00550e 2436 }
klauss 0:4d17cd9c8f9d 2437 }
klauss 14:22a35f575502 2438 }
klauss 113:db67ae00550e 2439
klauss 113:db67ae00550e 2440 /***
klauss 113:db67ae00550e 2441 [ Principio ]
klauss 113:db67ae00550e 2442 -- Verificar se já se passou determinada unidade de tempo
klauss 113:db67ae00550e 2443 -- Baseado nisso, chamar a funcao [ 1 ] refresh ou [ 2 ] wake_all_up
klauss 113:db67ae00550e 2444 [ 1 ] -- Encaminha periodicamente um pacote de __REGISTRY__ para cada CBx, um por vez.
klauss 113:db67ae00550e 2445 [ 2 ] -- Busca por elementos que constem sem seus pares registrados e manda um __PROMPT__ ping para cada um, um por vez.
klauss 113:db67ae00550e 2446 ***/
klauss 106:a34fcf9f0e02 2447
klauss 113:db67ae00550e 2448 if( timer_sync_refresh.read_ms() > 250 )
klauss 113:db67ae00550e 2449 {
klauss 113:db67ae00550e 2450 timer_sync_refresh.reset();
klauss 113:db67ae00550e 2451 static uint8_t time_to_mode = TIME_TO_REFRESH;
klauss 113:db67ae00550e 2452 if( time_to_mode == TIME_TO_REFRESH )
klauss 113:db67ae00550e 2453 {
klauss 113:db67ae00550e 2454 time_to_mode = TIME_TO_WAKE_UP;
klauss 113:db67ae00550e 2455 refresh( v_cb );
klauss 113:db67ae00550e 2456 }
klauss 113:db67ae00550e 2457 else
klauss 113:db67ae00550e 2458 {
klauss 113:db67ae00550e 2459 time_to_mode = TIME_TO_REFRESH;
klauss 113:db67ae00550e 2460 if( wake_all ) if( v_call->size() == 0 ) wake_all_up( v_cb );
klauss 89:0fe315117b00 2461 }
klauss 89:0fe315117b00 2462 }
klauss 108:18a3702650f3 2463
klauss 78:1353744f01e1 2464 // check sip messages only for cbx in call ?
klauss 113:db67ae00550e 2465 // end call
klauss 78:1353744f01e1 2466 int ext_to__be_removed = sip_manager( v_cb );
klauss 91:c2a86b1f8aaa 2467 if( ext_to__be_removed > 0x00 ) {
klauss 78:1353744f01e1 2468 Call_Box * cb = __find_CB__( v_cb, ext_to__be_removed );
klauss 91:c2a86b1f8aaa 2469 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 2470 if( cb->status == cb_on_call ) {
klauss 4:de46f0d9b14d 2471 ts->return_timeslice( cb->get_timeslice() );
klauss 4:de46f0d9b14d 2472 cb->set_timeslice( 0x00 );
klauss 4:de46f0d9b14d 2473 buffer[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 2474
klauss 78:1353744f01e1 2475 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 2476 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 2477
klauss 91:c2a86b1f8aaa 2478 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 4:de46f0d9b14d 2479 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 91:c2a86b1f8aaa 2480 if( call->get_cb_ext() == ext_to__be_removed ) {
klauss 4:de46f0d9b14d 2481 v_call->remove_element( i );
klauss 4:de46f0d9b14d 2482 delete( call );
klauss 4:de46f0d9b14d 2483 }
klauss 2:93bec7313ccc 2484 }
klauss 91:c2a86b1f8aaa 2485
klauss 92:92df17f538a8 2486 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 113:db67ae00550e 2487
klauss 113:db67ae00550e 2488 cb -> set_rtp_port ( 0 );
klauss 113:db67ae00550e 2489
klauss 113:db67ae00550e 2490 cb -> reset_rtp_timer ();
klauss 109:a5b8264ffbbc 2491
klauss 113:db67ae00550e 2492 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 113:db67ae00550e 2493 ( char * )buffer, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 2494
klauss 91:c2a86b1f8aaa 2495 if( debug_invite ) debug_msg("Received Bye from *");
klauss 0:4d17cd9c8f9d 2496 }
klauss 91:c2a86b1f8aaa 2497 } else if( debug_main ) debug_msg("Missed bye request from * CBx :: %d", ext );
klauss 113:db67ae00550e 2498 }
klauss 91:c2a86b1f8aaa 2499
klauss 81:3656f00ab3db 2500 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 113:db67ae00550e 2501 call_manager( v_call, v_cb, ts );
klauss 91:c2a86b1f8aaa 2502
klauss 113:db67ae00550e 2503 /* tratamento de pedidos de ligação já em andamento com o * */
klauss 81:3656f00ab3db 2504 invite_handler( v_call, v_cb, ts, NULL );
klauss 113:db67ae00550e 2505
klauss 81:3656f00ab3db 2506 /* rotina de verificação de TS's perdidos */
klauss 91:c2a86b1f8aaa 2507 if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() != __MAX_TIMESLICES__ ) ) {
klauss 91:c2a86b1f8aaa 2508 bool ts_reset = true;
klauss 91:c2a86b1f8aaa 2509 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 2510 if ( ( ( Call_Box * )v_cb->get_element( i ) )->get_status() != cb_idle &&
klauss 91:c2a86b1f8aaa 2511 ( ( Call_Box * )v_cb->get_element( i ) )->get_sip_status() != sip_idle ) {
klauss 78:1353744f01e1 2512 ts_reset = false;
klauss 78:1353744f01e1 2513 break;
klauss 78:1353744f01e1 2514 }
klauss 91:c2a86b1f8aaa 2515 }
klauss 113:db67ae00550e 2516 if ( ts_reset )
klauss 113:db67ae00550e 2517 {
klauss 113:db67ae00550e 2518 if ( debug_invite ) debug_msg ("Resetando TS");
klauss 113:db67ae00550e 2519 ts -> reset ();
klauss 78:1353744f01e1 2520 }
klauss 0:4d17cd9c8f9d 2521 }
klauss 112:6ae726539ab9 2522
klauss 112:6ae726539ab9 2523 /* rotina "zeradora" de portas RTP */
klauss 112:6ae726539ab9 2524 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 112:6ae726539ab9 2525 {
klauss 112:6ae726539ab9 2526 Call_Box * cb = (Call_Box *) v_cb->get_element (i);
klauss 112:6ae726539ab9 2527 if ( cb != NULL )
klauss 112:6ae726539ab9 2528 {
klauss 112:6ae726539ab9 2529 if ( ( cb->get_status () == cb_idle ) && ( cb->get_sip_status () == sip_idle ) && ( cb -> is_rtp_timer_timeout () ) )
klauss 112:6ae726539ab9 2530 {
klauss 113:db67ae00550e 2531 if ( debug_reset_rtp ) debug_msg( "%d rtp reset", cb -> get_ext () );
klauss 112:6ae726539ab9 2532 set_status ( cb -> status, cb_idle );
klauss 112:6ae726539ab9 2533 set_status ( cb->sip->status, sip_idle );
klauss 112:6ae726539ab9 2534 cb -> reset_rtp_timer ();
klauss 112:6ae726539ab9 2535 cb -> set_rtp_port ( 0 );
klauss 112:6ae726539ab9 2536 }
klauss 112:6ae726539ab9 2537 }
klauss 112:6ae726539ab9 2538 }
klauss 113:db67ae00550e 2539
klauss 81:3656f00ab3db 2540 /* rotina que esvazia possiveis pacotes que não foram transmitidos para evitar conflito */
klauss 72:895ca792c647 2541 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 2542
klauss 113:db67ae00550e 2543 // atribui o valor default para a variavel type
klauss 30:8dfb6d8de53d 2544 type = __DO_NOTHING__;
klauss 113:db67ae00550e 2545
klauss 113:db67ae00550e 2546 // verifica o status da conexao ETH, caso exteja conectado ( == 0 ) atribui o valor maximo ao contador de controle
klauss 81:3656f00ab3db 2547 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 113:db67ae00550e 2548
klauss 113:db67ae00550e 2549 // responsavel por atualizar os contadores de controle utilizados para tickar o wdt
klauss 113:db67ae00550e 2550 // e tickar o wdt
klauss 91:c2a86b1f8aaa 2551 if( wdt_timer.read() >= 1 ) {
klauss 113:db67ae00550e 2552
klauss 91:c2a86b1f8aaa 2553 //FIXME remove myself
klauss 83:b8a1d8fdeaeb 2554 uptime++;
klauss 91:c2a86b1f8aaa 2555
klauss 81:3656f00ab3db 2556 wdt_timer.reset();
klauss 91:c2a86b1f8aaa 2557
klauss 81:3656f00ab3db 2558 if( wdt_show ) debug_wdt = true;
klauss 91:c2a86b1f8aaa 2559
klauss 81:3656f00ab3db 2560 if( external_wdt ) external_wdt--;
klauss 81:3656f00ab3db 2561 if( pkg_wdt ) pkg_wdt--;
klauss 81:3656f00ab3db 2562 if( eth_wdt ) eth_wdt--;
klauss 91:c2a86b1f8aaa 2563
klauss 91:c2a86b1f8aaa 2564 if( eth_wdt && external_wdt && pkg_wdt ){
klauss 81:3656f00ab3db 2565 wdt.kick();
klauss 81:3656f00ab3db 2566 }
klauss 113:db67ae00550e 2567 }
klauss 113:db67ae00550e 2568
klauss 113:db67ae00550e 2569 // exibe informacoes referentes ao wdt, ultimo reset, status da eth, tempo em segundos desde o ultimo tick dowdt externo,
klauss 113:db67ae00550e 2570 // tempo em segundos desde o ultimo pacote recebido da interface fibra
klauss 91:c2a86b1f8aaa 2571 if( debug_wdt ) {
klauss 87:679ee0d594a9 2572 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 2573 lpc_low_level_input_counter = 0;
klauss 91:c2a86b1f8aaa 2574
klauss 81:3656f00ab3db 2575 debug_wdt = false;
klauss 91:c2a86b1f8aaa 2576 if( eth_status == 0 ) {
klauss 91:c2a86b1f8aaa 2577 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 2578 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 2579 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 2580 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 2581 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 2582 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 2583 );
klauss 91:c2a86b1f8aaa 2584 } else {
klauss 91:c2a86b1f8aaa 2585 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 2586 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 2587 ETH_CONNECT_TIMEOUT - eth_wdt,
klauss 91:c2a86b1f8aaa 2588 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 2589 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 2590 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 2591 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 2592 );
klauss 81:3656f00ab3db 2593 }
klauss 113:db67ae00550e 2594 }
klauss 113:db67ae00550e 2595 }//fim while ( main loop )
klauss 0:4d17cd9c8f9d 2596 }