Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Mon Mar 16 14:05:05 2015 +0000
Revision:
107:cf1e43414adb
Parent:
106:a34fcf9f0e02
Child:
108:18a3702650f3
inicio da implementa??o dos debugs do RTP

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 105:a930035b6556 1 #include "main_includes.h"
klauss 0:4d17cd9c8f9d 2
klauss 105:a930035b6556 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 106:a34fcf9f0e02 7 {
klauss 105:a930035b6556 8 // configura e inicia o wdt
klauss 81:3656f00ab3db 9 init_wdt();
klauss 91:c2a86b1f8aaa 10
klauss 105:a930035b6556 11 // configs de sistema, irqs, I/O bounds
klauss 81:3656f00ab3db 12 config_lpc();
klauss 91:c2a86b1f8aaa 13
klauss 105:a930035b6556 14 // inicializa a comunicacao com a laser
klauss 0:4d17cd9c8f9d 15 start_cpld();
klauss 91:c2a86b1f8aaa 16
klauss 105:a930035b6556 17 // habilita a impressao de caracteres na interface UART3
klauss 100:09a23fcd3bdf 18 debug_uart3 = true;
klauss 105:a930035b6556 19
klauss 105:a930035b6556 20 // rotina de verificacao do uso do sistema de memoria
klauss 91:c2a86b1f8aaa 21 if( sdram_init() == 1 ) {
klauss 106:a34fcf9f0e02 22 pc.printf("\r\n******* Failed to initialize SDRAM *******\r\n");
klauss 87:679ee0d594a9 23 return 1;
klauss 89:0fe315117b00 24 } else {
klauss 106:a34fcf9f0e02 25 pc.printf("\r\n******* Success to initialize SDRAM *******\r\n");
klauss 87:679ee0d594a9 26 }
klauss 91:c2a86b1f8aaa 27
klauss 105:a930035b6556 28 // inicializa o sistema de arquivo para uso
klauss 43:455522f98de5 29 init_fsystem();
klauss 91:c2a86b1f8aaa 30
klauss 105:a930035b6556 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 106:a34fcf9f0e02 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 105:a930035b6556 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 105:a930035b6556 41 pc.printf("\r\n******* Cannot connect to eth *******\r\n");
klauss 91:c2a86b1f8aaa 42 } else {
klauss 106:a34fcf9f0e02 43 pc.printf("\r\n******* Connection eth - ok *******\r\n");
klauss 78:1353744f01e1 44 init_prompt_eth();
klauss 82:f55d13babca0 45 init_external_wdt()
klauss 8:e3bfe62a477e 46 }
klauss 91:c2a86b1f8aaa 47
klauss 105:a930035b6556 48 // sync_timer : usado para sincronizar eventos a cada x unidades de tempo, usualmente em debugs
klauss 105:a930035b6556 49 // led_sync_timer : usado para controlar a taxa de toggle do led de debug
klauss 78:1353744f01e1 50 Timer sync_timer, led_sync_timer;
klauss 105:a930035b6556 51
klauss 105:a930035b6556 52 sync_timer.start();
klauss 105:a930035b6556 53 led_sync_timer.start();
klauss 91:c2a86b1f8aaa 54
klauss 105:a930035b6556 55 // representa ramal do call box
klauss 0:4d17cd9c8f9d 56 int ext = 0;
klauss 91:c2a86b1f8aaa 57
klauss 105:a930035b6556 58 // representa porta do call box
klauss 78:1353744f01e1 59 int port = 0;
klauss 91:c2a86b1f8aaa 60
klauss 105:a930035b6556 61 // buffer para onde se copia os dados vindos do cb para tratameno interno
klauss 105:a930035b6556 62 uint8_t buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 63
klauss 105:a930035b6556 64 // buffer de escrita do pacote de saida que sera enviado pro cb / servidor
klauss 105:a930035b6556 65 uint8_t write_buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 66
klauss 105:a930035b6556 67 // ponteiro que aponta para os dados vindo do CPLD
klauss 0:4d17cd9c8f9d 68 uint8_t * buffer_from_cb_ptr = ( uint8_t * )RXBuffer;
klauss 91:c2a86b1f8aaa 69
klauss 105:a930035b6556 70 // Armazena o ultimo pacote recebido dos CBx
klauss 105:a930035b6556 71 uint8_t cb_rx_buffer[ CB_BUFFER_SIZE ];
klauss 91:c2a86b1f8aaa 72
klauss 105:a930035b6556 73 // referencia para os dados contidos no pacote, sem o header
klauss 0:4d17cd9c8f9d 74 uint8_t * data = NULL;
klauss 91:c2a86b1f8aaa 75
klauss 105:a930035b6556 76 // gerencia o tipo do pacote para providenciar tratamento adequado
klauss 0:4d17cd9c8f9d 77 volatile uint8_t type = __DO_NOTHING__;
klauss 91:c2a86b1f8aaa 78
klauss 105:a930035b6556 79 // representa a lista dos Call Boxes atualmente recfonhecidos pela cabeceira
klauss 0:4d17cd9c8f9d 80 Vector * v_cb = new Vector();
klauss 91:c2a86b1f8aaa 81
klauss 105:a930035b6556 82 // representa a lista de ligacoes ativas na cabeceira
klauss 0:4d17cd9c8f9d 83 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 84
klauss 105:a930035b6556 85 // gerencia a distribuicao de timeslice para os call boxes
klauss 0:4d17cd9c8f9d 86 Timeslice * ts = new Timeslice();
klauss 91:c2a86b1f8aaa 87 if( ts == NULL ) {
klauss 89:0fe315117b00 88 memory_is_over = true;
klauss 89:0fe315117b00 89 if( debug_memory ) debug_msg("TS allocation fail");
klauss 89:0fe315117b00 90 }
klauss 91:c2a86b1f8aaa 91
klauss 105:a930035b6556 92 // aloca o vetor de call boxes
klauss 91:c2a86b1f8aaa 93 if( v_cb == NULL ) {
klauss 91:c2a86b1f8aaa 94 while( v_cb == NULL ) {
klauss 0:4d17cd9c8f9d 95 Vector * v_cb = new Vector();
klauss 91:c2a86b1f8aaa 96 if( sync_timer.read() > 5 ) {
klauss 48:195c97f12e8e 97 send_msg("Erro ao alocar o vetor de CBx");
klauss 78:1353744f01e1 98 sync_timer.reset();
klauss 0:4d17cd9c8f9d 99 }
klauss 0:4d17cd9c8f9d 100 }
klauss 105:a930035b6556 101 }
klauss 105:a930035b6556 102
klauss 105:a930035b6556 103 // aloca o vetor de calls
klauss 105:a930035b6556 104 if( v_call == NULL ) {
klauss 91:c2a86b1f8aaa 105 while( v_call == NULL ) {
klauss 0:4d17cd9c8f9d 106 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 107 if( sync_timer.read() > 5 ) {
klauss 48:195c97f12e8e 108 send_msg("Erro ao alocar o vetor de Calls");
klauss 78:1353744f01e1 109 sync_timer.reset();
klauss 0:4d17cd9c8f9d 110 }
klauss 0:4d17cd9c8f9d 111 }
klauss 0:4d17cd9c8f9d 112 }
klauss 91:c2a86b1f8aaa 113
klauss 91:c2a86b1f8aaa 114 if( v_cb == NULL ) {
klauss 89:0fe315117b00 115 memory_is_over = true;
klauss 89:0fe315117b00 116 if( debug_memory ) debug_msg("Call_Box vector allocation fail");
klauss 89:0fe315117b00 117 }
klauss 91:c2a86b1f8aaa 118
klauss 91:c2a86b1f8aaa 119 if( v_call == NULL ) {
klauss 89:0fe315117b00 120 memory_is_over = true;
klauss 89:0fe315117b00 121 if( debug_memory ) debug_msg("Call vector allocation fail");
klauss 89:0fe315117b00 122 }
klauss 91:c2a86b1f8aaa 123
klauss 105:a930035b6556 124 // inicializa buffers de armazenamento temporario de I/O com o CBx
klauss 105:a930035b6556 125 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 63:0d95da692bb4 126 cb_rx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 127 cb_tx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 128 }
klauss 91:c2a86b1f8aaa 129
klauss 105:a930035b6556 130 // apagar os leds do lpc
klauss 0:4d17cd9c8f9d 131 reset_leds();
klauss 91:c2a86b1f8aaa 132
klauss 105:a930035b6556 133 //FIXME remover caso compravado desuso
klauss 33:735fd60e96d8 134 udp_timer.start();
klauss 99:e80850c51106 135
klauss 105:a930035b6556 136 // inicializa o sistema para envio de pacotes do tipo __FW?__ e __TELEMETRY__ para servidor ( ip, porta ) previamente configurado.
klauss 99:e80850c51106 137 init_fw_handler();
klauss 99:e80850c51106 138
klauss 99:e80850c51106 139 led2 = 0;
klauss 105:a930035b6556 140
klauss 105:a930035b6556 141 // le do sistema de arquivos valores previamente configurados de primeiro e ultimo ramal de um determinado ramo.
klauss 81:3656f00ab3db 142 init_ranges();
klauss 105:a930035b6556 143
klauss 105:a930035b6556 144 // inicializa o timer de refresh dos cbx
klauss 80:61d61c9eb75c 145 init_refresh();
klauss 91:c2a86b1f8aaa 146
klauss 105:a930035b6556 147 // inicializa o time de envelhecimento do CBx
klauss 78:1353744f01e1 148 init_aging();
klauss 91:c2a86b1f8aaa 149
klauss 105:a930035b6556 150 // inicislizs o yimrt para sincronizar as rotinas de wake_all_up e refresh
klauss 89:0fe315117b00 151 init_sync_refresh();
klauss 91:c2a86b1f8aaa 152
klauss 105:a930035b6556 153 // usada para delay na ativacao de algumas funcoes, wake_all_up e tentativa de eth reconnect
klauss 62:07e5bdc9f8f7 154 static uint8_t count = 0;
klauss 91:c2a86b1f8aaa 155
klauss 105:a930035b6556 156 // contador usado para indicar quantos cbx foram registrados na logica
klauss 78:1353744f01e1 157 uint8_t max_registered_cbx = 0;
klauss 91:c2a86b1f8aaa 158
klauss 105:a930035b6556 159 // inicia dizendo que a rotina nao deve rodar agora ( 35 sec. nas versoes originais )
klauss 81:3656f00ab3db 160 bool wake_all = false;
klauss 91:c2a86b1f8aaa 161
klauss 105:a930035b6556 162 // inico das variaveis controladoras do extern wdt
klauss 105:a930035b6556 163
klauss 105:a930035b6556 164 // atribui valor maximo ao countdown que verifica comunicao com os CBx
klauss 81:3656f00ab3db 165 uint16_t pkg_wdt = RX_CB_IDLE;
klauss 105:a930035b6556 166
klauss 105:a930035b6556 167 // atribi falor maximo ao countdown que verifica conexao eth
klauss 81:3656f00ab3db 168 uint16_t eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 105:a930035b6556 169
klauss 105:a930035b6556 170 // inicializa o contador de uptime da header
klauss 83:b8a1d8fdeaeb 171 uint32_t uptime = 0;
klauss 105:a930035b6556 172
klauss 99:e80850c51106 173 led1 = 0;
klauss 104:62646ef786a3 174
klauss 105:a930035b6556 175 send_msg("\r\nReady");
klauss 92:92df17f538a8 176
klauss 105:a930035b6556 177 // inicializa o timer de retry dos pacotes de invite, necessario para o comportamento "metralhadora" da header.
klauss 99:e80850c51106 178 Timer invite_retry_timer;
klauss 99:e80850c51106 179 invite_retry_timer.start();
klauss 105:a930035b6556 180
klauss 105:a930035b6556 181 // desabilita a impressao de caracteres na interface UART3
klauss 105:a930035b6556 182 //debug_uart3 = false;
klauss 106:a34fcf9f0e02 183
klauss 106:a34fcf9f0e02 184 reset_leds();
klauss 91:c2a86b1f8aaa 185
klauss 78:1353744f01e1 186 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 91:c2a86b1f8aaa 187 while( true ) {
klauss 105:a930035b6556 188 // inicializa o loop afirmando que nao existe comando externo para ser processado pelo prompt.
klauss 105:a930035b6556 189 udp_query = false;
klauss 105:a930035b6556 190 from_eth = false;
klauss 105:a930035b6556 191
klauss 106:a34fcf9f0e02 192 // chama rotina de processamento de entrada serial para o prompp
klauss 105:a930035b6556 193 prompt_process( NULL, 0 );
klauss 99:e80850c51106 194
klauss 105:a930035b6556 195 //begin verificacao e tratamento dos pacotes recebidos via UDP-ETH
klauss 105:a930035b6556 196 {
klauss 105:a930035b6556 197 fd_set fdSet;
klauss 105:a930035b6556 198 FD_ZERO(&fdSet);
klauss 105:a930035b6556 199
klauss 105:a930035b6556 200 // coloca o socket SIP de todos os CBx
klauss 105:a930035b6556 201 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 105:a930035b6556 202 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 105:a930035b6556 203 FD_SET( cb->get_sip_socket_fd(), &fdSet );
klauss 105:a930035b6556 204 }
klauss 105:a930035b6556 205
klauss 105:a930035b6556 206 // adiciona o socket do watchdog
klauss 105:a930035b6556 207 FD_SET( udp_wdt_client.get_fd(), &fdSet );
klauss 105:a930035b6556 208
klauss 105:a930035b6556 209 // adiciona o socket de comandos prompt-UDP-ETH
klauss 105:a930035b6556 210 FD_SET( udp_client.get_fd(), &fdSet );
klauss 105:a930035b6556 211
klauss 105:a930035b6556 212 struct timeval t;
klauss 105:a930035b6556 213 t.tv_sec = 0;
klauss 105:a930035b6556 214 t.tv_usec = 0;
klauss 105:a930035b6556 215 // verifica se existe algo pendente para ser tratado
klauss 105:a930035b6556 216 int ret = lwip_select( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 105:a930035b6556 217
klauss 105:a930035b6556 218 if(ret > 0 ) {
klauss 105:a930035b6556 219 // existe algo na fila UDP pendente.
klauss 105:a930035b6556 220 // verigica o socket SIP de cada CBx
klauss 105:a930035b6556 221 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 105:a930035b6556 222 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 105:a930035b6556 223 int fd = cb->get_sip_socket_fd();
klauss 105:a930035b6556 224 if( FD_ISSET( fd, &fdSet ) ) {
klauss 105:a930035b6556 225 int rcv = cb->sip_udp_incomming_pkg();
klauss 105:a930035b6556 226 }
klauss 105:a930035b6556 227 }
klauss 105:a930035b6556 228
klauss 105:a930035b6556 229 // verifica o socket do prompt-UDP-ETH
klauss 105:a930035b6556 230 if( FD_ISSET( udp_client.get_fd(), &fdSet ) ) {
klauss 105:a930035b6556 231 char to_prompt_process[ PROMPT_UDP_COMMAND_SIZE ];
klauss 105:a930035b6556 232 //for( register int i = 0; i < PROMPT_UDP_COMMAND_SIZE; i++ ) to_prompt_process[ i ] = 0;
klauss 105:a930035b6556 233
klauss 105:a930035b6556 234 int prompt_process_msg_rcv = udp_client.receiveFrom( udp_server, to_prompt_process, ( sizeof( to_prompt_process ) - 1 ) );
klauss 105:a930035b6556 235
klauss 105:a930035b6556 236 to_prompt_process[ prompt_process_msg_rcv ] = 0;
klauss 105:a930035b6556 237 if( prompt_process_msg_rcv == -1 )
klauss 105:a930035b6556 238 {
klauss 105:a930035b6556 239 if( debug_reconnect ) send_msg("Reconnect Prompt Process");
klauss 105:a930035b6556 240 reconnect_udp_prompt_process();
klauss 105:a930035b6556 241 miss_prompt_udp_rcv_pkg++;
klauss 105:a930035b6556 242 }
klauss 105:a930035b6556 243 else if( prompt_process_msg_rcv > 0 )
klauss 105:a930035b6556 244 {
klauss 105:a930035b6556 245 udp_query = true;
klauss 105:a930035b6556 246 prompt_process( to_prompt_process, prompt_process_msg_rcv );
klauss 105:a930035b6556 247 }
klauss 105:a930035b6556 248 }
klauss 105:a930035b6556 249
klauss 105:a930035b6556 250 // verifica o socket do watchdog
klauss 105:a930035b6556 251 if( FD_ISSET( udp_wdt_client.get_fd(), &fdSet ) ) {
klauss 105:a930035b6556 252 char wake_msg[ 768 ];
klauss 105:a930035b6556 253 Endpoint udp_wdt_server;
klauss 105:a930035b6556 254
klauss 105:a930035b6556 255 int wake_msg_rcv = udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) );
klauss 105:a930035b6556 256
klauss 105:a930035b6556 257 if( wake_msg_rcv == -1 )
klauss 105:a930035b6556 258 {
klauss 105:a930035b6556 259 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 105:a930035b6556 260 reconnect_extern_wdt_socket();
klauss 105:a930035b6556 261 miss_wdt_send_pkg++;
klauss 105:a930035b6556 262 }
klauss 105:a930035b6556 263 else if( wake_msg_rcv > 0 )
klauss 105:a930035b6556 264 {
klauss 105:a930035b6556 265 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 105:a930035b6556 266 // Just ckeck but not set 'alive?'
klauss 105:a930035b6556 267 // 'alive*' - force wdt tick right now
klauss 105:a930035b6556 268 // Ckecking and set 'alive'
klauss 105:a930035b6556 269 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 105:a930035b6556 270 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 105:a930035b6556 271
klauss 106:a34fcf9f0e02 272 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 105:a930035b6556 273 uptime,
klauss 105:a930035b6556 274 invite_counter,
klauss 105:a930035b6556 275 external_wdt,
klauss 105:a930035b6556 276 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 105:a930035b6556 277 cb_new_counter,
klauss 105:a930035b6556 278 v_cb->size(),
klauss 105:a930035b6556 279 ts->remain_timeslices(),
klauss 105:a930035b6556 280 sip_socket_send_failure,
klauss 106:a34fcf9f0e02 281 v_call->size(),
klauss 106:a34fcf9f0e02 282 pkg_cksok,
klauss 106:a34fcf9f0e02 283 pkg_ckserr,
klauss 106:a34fcf9f0e02 284 pkg_zero,
klauss 106:a34fcf9f0e02 285 out_of_range,
klauss 106:a34fcf9f0e02 286 missed_pkg,
klauss 106:a34fcf9f0e02 287 delayed_pkg_to_cb,
klauss 106:a34fcf9f0e02 288 cpld_pkg_tx_counter,
klauss 106:a34fcf9f0e02 289 cpld_pkg_rx_counter,
klauss 106:a34fcf9f0e02 290 eth_wdt,
klauss 106:a34fcf9f0e02 291 pkg_wdt,
klauss 106:a34fcf9f0e02 292 miss_fw_send_pkg,
klauss 106:a34fcf9f0e02 293 miss_prompt_udp_send_pkg,
klauss 106:a34fcf9f0e02 294 miss_sip_registry_send_pkg,
klauss 106:a34fcf9f0e02 295 miss_sip_invite_send_pkg,
klauss 106:a34fcf9f0e02 296 miss_sip_bye_send_pkg,
klauss 106:a34fcf9f0e02 297 miss_sip_unregistry_send_pkg,
klauss 106:a34fcf9f0e02 298 miss_sip_ok_send_pkg,
klauss 106:a34fcf9f0e02 299 miss_sip_rcv_bye_send_pkg,
klauss 106:a34fcf9f0e02 300 miss_wdt_send_pkg,
klauss 106:a34fcf9f0e02 301 miss_prompt_udp_send_pkg,
klauss 106:a34fcf9f0e02 302 miss_ftp_udp_send_pkg,
klauss 106:a34fcf9f0e02 303 miss_prompt_udp_rcv_pkg
klauss 105:a930035b6556 304 );
klauss 106:a34fcf9f0e02 305
klauss 105:a930035b6556 306 wake_msg[ 768 - 1 ] = 0;
klauss 105:a930035b6556 307 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 105:a930035b6556 308 if( send != strlen( wake_msg ) )
klauss 105:a930035b6556 309 {
klauss 105:a930035b6556 310 if( debug_reconnect ) debug_msg("Reconnect Extern wdt (%d, %d)", send, strlen( wake_msg ) );
klauss 105:a930035b6556 311 reconnect_extern_wdt_socket();
klauss 105:a930035b6556 312 miss_wdt_send_pkg++;
klauss 105:a930035b6556 313 }
klauss 105:a930035b6556 314
klauss 105:a930035b6556 315 if( ( (!question_alive) && ( cb_new_counter <= __MAX_CB_IN_A_BRANCH__ ) && ( cb_new_counter >= 2 ) ) ) {
klauss 105:a930035b6556 316 external_wdt = EXTERN_WDT_IDLE;
klauss 105:a930035b6556 317 }
klauss 105:a930035b6556 318 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 105:a930035b6556 319 external_wdt = 0;
klauss 105:a930035b6556 320
klauss 105:a930035b6556 321 sprintf( wake_msg, "rst:%u:", uptime );
klauss 105:a930035b6556 322 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 105:a930035b6556 323 if( send != strlen( wake_msg ) )
klauss 105:a930035b6556 324 {
klauss 105:a930035b6556 325 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 105:a930035b6556 326 reconnect_extern_wdt_socket();
klauss 105:a930035b6556 327 miss_wdt_send_pkg++;
klauss 105:a930035b6556 328 }
klauss 105:a930035b6556 329 }
klauss 105:a930035b6556 330 }
klauss 105:a930035b6556 331 }
klauss 105:a930035b6556 332 }
klauss 105:a930035b6556 333 }//end verificacao e tratamento dos pacotes recebidos via UDP-ETH
klauss 105:a930035b6556 334
klauss 105:a930035b6556 335 // atualiza o valor do contador max_registered_cbx
klauss 78:1353744f01e1 336 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 106:a34fcf9f0e02 337
klauss 106:a34fcf9f0e02 338
klauss 91:c2a86b1f8aaa 339
klauss 105:a930035b6556 340 // executa a cada 5 segundos comandos e verificacoes ( principalmente debugs )
klauss 91:c2a86b1f8aaa 341 if( sync_timer.read() > 5 ) {
klauss 78:1353744f01e1 342 sync_timer.reset();
klauss 105:a930035b6556 343
klauss 105:a930035b6556 344 // atualiza valor da variavel de delay
klauss 105:a930035b6556 345 count++;
klauss 91:c2a86b1f8aaa 346
klauss 105:a930035b6556 347 // enable na variavel que exibe estatisticas de cks dos pacotes recebidos pela header
klauss 91:c2a86b1f8aaa 348 if( debug_cks == true ) {
klauss 81:3656f00ab3db 349 pcks_s = true;
klauss 78:1353744f01e1 350 }
klauss 91:c2a86b1f8aaa 351
klauss 105:a930035b6556 352 // enable na variavel que exibe uma lista ( por ordem de pedido de registro ) dos cbx
klauss 91:c2a86b1f8aaa 353 if( debug_alive == true ) {
klauss 81:3656f00ab3db 354 pshowcb = true;
klauss 78:1353744f01e1 355 }
klauss 100:09a23fcd3bdf 356
klauss 105:a930035b6556 357 // enable na variavel que exibe lista com estatisticas de pacotes que falharam ao serem enviados via interface eth
klauss 105:a930035b6556 358 if( debug_missed )
klauss 105:a930035b6556 359 {
klauss 105:a930035b6556 360 missed_send_udp_pkg = true;
klauss 105:a930035b6556 361 }
klauss 105:a930035b6556 362
klauss 105:a930035b6556 363 // verifica status da conexao eth, em caso de falha na inicializacao anterior, tenta conectar periodicamente a cada 75 sec.
klauss 105:a930035b6556 364 // nas implementacoes inicias
klauss 105:a930035b6556 365 if( !( count % 15 ) ) {
klauss 91:c2a86b1f8aaa 366 if( eth_status ) {
klauss 78:1353744f01e1 367 eth_status = __init_eth__();
klauss 91:c2a86b1f8aaa 368 if( eth_status ) {
klauss 105:a930035b6556 369 if( debug_main ) pc.printf("\r\nCannot connect to eth\r\n");
klauss 91:c2a86b1f8aaa 370 } else {
klauss 105:a930035b6556 371 if( debug_main ) pc.printf("\r\nConnection eth - ok");
klauss 78:1353744f01e1 372 init_prompt_eth();
klauss 82:f55d13babca0 373 init_external_wdt()
klauss 78:1353744f01e1 374 }
klauss 78:1353744f01e1 375 }
klauss 78:1353744f01e1 376 }
klauss 100:09a23fcd3bdf 377
klauss 105:a930035b6556 378 // inicializa rotina de verificacao de "pares" de CBx apos 35 sec. nas implementacoes iniciais
klauss 91:c2a86b1f8aaa 379 if( ( count > 7 ) && ( wake_all == false ) ) {
klauss 81:3656f00ab3db 380 wake_all = true;
klauss 78:1353744f01e1 381 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 382 }
klauss 78:1353744f01e1 383 }
klauss 106:a34fcf9f0e02 384
klauss 106:a34fcf9f0e02 385
klauss 91:c2a86b1f8aaa 386
klauss 105:a930035b6556 387 // zera os contadores de pacotes recebidos na interface CBx->Header
klauss 91:c2a86b1f8aaa 388 if( r_stats ) {
klauss 91:c2a86b1f8aaa 389 boot_counter = 0;
klauss 91:c2a86b1f8aaa 390 registry_counter = 0;
klauss 91:c2a86b1f8aaa 391 invite_counter = 0;
klauss 91:c2a86b1f8aaa 392 audio_counter = 0;
klauss 91:c2a86b1f8aaa 393 telemetry_counter = 0;
klauss 91:c2a86b1f8aaa 394 cb_bye_counter = 0;
klauss 91:c2a86b1f8aaa 395 prompt_counter = 0;
klauss 91:c2a86b1f8aaa 396 flood_counter = 0;
klauss 67:cdedc64d9921 397 bootloader_cbx_counter = 0;
klauss 99:e80850c51106 398 cb_stats_counter = 0;
klauss 105:a930035b6556 399 fw_counter = 0;
klauss 63:0d95da692bb4 400 r_stats = false;
klauss 63:0d95da692bb4 401 stats = true;
klauss 63:0d95da692bb4 402 }
klauss 106:a34fcf9f0e02 403
klauss 106:a34fcf9f0e02 404
klauss 91:c2a86b1f8aaa 405
klauss 105:a930035b6556 406 // exibe o valor dos contadores de pacotes recebidos na interfacao CBx->ETH
klauss 91:c2a86b1f8aaa 407 if( stats ) {
klauss 63:0d95da692bb4 408 char str[ 200 ];
klauss 105:a930035b6556 409 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 105:a930035b6556 410 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 411 send_msg( str );
klauss 63:0d95da692bb4 412 stats =false;
klauss 63:0d95da692bb4 413 }
klauss 106:a34fcf9f0e02 414
klauss 106:a34fcf9f0e02 415
klauss 91:c2a86b1f8aaa 416
klauss 105:a930035b6556 417 // exibe uma lista ( em ordem crescente e por ramais ) dos cbx que ja se registraram ao menos uma vez
klauss 106:a34fcf9f0e02 418 if( list )
klauss 106:a34fcf9f0e02 419 {
klauss 78:1353744f01e1 420 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 421
klauss 78:1353744f01e1 422 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 91:c2a86b1f8aaa 423
klauss 78:1353744f01e1 424 if( min_ext % 2 ) missed_cb++;
klauss 91:c2a86b1f8aaa 425
klauss 78:1353744f01e1 426 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 91:c2a86b1f8aaa 427
klauss 78:1353744f01e1 428 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 429 if( v_cb->size() == 1 ) {
klauss 78:1353744f01e1 430 send_msg(" %d ", ( ( Call_Box * )v_cb->get_element( 0 ) )->get_ext() );
klauss 91:c2a86b1f8aaa 431 } else if( v_cb->size() > 1 ) {
klauss 62:07e5bdc9f8f7 432 char str[ 1024 ];
klauss 78:1353744f01e1 433 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 62:07e5bdc9f8f7 434 register int i = 0;
klauss 91:c2a86b1f8aaa 435 for( ; i < v_cb->size(); i++ ) {
klauss 78:1353744f01e1 436 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 62:07e5bdc9f8f7 437 }
klauss 91:c2a86b1f8aaa 438
klauss 62:07e5bdc9f8f7 439 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 91:c2a86b1f8aaa 440
klauss 62:07e5bdc9f8f7 441 char aux[ 16 ];
klauss 78:1353744f01e1 442 strcpy( str, "\r\n> " );
klauss 91:c2a86b1f8aaa 443 for( i = 0; i < v_cb->size() - 1; i++ ) {
klauss 62:07e5bdc9f8f7 444 sprintf( aux, "%i, ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 445 strcat( str, aux );
klauss 78:1353744f01e1 446 if( ( i != 0 ) && !( ( i + 1 ) % 16 ) ) strcat( str, "\r\n> " );
klauss 62:07e5bdc9f8f7 447 }
klauss 62:07e5bdc9f8f7 448 sprintf( aux, "%i ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 449 strcat( str, aux );
klauss 62:07e5bdc9f8f7 450 send_msg( "%s", str );
klauss 62:07e5bdc9f8f7 451 }
klauss 91:c2a86b1f8aaa 452 list = false;
klauss 62:07e5bdc9f8f7 453 }
klauss 106:a34fcf9f0e02 454
klauss 106:a34fcf9f0e02 455
klauss 106:a34fcf9f0e02 456
klauss 106:a34fcf9f0e02 457 // validar na proxima iteracao.
klauss 106:a34fcf9f0e02 458 if( long_list )
klauss 106:a34fcf9f0e02 459 {
klauss 106:a34fcf9f0e02 460 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 461
klauss 106:a34fcf9f0e02 462 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 106:a34fcf9f0e02 463
klauss 106:a34fcf9f0e02 464 if( min_ext % 2 ) missed_cb++;
klauss 106:a34fcf9f0e02 465
klauss 106:a34fcf9f0e02 466 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 106:a34fcf9f0e02 467
klauss 106:a34fcf9f0e02 468 {
klauss 106:a34fcf9f0e02 469 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 106:a34fcf9f0e02 470
klauss 106:a34fcf9f0e02 471 if( v_cb->size() >= 1 ) {
klauss 106:a34fcf9f0e02 472 for( register int i = 0; i < v_cb->size(); i++ )
klauss 106:a34fcf9f0e02 473 {
klauss 106:a34fcf9f0e02 474 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 106:a34fcf9f0e02 475 }
klauss 106:a34fcf9f0e02 476 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 106:a34fcf9f0e02 477 }
klauss 106:a34fcf9f0e02 478
klauss 106:a34fcf9f0e02 479 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 480
klauss 106:a34fcf9f0e02 481 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 106:a34fcf9f0e02 482
klauss 106:a34fcf9f0e02 483 Call_Box * cb = __find_CB__( v_cb, ext_list[ i ] );
klauss 106:a34fcf9f0e02 484
klauss 106:a34fcf9f0e02 485 if( cb != NULL )
klauss 106:a34fcf9f0e02 486 {
klauss 106:a34fcf9f0e02 487 char cb_status[ 32 ];
klauss 106:a34fcf9f0e02 488 char cb_sip_status[ 32 ];
klauss 106:a34fcf9f0e02 489 switch( cb->status ) {
klauss 106:a34fcf9f0e02 490 case cb_idle : {
klauss 106:a34fcf9f0e02 491 strcpy( cb_status, "cb_idle" );
klauss 106:a34fcf9f0e02 492 break;
klauss 106:a34fcf9f0e02 493 }
klauss 106:a34fcf9f0e02 494 case cb_ringing : {
klauss 106:a34fcf9f0e02 495 strcpy( cb_status, "cb_ringing" );
klauss 106:a34fcf9f0e02 496 break;
klauss 106:a34fcf9f0e02 497 }
klauss 106:a34fcf9f0e02 498 case cb_trying : {
klauss 106:a34fcf9f0e02 499 strcpy( cb_status,"cb_trying" );
klauss 106:a34fcf9f0e02 500 break;
klauss 106:a34fcf9f0e02 501 }
klauss 106:a34fcf9f0e02 502 case cb_on_call : {
klauss 106:a34fcf9f0e02 503 strcpy( cb_status, "cb_on_call" );
klauss 106:a34fcf9f0e02 504 break;
klauss 106:a34fcf9f0e02 505 }
klauss 106:a34fcf9f0e02 506 case cb_busy : {
klauss 106:a34fcf9f0e02 507 strcpy( cb_status, "cb_busy" );
klauss 106:a34fcf9f0e02 508 break;
klauss 106:a34fcf9f0e02 509 }
klauss 106:a34fcf9f0e02 510 case cb_denied : {
klauss 106:a34fcf9f0e02 511 strcpy( cb_status, "cb_denied" );
klauss 106:a34fcf9f0e02 512 break;
klauss 106:a34fcf9f0e02 513 }
klauss 106:a34fcf9f0e02 514 }
klauss 106:a34fcf9f0e02 515 switch( cb->sip->status ) {
klauss 106:a34fcf9f0e02 516 case sip_idle : {
klauss 106:a34fcf9f0e02 517 strcpy( cb_sip_status, "sip_idle" );
klauss 106:a34fcf9f0e02 518 break;
klauss 106:a34fcf9f0e02 519 }
klauss 106:a34fcf9f0e02 520 case sip_waiting_trying : {
klauss 106:a34fcf9f0e02 521 strcpy( cb_sip_status, "sip_waiting_trying" );
klauss 106:a34fcf9f0e02 522 break;
klauss 106:a34fcf9f0e02 523 }
klauss 106:a34fcf9f0e02 524 case sip_trying : {
klauss 106:a34fcf9f0e02 525 strcpy( cb_sip_status, "sip_trying" );
klauss 106:a34fcf9f0e02 526 break;
klauss 106:a34fcf9f0e02 527 }
klauss 106:a34fcf9f0e02 528 case sip_ringing : {
klauss 106:a34fcf9f0e02 529 strcpy( cb_sip_status, "sip_ringing" );
klauss 106:a34fcf9f0e02 530 break;
klauss 106:a34fcf9f0e02 531 }
klauss 106:a34fcf9f0e02 532 case sip_busy : {
klauss 106:a34fcf9f0e02 533 strcpy( cb_sip_status, "sip_busy" );
klauss 106:a34fcf9f0e02 534 break;
klauss 106:a34fcf9f0e02 535 }
klauss 106:a34fcf9f0e02 536 case sip_ok : {
klauss 106:a34fcf9f0e02 537 strcpy( cb_sip_status, "sip_ok" );
klauss 106:a34fcf9f0e02 538 break;
klauss 106:a34fcf9f0e02 539 }
klauss 106:a34fcf9f0e02 540 case sip_on_call : {
klauss 106:a34fcf9f0e02 541 strcpy( cb_sip_status, "sip_on_call" );
klauss 106:a34fcf9f0e02 542 break;
klauss 106:a34fcf9f0e02 543 }
klauss 106:a34fcf9f0e02 544 case sip_denied : {
klauss 106:a34fcf9f0e02 545 strcpy( cb_sip_status, "sip_denied" );
klauss 106:a34fcf9f0e02 546 break;
klauss 106:a34fcf9f0e02 547 }
klauss 106:a34fcf9f0e02 548 }
klauss 106:a34fcf9f0e02 549 char cbx_to_string[ 254 ];
klauss 106:a34fcf9f0e02 550 char aux[ 16 ];
klauss 106:a34fcf9f0e02 551 strcpy( cbx_to_string, "Ext :: " );
klauss 106:a34fcf9f0e02 552 itoa( cb->get_ext(), aux , 10 );
klauss 106:a34fcf9f0e02 553 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 554 strcat( cbx_to_string, " :: Port :: " );
klauss 106:a34fcf9f0e02 555 itoa( cb->get_port(), aux , 10 );
klauss 106:a34fcf9f0e02 556 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 557 strcat( cbx_to_string, " :: Status -- " );
klauss 106:a34fcf9f0e02 558 strcat( cbx_to_string, cb_status );
klauss 106:a34fcf9f0e02 559 strcat( cbx_to_string, " - " );
klauss 106:a34fcf9f0e02 560 strcat( cbx_to_string, cb_sip_status );
klauss 106:a34fcf9f0e02 561 if( cb->get_timeslice() != 0 ) {
klauss 106:a34fcf9f0e02 562 strcat( cbx_to_string, " -- on TimeSlice :: " );
klauss 106:a34fcf9f0e02 563 itoa( cb->get_timeslice(), aux , 10 );
klauss 106:a34fcf9f0e02 564 strcat( cbx_to_string, aux );
klauss 106:a34fcf9f0e02 565 }
klauss 106:a34fcf9f0e02 566 send_msg( cbx_to_string );
klauss 106:a34fcf9f0e02 567 }
klauss 106:a34fcf9f0e02 568 }
klauss 106:a34fcf9f0e02 569
klauss 106:a34fcf9f0e02 570 }
klauss 91:c2a86b1f8aaa 571 long_list = false;
klauss 52:12930cef17c4 572 }
klauss 106:a34fcf9f0e02 573
klauss 106:a34fcf9f0e02 574
klauss 91:c2a86b1f8aaa 575
klauss 105:a930035b6556 576 // exibe uma lista de cbx por ordem de registro contendo status do cbx e do sip vinculado nesse cbx
klauss 106:a34fcf9f0e02 577 if( pshowcb == true )
klauss 106:a34fcf9f0e02 578 {
klauss 78:1353744f01e1 579 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 580 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 30:8dfb6d8de53d 581 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 78:1353744f01e1 582 char cb_status[ 32 ];
klauss 78:1353744f01e1 583 char cb_sip_status[ 32 ];
klauss 91:c2a86b1f8aaa 584 switch( cb->status ) {
klauss 91:c2a86b1f8aaa 585 case cb_idle : {
klauss 91:c2a86b1f8aaa 586 strcpy( cb_status, "cb_idle" );
klauss 91:c2a86b1f8aaa 587 break;
klauss 91:c2a86b1f8aaa 588 }
klauss 91:c2a86b1f8aaa 589 case cb_ringing : {
klauss 91:c2a86b1f8aaa 590 strcpy( cb_status, "cb_ringing" );
klauss 91:c2a86b1f8aaa 591 break;
klauss 91:c2a86b1f8aaa 592 }
klauss 91:c2a86b1f8aaa 593 case cb_trying : {
klauss 91:c2a86b1f8aaa 594 strcpy( cb_status,"cb_trying" );
klauss 91:c2a86b1f8aaa 595 break;
klauss 91:c2a86b1f8aaa 596 }
klauss 91:c2a86b1f8aaa 597 case cb_on_call : {
klauss 91:c2a86b1f8aaa 598 strcpy( cb_status, "cb_on_call" );
klauss 91:c2a86b1f8aaa 599 break;
klauss 91:c2a86b1f8aaa 600 }
klauss 91:c2a86b1f8aaa 601 case cb_busy : {
klauss 91:c2a86b1f8aaa 602 strcpy( cb_status, "cb_busy" );
klauss 91:c2a86b1f8aaa 603 break;
klauss 91:c2a86b1f8aaa 604 }
klauss 91:c2a86b1f8aaa 605 case cb_denied : {
klauss 91:c2a86b1f8aaa 606 strcpy( cb_status, "cb_denied" );
klauss 91:c2a86b1f8aaa 607 break;
klauss 91:c2a86b1f8aaa 608 }
klauss 78:1353744f01e1 609 }
klauss 91:c2a86b1f8aaa 610 switch( cb->sip->status ) {
klauss 91:c2a86b1f8aaa 611 case sip_idle : {
klauss 91:c2a86b1f8aaa 612 strcpy( cb_sip_status, "sip_idle" );
klauss 91:c2a86b1f8aaa 613 break;
klauss 91:c2a86b1f8aaa 614 }
klauss 91:c2a86b1f8aaa 615 case sip_waiting_trying : {
klauss 91:c2a86b1f8aaa 616 strcpy( cb_sip_status, "sip_waiting_trying" );
klauss 91:c2a86b1f8aaa 617 break;
klauss 91:c2a86b1f8aaa 618 }
klauss 91:c2a86b1f8aaa 619 case sip_trying : {
klauss 91:c2a86b1f8aaa 620 strcpy( cb_sip_status, "sip_trying" );
klauss 91:c2a86b1f8aaa 621 break;
klauss 91:c2a86b1f8aaa 622 }
klauss 91:c2a86b1f8aaa 623 case sip_ringing : {
klauss 91:c2a86b1f8aaa 624 strcpy( cb_sip_status, "sip_ringing" );
klauss 91:c2a86b1f8aaa 625 break;
klauss 91:c2a86b1f8aaa 626 }
klauss 91:c2a86b1f8aaa 627 case sip_busy : {
klauss 91:c2a86b1f8aaa 628 strcpy( cb_sip_status, "sip_busy" );
klauss 91:c2a86b1f8aaa 629 break;
klauss 91:c2a86b1f8aaa 630 }
klauss 91:c2a86b1f8aaa 631 case sip_ok : {
klauss 91:c2a86b1f8aaa 632 strcpy( cb_sip_status, "sip_ok" );
klauss 91:c2a86b1f8aaa 633 break;
klauss 91:c2a86b1f8aaa 634 }
klauss 91:c2a86b1f8aaa 635 case sip_on_call : {
klauss 91:c2a86b1f8aaa 636 strcpy( cb_sip_status, "sip_on_call" );
klauss 91:c2a86b1f8aaa 637 break;
klauss 91:c2a86b1f8aaa 638 }
klauss 91:c2a86b1f8aaa 639 case sip_denied : {
klauss 91:c2a86b1f8aaa 640 strcpy( cb_sip_status, "sip_denied" );
klauss 91:c2a86b1f8aaa 641 break;
klauss 91:c2a86b1f8aaa 642 }
klauss 78:1353744f01e1 643 }
klauss 78:1353744f01e1 644 char cbx_to_string[ 254 ];
klauss 78:1353744f01e1 645 char aux[ 16 ];
klauss 78:1353744f01e1 646 strcpy( cbx_to_string, "Ext :: " );
klauss 78:1353744f01e1 647 itoa( cb->get_ext(), aux , 10 );
klauss 98:43b45f26b430 648 strcat( cbx_to_string, aux );
klauss 97:8985817e8847 649 strcat( cbx_to_string, " :: Port :: " );
klauss 97:8985817e8847 650 itoa( cb->get_port(), aux , 10 );
klauss 78:1353744f01e1 651 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 652 strcat( cbx_to_string, " :: Status -- " );
klauss 78:1353744f01e1 653 strcat( cbx_to_string, cb_status );
klauss 78:1353744f01e1 654 strcat( cbx_to_string, " - " );
klauss 78:1353744f01e1 655 strcat( cbx_to_string, cb_sip_status );
klauss 91:c2a86b1f8aaa 656 if( cb->get_timeslice() != 0 ) {
klauss 78:1353744f01e1 657 strcat( cbx_to_string, " -- on TimeSlice :: " );
klauss 78:1353744f01e1 658 itoa( cb->get_timeslice(), aux , 10 );
klauss 78:1353744f01e1 659 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 660 }
klauss 78:1353744f01e1 661 send_msg( cbx_to_string );
klauss 48:195c97f12e8e 662 }
klauss 78:1353744f01e1 663 pshowcb = false;
klauss 48:195c97f12e8e 664 }
klauss 97:8985817e8847 665
klauss 105:a930035b6556 666 // exibe Ramal e Porta do objeto SIP associado a cada cbx
klauss 105:a930035b6556 667 // assim como exibe um timer crescente em segundos, desde o ultimo pacote recebido deste cbx respondendo registro.
klauss 97:8985817e8847 668 if( show_sip == true ){
klauss 97:8985817e8847 669 show_sip = false;
klauss 99:e80850c51106 670 send_msg(":: Sip :: %u", v_cb->size() );
klauss 97:8985817e8847 671 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 97:8985817e8847 672 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 99:e80850c51106 673 send_msg("ext :: %d -- port :: %d -- timer %d", cb->get_sip_ext(), cb->get_sip_port(), cb->get_timer() );
klauss 97:8985817e8847 674 }
klauss 97:8985817e8847 675 }
klauss 106:a34fcf9f0e02 676
klauss 106:a34fcf9f0e02 677
klauss 91:c2a86b1f8aaa 678
klauss 105:a930035b6556 679 // aciona rotina de envio de pacote de flood
klauss 81:3656f00ab3db 680 if( pflood == true ) flood();
klauss 106:a34fcf9f0e02 681
klauss 106:a34fcf9f0e02 682
klauss 91:c2a86b1f8aaa 683
klauss 105:a930035b6556 684 // exibe status de conexao ETH
klauss 91:c2a86b1f8aaa 685 if( debug_eth ) {
klauss 81:3656f00ab3db 686 debug_eth = false;
klauss 81:3656f00ab3db 687 send_msg("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" );
klauss 81:3656f00ab3db 688 }
klauss 106:a34fcf9f0e02 689
klauss 106:a34fcf9f0e02 690
klauss 91:c2a86b1f8aaa 691
klauss 105:a930035b6556 692 // testa se existe um pacote recebido pela interface CBx->Header pendente para ser processado.
klauss 91:c2a86b1f8aaa 693 if( status != __WAITING__ ) {
klauss 81:3656f00ab3db 694 pkg_wdt = RX_CB_IDLE;
klauss 105:a930035b6556 695 xmemcpy( cb_rx_buffer, buffer_from_cb_ptr, CB_BUFFER_SIZE );
klauss 0:4d17cd9c8f9d 696 status = __WAITING__;
klauss 81:3656f00ab3db 697 missed_pkg--;
klauss 105:a930035b6556 698 xmemcpy( buffer, cb_rx_buffer, CB_BUFFER_SIZE );
klauss 91:c2a86b1f8aaa 699
klauss 105:a930035b6556 700 // exibe esta pacote caso seja solicitado
klauss 105:a930035b6556 701 // TODO implementar um debug que exibe somente, todos os pacotes recebidos
klauss 91:c2a86b1f8aaa 702 if( rx ) {
klauss 81:3656f00ab3db 703 char str[ 1024 ];
klauss 81:3656f00ab3db 704 strcpy( str, "RX :: \n\r " );
klauss 105:a930035b6556 705 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 81:3656f00ab3db 706 char tmp[ 16 ];
klauss 81:3656f00ab3db 707 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 81:3656f00ab3db 708 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 91:c2a86b1f8aaa 709
klauss 81:3656f00ab3db 710 else strcat( str, " " );
klauss 81:3656f00ab3db 711 }
klauss 81:3656f00ab3db 712 send_msg( "%s", str );
klauss 91:c2a86b1f8aaa 713 rx = false;
klauss 81:3656f00ab3db 714 }
klauss 105:a930035b6556 715
klauss 105:a930035b6556 716 // chama rotina para interpretar e validar o pacote recebido
klauss 105:a930035b6556 717 data = parse_vz_pkg( &ext, &port, &type, buffer );
klauss 91:c2a86b1f8aaa 718
klauss 105:a930035b6556 719 // caso parse_vz_pkg tenha retorno diferente de NULL, trata-se de um pacote valido para ser processado
klauss 91:c2a86b1f8aaa 720 if( data != NULL ) {
klauss 105:a930035b6556 721 // atualiza referencias de menor e maior ramal conhecidos ate o momento
klauss 78:1353744f01e1 722 if( min_ext == 0 ) min_ext = ext;
klauss 91:c2a86b1f8aaa 723
klauss 78:1353744f01e1 724 if( ext > max_ext ) max_ext = ext;
klauss 91:c2a86b1f8aaa 725
klauss 78:1353744f01e1 726 if( ext < min_ext ) min_ext = ext;
klauss 99:e80850c51106 727
klauss 105:a930035b6556 728 // verifica se precisa "exportar" esse pacote para debug externo
klauss 99:e80850c51106 729 if( debug_fw ){
klauss 99:e80850c51106 730 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 731 }
klauss 99:e80850c51106 732
klauss 105:a930035b6556 733 // por decisao de projeto, todos os pacote de telemetria sao exportados para parse no servidor
klauss 104:62646ef786a3 734 if( type == __TELEMETRY__ )
klauss 104:62646ef786a3 735 {
klauss 104:62646ef786a3 736 telemetry_counter++;
klauss 104:62646ef786a3 737 //FIXME colocar o dtelos aqui
klauss 104:62646ef786a3 738 }
klauss 105:a930035b6556 739
klauss 105:a930035b6556 740 // alguns tratamentos adicionais que sao pertinentes em caso de pacotes diferentes do tipo __AUDIO__
klauss 105:a930035b6556 741 if( type != __AUDIO__ )
klauss 105:a930035b6556 742 {
klauss 105:a930035b6556 743 // vefifica quais pacotes precisam ser exportados para o servidor e faz a substituicao do typo para __FW__ sem com isso
klauss 105:a930035b6556 744 // alterar o pacote de origem.
klauss 99:e80850c51106 745 if(
klauss 99:e80850c51106 746 type == __TELEMETRY__ ||
klauss 99:e80850c51106 747 type == __CB_STATS__ ||
klauss 99:e80850c51106 748 type == __FW1__ ||
klauss 99:e80850c51106 749 type == __FW2__ ||
klauss 99:e80850c51106 750 type == __FW3__ ||
klauss 99:e80850c51106 751 type == __FW4__ ||
klauss 99:e80850c51106 752 type == __FW5__ ||
klauss 99:e80850c51106 753 type == __FW6__
klauss 99:e80850c51106 754 ) type = __FW__;
klauss 99:e80850c51106 755
klauss 105:a930035b6556 756 // 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 757 if( debug_cb_rx == true ){
klauss 99:e80850c51106 758 send_msg("Pkg from CBx :: ( %d, %d ) -- Type :: %d", ext, port, type );
klauss 99:e80850c51106 759 }
klauss 105:a930035b6556 760
klauss 105:a930035b6556 761 // exibe o pacote recebido propriamente
klauss 105:a930035b6556 762 if( debug_show_cpld )
klauss 105:a930035b6556 763 {
klauss 105:a930035b6556 764 char str[ 1024 ];
klauss 105:a930035b6556 765 strcpy( str, "RX :: \n\r " );
klauss 105:a930035b6556 766 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 105:a930035b6556 767 char tmp[ 16 ];
klauss 105:a930035b6556 768 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 105:a930035b6556 769 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 105:a930035b6556 770
klauss 105:a930035b6556 771 else strcat( str, " " );
klauss 105:a930035b6556 772 }
klauss 105:a930035b6556 773 send_msg( "%s", str );
klauss 105:a930035b6556 774 }
klauss 99:e80850c51106 775
klauss 105:a930035b6556 776 // verificacoes de ACKS
klauss 0:4d17cd9c8f9d 777 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 778 if( cb != NULL ) {
klauss 92:92df17f538a8 779 if( data[ 0 ] & BIT7 ) {
klauss 91:c2a86b1f8aaa 780 if( type == __BOOT__ ) {
klauss 105:a930035b6556 781 send2callboxes( build_cb_package( ext, port, __REGISTRY__,
klauss 105:a930035b6556 782 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 783 } else {
klauss 81:3656f00ab3db 784 if( debug_main ) debug_msg("Received ack pkg with seq_num %d", data[ 0 ] );
klauss 91:c2a86b1f8aaa 785
klauss 91:c2a86b1f8aaa 786 switch( type ) {
klauss 81:3656f00ab3db 787 case __INVITE__ : {
klauss 81:3656f00ab3db 788 if( debug_main || debug_invite ) debug_msg("Invite Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 91:c2a86b1f8aaa 789 break;
klauss 81:3656f00ab3db 790 }
klauss 81:3656f00ab3db 791 case __CB_BYE__ : {
klauss 81:3656f00ab3db 792 if( debug_main || debug_invite ) debug_msg("BYE Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 793 cb->set_bye_response_ok();
klauss 91:c2a86b1f8aaa 794 break;
klauss 81:3656f00ab3db 795 }
klauss 81:3656f00ab3db 796 case __REGISTRY__ : {
klauss 81:3656f00ab3db 797 if( debug_main || debug_aging ) debug_msg("Registry ACK from %d in pkg :: %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 798 break;
klauss 81:3656f00ab3db 799 }
klauss 81:3656f00ab3db 800 default : {
klauss 91:c2a86b1f8aaa 801 if( debug_main || debug_aging ) debug_msg("ACK from %d in pkg :: %d :: type %d", ext, cb->get_msg_id(), type );
klauss 91:c2a86b1f8aaa 802 }
klauss 81:3656f00ab3db 803 }
klauss 92:92df17f538a8 804 if( type != __REGISTRY__ && type != __CB_BYE__ ) type = __DO_NOTHING__;
klauss 92:92df17f538a8 805 if( type == __CB_BYE__ ){
klauss 92:92df17f538a8 806 VZ_call * call = __find_Call__( v_call, ext );
klauss 92:92df17f538a8 807 if( call != NULL ){
klauss 92:92df17f538a8 808 if( call->get_elapsed_time() < 120000 ){
klauss 105:a930035b6556 809 // devido a um bug na implementacao do protocolo, eventualmente o cbx envia
klauss 105:a930035b6556 810 // um pacote de bye nao intencional que encerrava ligacoes precocemente
klauss 105:a930035b6556 811 // solucao encontrada, colocado um timer de controle.
klauss 92:92df17f538a8 812 if( debug_invite ) debug_msg("%d ack bye ignored", ext );
klauss 92:92df17f538a8 813 type = __DO_NOTHING__;
klauss 92:92df17f538a8 814 }
klauss 92:92df17f538a8 815 }
klauss 92:92df17f538a8 816 }
klauss 0:4d17cd9c8f9d 817 }
klauss 0:4d17cd9c8f9d 818 }
klauss 0:4d17cd9c8f9d 819 }
klauss 0:4d17cd9c8f9d 820 }
klauss 91:c2a86b1f8aaa 821 } else type = __DO_NOTHING__;
klauss 0:4d17cd9c8f9d 822 }
klauss 105:a930035b6556 823
klauss 106:a34fcf9f0e02 824
klauss 106:a34fcf9f0e02 825
klauss 105:a930035b6556 826 // exibe uptime atual
klauss 105:a930035b6556 827 if( show_uptime )
klauss 105:a930035b6556 828 {
klauss 105:a930035b6556 829 show_uptime = false;
klauss 105:a930035b6556 830 send_msg("Uptime: %d", uptime );
klauss 105:a930035b6556 831 }
klauss 106:a34fcf9f0e02 832
klauss 106:a34fcf9f0e02 833
klauss 91:c2a86b1f8aaa 834
klauss 105:a930035b6556 835 // exibe algumas informacoes pertinentes sobre quantidade de variaveis alocadas e tamanho de alguns objetos.
klauss 104:62646ef786a3 836 if( sizes == true ) {
klauss 104:62646ef786a3 837 sizes = false;
klauss 85:b6f2dc1d0f4f 838 send_msg("CB_New (%u) -- CB_Delete (%u)", cb_new_counter, cb_delete_counter );
klauss 85:b6f2dc1d0f4f 839 send_msg("SIP_New (%u) -- SIP_Delete (%u)", sip_new_counter, sip_delete_counter );
klauss 87:679ee0d594a9 840 send_msg("RTP_header_New (%u) -- RTP_header_Delete (%u)", rtp_header_new_counter, rtp_header_delete_counter );
klauss 87:679ee0d594a9 841 send_msg("RTP_body_New (%u) -- RTP_body_Delete (%u)", rtp_body_new_counter, rtp_body_delete_counter );
klauss 107:cf1e43414adb 842 send_msg("Call_New (%u) -- Call_Delete (%u)", call_new_counter, call_delete_counter );
klauss 87:679ee0d594a9 843 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 844 send_msg("Memory is %s", ( memory_is_over ) ? "Over" : "Ok" );
klauss 81:3656f00ab3db 845 send_msg("Missed_Pkg :: %d ::", missed_pkg );
klauss 87:679ee0d594a9 846 send_msg("Sizeof Sip :: %u", sizeof( Sip ) );
klauss 87:679ee0d594a9 847 send_msg("Sizeof Call_Box :: %u", sizeof( Call_Box ) );
klauss 87:679ee0d594a9 848 send_msg("Sizeof VZ_call :: %u", sizeof( VZ_call ) );
klauss 87:679ee0d594a9 849 send_msg("Sizeof RTP :: %u", sizeof( RTP ) );
klauss 87:679ee0d594a9 850 send_msg("Sizeof RTP_Header :: %u", sizeof( RTP_Header ) );
klauss 87:679ee0d594a9 851 send_msg("Sizeof RTP_Body :: %u", sizeof( RTP_Body ) );
klauss 87:679ee0d594a9 852 send_msg("Sizeof Vector :: %u", sizeof( Vector ) );
klauss 87:679ee0d594a9 853 send_msg("Sizeof Timeslice :: %u", sizeof( Timeslice ) );
klauss 87:679ee0d594a9 854 send_msg("Sizeof Watchdog :: %u", sizeof( Watchdog ) );
klauss 81:3656f00ab3db 855 }
klauss 106:a34fcf9f0e02 856
klauss 106:a34fcf9f0e02 857
klauss 91:c2a86b1f8aaa 858
klauss 105:a930035b6556 859 // zera os contadores de cks de pacotes recebidos na interface CBx->Header, e outros contadores relacionados
klauss 91:c2a86b1f8aaa 860 if( reset_cks == true ) {
klauss 81:3656f00ab3db 861 pkg_cksok = 0;
klauss 81:3656f00ab3db 862 pkg_ckserr = 0;
klauss 99:e80850c51106 863 pkg_zero = 0;
klauss 81:3656f00ab3db 864 reset_cks = false;
klauss 99:e80850c51106 865 out_of_range = 0;
klauss 99:e80850c51106 866 missed_pkg = 0;
klauss 100:09a23fcd3bdf 867 delayed_pkg_to_cb = 0;
klauss 99:e80850c51106 868 cpld_pkg_tx_counter = 0;
klauss 99:e80850c51106 869 cpld_pkg_rx_counter = 0;
klauss 81:3656f00ab3db 870 pcks_s = true;
klauss 81:3656f00ab3db 871 }
klauss 106:a34fcf9f0e02 872
klauss 106:a34fcf9f0e02 873
klauss 91:c2a86b1f8aaa 874
klauss 105:a930035b6556 875 // exibe os contadores de cks de pacotes recebidos na interface CBx->Header, e outros contadores relacionados
klauss 91:c2a86b1f8aaa 876 if( pcks_s == true ) {
klauss 105:a930035b6556 877 send_msg(
klauss 105:a930035b6556 878 "\r\n"
klauss 105:a930035b6556 879 " PKG_CKS OK: %d ( %003.2f )\r\n"
klauss 105:a930035b6556 880 " PKG_CKS ERR: %d ( %003.2f )\r\n"
klauss 105:a930035b6556 881 " PKG_0: %d ( %003.2f )\r\n"
klauss 105:a930035b6556 882 " Out_of_range: %d ( %003.2f )\r\n"
klauss 105:a930035b6556 883 " Miss_Pkg: %d\r\n"
klauss 105:a930035b6556 884 " TX_delayed: %d\n\r"
klauss 105:a930035b6556 885 " TX_Counter: %d\n\r"
klauss 105:a930035b6556 886 " RX_Counter: %d\r\n",
klauss 105:a930035b6556 887 pkg_cksok, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_cksok / cpld_pkg_rx_counter ) * 100,
klauss 105:a930035b6556 888 pkg_ckserr, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_ckserr / cpld_pkg_rx_counter ) * 100,
klauss 105:a930035b6556 889 pkg_zero, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_zero / cpld_pkg_rx_counter ) * 100,
klauss 105:a930035b6556 890 out_of_range, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) out_of_range / cpld_pkg_rx_counter ) * 100,
klauss 105:a930035b6556 891 missed_pkg,
klauss 105:a930035b6556 892 delayed_pkg_to_cb,
klauss 105:a930035b6556 893 cpld_pkg_tx_counter,
klauss 105:a930035b6556 894 cpld_pkg_rx_counter
klauss 105:a930035b6556 895 );
klauss 81:3656f00ab3db 896 pcks_s = false;
klauss 81:3656f00ab3db 897 }
klauss 105:a930035b6556 898
klauss 106:a34fcf9f0e02 899
klauss 106:a34fcf9f0e02 900
klauss 105:a930035b6556 901 // zera os contadores de pacotes que resultaram em falha de envio vio ETH
klauss 105:a930035b6556 902 if( reset_missed_send_udp_pkg ){
klauss 105:a930035b6556 903 miss_fw_send_pkg = 0;
klauss 105:a930035b6556 904 miss_prompt_udp_send_pkg = 0;
klauss 105:a930035b6556 905 miss_sip_registry_send_pkg = 0;
klauss 105:a930035b6556 906 miss_sip_invite_send_pkg = 0;
klauss 105:a930035b6556 907 miss_sip_bye_send_pkg = 0;
klauss 105:a930035b6556 908 miss_sip_unregistry_send_pkg = 0;
klauss 105:a930035b6556 909 miss_sip_ok_send_pkg = 0;
klauss 105:a930035b6556 910 miss_sip_rcv_bye_send_pkg = 0;
klauss 105:a930035b6556 911 miss_wdt_send_pkg = 0;
klauss 105:a930035b6556 912 miss_prompt_udp_send_pkg = 0;
klauss 105:a930035b6556 913 miss_ftp_udp_send_pkg = 0;
klauss 105:a930035b6556 914 miss_prompt_udp_rcv_pkg = 0;
klauss 105:a930035b6556 915 reset_missed_send_udp_pkg = false;
klauss 105:a930035b6556 916 missed_send_udp_pkg = true;
klauss 105:a930035b6556 917 }
klauss 105:a930035b6556 918
klauss 106:a34fcf9f0e02 919
klauss 106:a34fcf9f0e02 920
klauss 105:a930035b6556 921 // exibe estatisticas de pacotes que resultaram em falha de envio na interface ETH
klauss 105:a930035b6556 922 if( missed_send_udp_pkg )
klauss 105:a930035b6556 923 {
klauss 105:a930035b6556 924 send_msg( "\r\nMissed pkgs ::\r\n "
klauss 105:a930035b6556 925 "FW: %d\r\n "
klauss 105:a930035b6556 926 "Prompt UDP %d\r\n "
klauss 105:a930035b6556 927 "Registry %d\r\n "
klauss 105:a930035b6556 928 "Invite %d\r\n "
klauss 105:a930035b6556 929 "Bye %d\r\n "
klauss 105:a930035b6556 930 "Unregistry %d\r\n "
klauss 105:a930035b6556 931 "UDP incoming ( invite ans ) %d\r\n "
klauss 105:a930035b6556 932 "UDP incoming ( bye from * ) %d\r\n "
klauss 105:a930035b6556 933 "Wdt [ alive | rst ] %d\r\n "
klauss 105:a930035b6556 934 "Rcv prompt %d\r\n "
klauss 105:a930035b6556 935 "[ debug | send ]_msg %d\r\n "
klauss 105:a930035b6556 936 "RTP %d\r\n",
klauss 105:a930035b6556 937 miss_fw_send_pkg,
klauss 105:a930035b6556 938 miss_prompt_udp_send_pkg,
klauss 105:a930035b6556 939 miss_sip_registry_send_pkg,
klauss 105:a930035b6556 940 miss_sip_invite_send_pkg,
klauss 105:a930035b6556 941 miss_sip_bye_send_pkg,
klauss 105:a930035b6556 942 miss_sip_unregistry_send_pkg,
klauss 105:a930035b6556 943 miss_sip_ok_send_pkg,
klauss 105:a930035b6556 944 miss_sip_rcv_bye_send_pkg,
klauss 105:a930035b6556 945 miss_wdt_send_pkg,
klauss 105:a930035b6556 946 miss_prompt_udp_send_pkg,
klauss 105:a930035b6556 947 miss_prompt_udp_rcv_pkg,
klauss 105:a930035b6556 948 miss_ftp_udp_send_pkg
klauss 105:a930035b6556 949 );
klauss 105:a930035b6556 950
klauss 105:a930035b6556 951 missed_send_udp_pkg = false;
klauss 105:a930035b6556 952 }
klauss 105:a930035b6556 953
klauss 106:a34fcf9f0e02 954
klauss 105:a930035b6556 955 // rotina de teste para sobrecarga do processamento do cbx.
klauss 100:09a23fcd3bdf 956 if( flood_bug_pkg ){
klauss 100:09a23fcd3bdf 957 static int id = 0x10;
klauss 100:09a23fcd3bdf 958 if( id < 10 ) id = 0x0b;
klauss 105:a930035b6556 959 send2callboxes( build_cb_package( 5828, 5123, __REGISTRY__,
klauss 105:a930035b6556 960 ( char * )buffer, id++, CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 100:09a23fcd3bdf 961 }
klauss 100:09a23fcd3bdf 962
klauss 106:a34fcf9f0e02 963
klauss 105:a930035b6556 964 // toggle nos leds de debug da header.
klauss 104:62646ef786a3 965 if( led_sync_timer.read() >= 1 ) {
klauss 78:1353744f01e1 966 led_sync_timer.reset();
klauss 78:1353744f01e1 967 led3 = !led3;
klauss 78:1353744f01e1 968 CAB_LED = !CAB_LED;
klauss 78:1353744f01e1 969 }
klauss 105:a930035b6556 970
klauss 106:a34fcf9f0e02 971
klauss 105:a930035b6556 972 // rotina de teste ( usados durante desenvolvimento
klauss 106:a34fcf9f0e02 973 /*
klauss 105:a930035b6556 974 if( main_test )
klauss 105:a930035b6556 975 {
klauss 106:a34fcf9f0e02 976 static int n = 0;
klauss 106:a34fcf9f0e02 977 static int next_ext = 5000;
klauss 105:a930035b6556 978
klauss 105:a930035b6556 979 main_test = false;
klauss 105:a930035b6556 980 data = buffer;
klauss 106:a34fcf9f0e02 981 ext = next_ext + ( n * ( ( n % 2 ) ? 1 : -1 ) );
klauss 106:a34fcf9f0e02 982 n++;
klauss 106:a34fcf9f0e02 983 port = ext;
klauss 106:a34fcf9f0e02 984 type = __REGISTRY__;
klauss 105:a930035b6556 985 }
klauss 106:a34fcf9f0e02 986 */
klauss 106:a34fcf9f0e02 987
klauss 105:a930035b6556 988 // begin switch para tratemento de pacote baseado no type
klauss 91:c2a86b1f8aaa 989 switch( type ) {
klauss 91:c2a86b1f8aaa 990 case __DO_NOTHING__ :
klauss 91:c2a86b1f8aaa 991 {}
klauss 91:c2a86b1f8aaa 992 break;
klauss 91:c2a86b1f8aaa 993
klauss 0:4d17cd9c8f9d 994 case __CB_BYE__ : {
klauss 105:a930035b6556 995 /***
klauss 105:a930035b6556 996 -- Fluxo --
klauss 105:a930035b6556 997 [ Principio ]
klauss 105:a930035b6556 998 -- Receber um pedido de bye
klauss 105:a930035b6556 999 -- procurar e encerrar a ligacao
klauss 105:a930035b6556 1000
klauss 105:a930035b6556 1001 - Incrementa o contador de pacotes recebidos
klauss 105:a930035b6556 1002 - Procura por este cbx no vetor logico de CBx.
klauss 105:a930035b6556 1003 - Em caso de nao localizacao - Nao executa tratamento e exibe mensagem informando, caso seja habilitado degub
klauss 105:a930035b6556 1004 - Em caso de localizacao do cbx
klauss 105:a930035b6556 1005 - Seta o BIT7 para ACK
klauss 105:a930035b6556 1006 - assume que esta ligacao já foi removida
klauss 105:a930035b6556 1007 - procura por essa call no vetor logico de calls
klauss 105:a930035b6556 1008 - Em caso de nao localizacao
klauss 105:a930035b6556 1009 - Executa Busca no vetor logico de CBX
klauss 105:a930035b6556 1010 - Em caso de localizacao
klauss 105:a930035b6556 1011 - assume que esta ligacao já foi removida
klauss 105:a930035b6556 1012 - Confirma que a ligacao nao tinha sido removida
klauss 105:a930035b6556 1013 - Envia pacote de BYE para o servidor asterisk ( * )
klauss 105:a930035b6556 1014 - Recupera o TimeSlice ( ts ) usado nesta call
klauss 105:a930035b6556 1015 - Atribui o TS 0 neste cbx
klauss 105:a930035b6556 1016 - Preenche a posição do TS com 0
klauss 105:a930035b6556 1017 - Retorna o status do CBx e do SIP deste CBx para idle
klauss 105:a930035b6556 1018 - Remove a call do vetor
klauss 105:a930035b6556 1019 - Envia pacote de ack para o CBx
klauss 105:a930035b6556 1020 - Atualiza o id da próxima msg que sera enviada para este CBx
klauss 105:a930035b6556 1021 - Em caso de nao localizacao
klauss 105:a930035b6556 1022 Exibe mensagem informando que exta call ja tinha sido removida, caso habilitado debug
klauss 105:a930035b6556 1023 - Em caso de localizacao
klauss 105:a930035b6556 1024 - Confirma que a ligacao nao tinha sido removida
klauss 105:a930035b6556 1025 - Envia pacote de BYE para o servidor asterisk ( * )
klauss 105:a930035b6556 1026 - Recupera o TimeSlice ( ts ) usado nesta call
klauss 105:a930035b6556 1027 - Atribui o TS 0 neste cbx
klauss 105:a930035b6556 1028 - Preenche a posição do TS com 0
klauss 105:a930035b6556 1029 - Retorna o status do CBx e do SIP deste CBx para idle
klauss 105:a930035b6556 1030 - Remove a call do vetor
klauss 105:a930035b6556 1031 - Envia pacote de ack para o CBx
klauss 105:a930035b6556 1032 - Atualiza o id da próxima msg que sera enviada para este CBx
klauss 105:a930035b6556 1033 - Deleta o objeto call.
klauss 105:a930035b6556 1034 - Em caso de nao localizacao
klauss 105:a930035b6556 1035 Exibe mensagem informando que exta call ja tinha sido removida, caso habilitado debug
klauss 105:a930035b6556 1036 ***/
klauss 105:a930035b6556 1037
klauss 63:0d95da692bb4 1038 cb_bye_counter++;
klauss 0:4d17cd9c8f9d 1039 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1040 if( cb != NULL ) {
klauss 81:3656f00ab3db 1041 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 1042 data[ 0 ] |= BIT7;
klauss 0:4d17cd9c8f9d 1043 cb->set_msg_id( data[ 0 ] );
klauss 81:3656f00ab3db 1044 if( debug_main || debug_invite ) debug_msg( "Request bye from CBx " );
klauss 92:92df17f538a8 1045
klauss 81:3656f00ab3db 1046 bool already_removed = true;
klauss 91:c2a86b1f8aaa 1047 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 1048 VZ_call * call = (VZ_call *)v_call->get_element( i );
klauss 91:c2a86b1f8aaa 1049 if( call->get_cb_ext() == ext ) {
klauss 81:3656f00ab3db 1050 already_removed = false;
klauss 4:de46f0d9b14d 1051 cb->send_bye();
klauss 91:c2a86b1f8aaa 1052
klauss 0:4d17cd9c8f9d 1053 ts->return_timeslice( cb->get_timeslice() );
klauss 0:4d17cd9c8f9d 1054 cb->set_timeslice( 0x00 );
klauss 78:1353744f01e1 1055 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 1056
klauss 0:4d17cd9c8f9d 1057 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 1058 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 1059
klauss 81:3656f00ab3db 1060 v_call->remove_element( i );
klauss 91:c2a86b1f8aaa 1061
klauss 105:a930035b6556 1062 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 105:a930035b6556 1063 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 1064
klauss 92:92df17f538a8 1065 // envia o ack bye depois atualiza o msg_id
klauss 92:92df17f538a8 1066 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 91:c2a86b1f8aaa 1067
klauss 3:cd9148672e25 1068 delete( call );
klauss 0:4d17cd9c8f9d 1069 }
klauss 0:4d17cd9c8f9d 1070 }
klauss 105:a930035b6556 1071
klauss 82:f55d13babca0 1072 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from vector call" );
klauss 105:a930035b6556 1073
klauss 105:a930035b6556 1074 // ok, mas nem sempre o cbx "entrou" em call
klauss 105:a930035b6556 1075 // Faz-se agora a busca no vetor logico de CBx e nao no de calls como acima
klauss 82:f55d13babca0 1076 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 1077 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 82:f55d13babca0 1078 if( cb->get_ext() == ext ) {
klauss 82:f55d13babca0 1079 already_removed = true;
klauss 105:a930035b6556 1080 // nao entra nesse if caso tenha sido removido no for de cima.
klauss 82:f55d13babca0 1081 if( cb->get_status() != cb_idle ) {
klauss 82:f55d13babca0 1082 already_removed = false;
klauss 82:f55d13babca0 1083 cb->send_bye();
klauss 82:f55d13babca0 1084
klauss 82:f55d13babca0 1085 ts->return_timeslice( cb->get_timeslice() );
klauss 82:f55d13babca0 1086 cb->set_timeslice( 0x00 );
klauss 82:f55d13babca0 1087 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 82:f55d13babca0 1088
klauss 82:f55d13babca0 1089 set_status( cb->status, cb_idle );
klauss 82:f55d13babca0 1090 set_status( cb->sip->status, sip_idle );
klauss 82:f55d13babca0 1091
klauss 105:a930035b6556 1092 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 105:a930035b6556 1093 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 82:f55d13babca0 1094
klauss 92:92df17f538a8 1095 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 82:f55d13babca0 1096 }
klauss 82:f55d13babca0 1097 }
klauss 82:f55d13babca0 1098 }
klauss 91:c2a86b1f8aaa 1099
klauss 82:f55d13babca0 1100 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from inviting queue" );
klauss 91:c2a86b1f8aaa 1101
klauss 78:1353744f01e1 1102 cb->registry();
klauss 91:c2a86b1f8aaa 1103 } else if( debug_invite || debug_main ) debug_msg("Bye from who ? %d", ext );
klauss 91:c2a86b1f8aaa 1104 }
klauss 91:c2a86b1f8aaa 1105 break;
klauss 91:c2a86b1f8aaa 1106
klauss 0:4d17cd9c8f9d 1107 case __INVITE__ : {
klauss 105:a930035b6556 1108 /***
klauss 105:a930035b6556 1109 [ Principio ]
klauss 105:a930035b6556 1110 -- Receber um pedido de chamada
klauss 105:a930035b6556 1111 -- tratar com o cbx o andamento da negociacao SIP ( informando disponibilidade de TS )
klauss 105:a930035b6556 1112 -- tratar com o * a negociacao SIP
klauss 105:a930035b6556 1113
klauss 105:a930035b6556 1114 -- Fluxo --
klauss 105:a930035b6556 1115 - Incrementa o contador de pacotes de pedido de chamada ( invite ) enviados.
klauss 105:a930035b6556 1116 - Procura por este CBx no vetor logico de CBX
klauss 105:a930035b6556 1117 - Em caso de nao localizacao
klauss 105:a930035b6556 1118 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 105:a930035b6556 1119 - Tenta criar o objeto CBx
klauss 105:a930035b6556 1120 - Caso consiga criar : adiciona o novo elemento no vetor logico de CBx
klauss 105:a930035b6556 1121 - Caso nao consiga criar : Exibe msg de erro condicionada a debuf e seta variavel indicando ausencia de memoria
klauss 105:a930035b6556 1122 - Em caso de localizacao ( ou tenha conseguido criar no caso acima )
klauss 105:a930035b6556 1123 - Atribui o valor recebido no pacote na posicao ID como sendo o id da proxima msg
klauss 105:a930035b6556 1124 - Verifica o status do CBx
klauss 105:a930035b6556 1125 - Caso status idle, inicia timer de tratamento de envio de ACK pro CBx
klauss 105:a930035b6556 1126 - Invoca rotina de tratamento SIP deste pedido de chamada.
klauss 105:a930035b6556 1127 ***/
klauss 105:a930035b6556 1128
klauss 63:0d95da692bb4 1129 invite_counter++;
klauss 78:1353744f01e1 1130 if( debug_invite ) debug_msg("Request Invite received from Cbx %i", ext);
klauss 0:4d17cd9c8f9d 1131 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1132 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1133 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 1134 if( debug_main ) debug_msg( "Adding CBx :: %i", ext );
klauss 91:c2a86b1f8aaa 1135 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 1136
klauss 91:c2a86b1f8aaa 1137 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1138 memory_is_over = true;
klauss 91:c2a86b1f8aaa 1139 if( debug_memory ) debug_msg("Invite allocation cb fail");
klauss 91:c2a86b1f8aaa 1140 } else {
klauss 91:c2a86b1f8aaa 1141 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 1142 }
klauss 89:0fe315117b00 1143 }
klauss 0:4d17cd9c8f9d 1144 }
klauss 91:c2a86b1f8aaa 1145 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 1146 cb->set_msg_id( data[ 0 ] );
klauss 92:92df17f538a8 1147 if( cb->status == cb_idle ){
klauss 92:92df17f538a8 1148 cb->set_invite_response_ok();
klauss 92:92df17f538a8 1149 cb->invite_retry_count_reset();
klauss 92:92df17f538a8 1150 }
klauss 87:679ee0d594a9 1151 invite_handler( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 1152 }
klauss 91:c2a86b1f8aaa 1153 }
klauss 91:c2a86b1f8aaa 1154 break;
klauss 4:de46f0d9b14d 1155 case __REGISTRY__ : {
klauss 105:a930035b6556 1156 /***
klauss 105:a930035b6556 1157 [ Principio ]
klauss 105:a930035b6556 1158 -- Receber um pacote de registro
klauss 105:a930035b6556 1159 -- Encaminhar para o *
klauss 105:a930035b6556 1160
klauss 105:a930035b6556 1161 -- Fluxo --
klauss 105:a930035b6556 1162 - incrementa o contador de pacotes de registro recebidos
klauss 105:a930035b6556 1163 - Procura por este cbx no vetor logico de CBx.
klauss 105:a930035b6556 1164 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 105:a930035b6556 1165 - Caso nao exista
klauss 105:a930035b6556 1166 - Verifica se o CBx foi encontrado no vetor
klauss 105:a930035b6556 1167 - Caso nao tenha sido
klauss 105:a930035b6556 1168 - Tentar criar este elemento
klauss 105:a930035b6556 1169 - Verifica criacao bem sucedida
klauss 105:a930035b6556 1170 - Caso tenha criado o elemento
klauss 105:a930035b6556 1171 - Adiciona o mesmo no vetor logico de CBX
klauss 105:a930035b6556 1172 - Caso nao tenha criado o elemento
klauss 105:a930035b6556 1173 - seta variavel de erro
klauss 105:a930035b6556 1174 - exibe mensagem de erro condicionada a debug.
klauss 105:a930035b6556 1175 - Caso o CBx tenha sido encontrado ( ou criado acima )
klauss 105:a930035b6556 1176 - Envia pacote de registro para o *
klauss 105:a930035b6556 1177 ***/
klauss 63:0d95da692bb4 1178 registry_counter++;
klauss 78:1353744f01e1 1179 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1180 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 1181 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1182 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 91:c2a86b1f8aaa 1183 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 1184
klauss 91:c2a86b1f8aaa 1185 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 1186 memory_is_over = true;
klauss 91:c2a86b1f8aaa 1187 if( debug_memory ) debug_msg("Registry cb allocation fail");
klauss 91:c2a86b1f8aaa 1188 } else {
klauss 91:c2a86b1f8aaa 1189 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 1190 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 91:c2a86b1f8aaa 1191 }
klauss 87:679ee0d594a9 1192 }
klauss 0:4d17cd9c8f9d 1193 }
klauss 78:1353744f01e1 1194 if( debug_main ) debug_msg("Registered %d - %d", ext, port );
klauss 91:c2a86b1f8aaa 1195
klauss 87:679ee0d594a9 1196 if( cb != NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 1197 }
klauss 91:c2a86b1f8aaa 1198 break;
klauss 4:de46f0d9b14d 1199 case __BOOT__ : {
klauss 105:a930035b6556 1200 /***
klauss 105:a930035b6556 1201 [ Principio ]
klauss 105:a930035b6556 1202 -- Receber um pacote de boot do CBx
klauss 105:a930035b6556 1203 -- Encaminhar um pacote do tipo "Registro" para o CBx
klauss 105:a930035b6556 1204 [ NOTA ] Por decisao de projeto, o CBx responde pacotes do tipo __REGISTRY__ pendindo pra se registrar.
klauss 105:a930035b6556 1205
klauss 105:a930035b6556 1206 -- Fluxo --
klauss 105:a930035b6556 1207 - Incrementa o contador de pacotes de boot recebidos
klauss 105:a930035b6556 1208 - Envia para o CBx remetendo o mesmo pacote, contendo o tipo __REGISTRY__ e o id como sendo o id recebido "OR" BIT7
klauss 105:a930035b6556 1209
klauss 105:a930035b6556 1210 ***/
klauss 63:0d95da692bb4 1211 boot_counter++;
klauss 99:e80850c51106 1212 if( debug_boot == true ){
klauss 99:e80850c51106 1213 send_msg("Rcv boot pkg from (%d, %d) pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 1214 }
klauss 105:a930035b6556 1215 send2callboxes( build_cb_package( ext, port, __REGISTRY__,
klauss 105:a930035b6556 1216 ( char * )data, data[ 0 ] | BIT7, CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 1217 }
klauss 91:c2a86b1f8aaa 1218 break;
klauss 99:e80850c51106 1219
klauss 99:e80850c51106 1220 case __FW__ : {
klauss 105:a930035b6556 1221 /***
klauss 105:a930035b6556 1222 [ Principio ]
klauss 105:a930035b6556 1223 -- Encaminhar para o servidor predeterminado todo pacote do tipo __FW__
klauss 105:a930035b6556 1224
klauss 105:a930035b6556 1225 -- Fluxo --
klauss 105:a930035b6556 1226 - Incrementa o contador de pacotes de __FW__ recebidos
klauss 105:a930035b6556 1227 - invoca rotina que exporta este pacote para o servidor
klauss 105:a930035b6556 1228 ***/
klauss 105:a930035b6556 1229 fw_counter++;
klauss 99:e80850c51106 1230 if( debug_fw_print ) send_msg("::FW pkg from %d - %d::", ext, port );
klauss 99:e80850c51106 1231 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 1232 }
klauss 99:e80850c51106 1233 break;
klauss 91:c2a86b1f8aaa 1234
klauss 67:cdedc64d9921 1235 case __BOOTLOADER_CBX__ : {
klauss 105:a930035b6556 1236 /***
klauss 105:a930035b6556 1237 [ Principio ]
klauss 105:a930035b6556 1238 -- A definir, a priori a header seria um bypass responsavel apenas por gerenciar um TS.
klauss 105:a930035b6556 1239 -- Fluxo --
klauss 105:a930035b6556 1240 - incrementa o contador de pacote de bootloader CBx recebidos
klauss 105:a930035b6556 1241 - ???
klauss 105:a930035b6556 1242 ***/
klauss 67:cdedc64d9921 1243 bootloader_cbx_counter++;
klauss 91:c2a86b1f8aaa 1244 }
klauss 91:c2a86b1f8aaa 1245 break;
klauss 91:c2a86b1f8aaa 1246
klauss 105:a930035b6556 1247 case __PROMPT__ : {
klauss 105:a930035b6556 1248 /***
klauss 105:a930035b6556 1249 [ Principio ]
klauss 105:a930035b6556 1250 -- Receber um pacote do CBx
klauss 105:a930035b6556 1251 -- Criar, adicionar e registrar o CBx remetente
klauss 105:a930035b6556 1252 -- Exibir na tela possiveis comandos/saidas do CBx de interesse.
klauss 105:a930035b6556 1253 -- Fluxo --
klauss 105:a930035b6556 1254 - Procura por este cbx no vetor logico de CBx.
klauss 105:a930035b6556 1255 - Verifica se o CBx foi encontrado no vetor
klauss 105:a930035b6556 1256 - Caso nao tenha sido encontrado
klauss 105:a930035b6556 1257 - Verifica se nao existem mais cbx criados do que o permitido por definicao de projeto
klauss 105:a930035b6556 1258 - Caso nao exista
klauss 105:a930035b6556 1259 - Tentar criar este elemento
klauss 105:a930035b6556 1260 - Verifica criacao bem sucedida
klauss 105:a930035b6556 1261 - Caso nao tenha criado o elemento
klauss 105:a930035b6556 1262 - seta variavel de erro
klauss 105:a930035b6556 1263 - Caso tenha criado o elemento
klauss 105:a930035b6556 1264 - Adiciona o mesmo no vetor logico de CBX
klauss 105:a930035b6556 1265 - Caso tenha sido encontrado ( ou criado no caso acima )
klauss 105:a930035b6556 1266 - Encaminha pedido de registro para o *
klauss 105:a930035b6556 1267 - Verifica se o pacote recebido possui como conteudo "ping"
klauss 105:a930035b6556 1268 - em caso positivo
klauss 105:a930035b6556 1269 - exibe msg indicativa condicionada a debug
klauss 105:a930035b6556 1270 - em caso negativo
klauss 105:a930035b6556 1271 - Incrementa o contador de pacotes recebidos
klauss 105:a930035b6556 1272 - Exibe conteudo de pacote ( 32 primeiros bytes ) condicionado a debug
klauss 105:a930035b6556 1273 ***/
klauss 105:a930035b6556 1274
klauss 78:1353744f01e1 1275 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 1276
klauss 91:c2a86b1f8aaa 1277 if( cb == NULL ) {
klauss 105:a930035b6556 1278 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 105:a930035b6556 1279 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 105:a930035b6556 1280 cb = new Call_Box( ext, port );
klauss 105:a930035b6556 1281 if( cb == NULL ) {
klauss 105:a930035b6556 1282 memory_is_over = true;
klauss 105:a930035b6556 1283 } else {
klauss 105:a930035b6556 1284 v_cb->add( cb );
klauss 105:a930035b6556 1285 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 105:a930035b6556 1286 }
klauss 87:679ee0d594a9 1287 }
klauss 48:195c97f12e8e 1288 }
klauss 91:c2a86b1f8aaa 1289
klauss 92:92df17f538a8 1290 if( cb!= NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 1291
klauss 91:c2a86b1f8aaa 1292 if( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) {
klauss 78:1353744f01e1 1293 if( debug_ping ) send_msg( "Prompt pkg from ( %i, %i ) :: Ping", ext, port );
klauss 91:c2a86b1f8aaa 1294 } else {
klauss 78:1353744f01e1 1295 prompt_counter++;
klauss 105:a930035b6556 1296 //FIXME acumular a string e mandar via send_msg
klauss 78:1353744f01e1 1297 send_msg( "Prompt pkg from ( %i, %i ) ::", ext, port );
klauss 91:c2a86b1f8aaa 1298 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 1299 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 1300 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 1301 }
klauss 100:09a23fcd3bdf 1302 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 1303
klauss 105:a930035b6556 1304 if( tcp_session && !udp_query ) {
klauss 105:a930035b6556 1305 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 105:a930035b6556 1306 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 78:1353744f01e1 1307 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 1308 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 1309 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 1310 }
klauss 105:a930035b6556 1311 else if( udp_query )
klauss 105:a930035b6556 1312 {
klauss 105:a930035b6556 1313 char aux[ CB_BUFFER_SIZE + 3 ];
klauss 105:a930035b6556 1314 strncpy( aux, (char * )data, CB_BUFFER_SIZE );
klauss 105:a930035b6556 1315 strcat( aux, "\n\r\0" );
klauss 105:a930035b6556 1316 udp_query_send_msg( ( char *)data );
klauss 105:a930035b6556 1317 udp_query_send_msg( "\r\n> " );
klauss 105:a930035b6556 1318 }
klauss 48:195c97f12e8e 1319 }
klauss 91:c2a86b1f8aaa 1320 }
klauss 91:c2a86b1f8aaa 1321 break;
klauss 0:4d17cd9c8f9d 1322 case __AUDIO__ : {
klauss 105:a930035b6556 1323 /***
klauss 105:a930035b6556 1324 [ Principio ]
klauss 105:a930035b6556 1325 -- Receber pacote de audio do CBx
klauss 105:a930035b6556 1326 -- Encaminhar para o *
klauss 105:a930035b6556 1327 -- Fluxo --
klauss 105:a930035b6556 1328 - Incrementa o contador de pacotes recebidos
klauss 105:a930035b6556 1329 - Procura por este cbx no vetor logico de calls.
klauss 105:a930035b6556 1330 - Caso nao encontre
klauss 105:a930035b6556 1331 - Exibe mensagem de erro condicionada a debug
klauss 105:a930035b6556 1332 - Caso encontre
klauss 105:a930035b6556 1333 - Encaminha o pacote para o servidor
klauss 105:a930035b6556 1334 - Reseta o timer de idle desta ligacao
klauss 105:a930035b6556 1335 - Busca pelo CBX no vetor logico de CBx
klauss 105:a930035b6556 1336 - Caso encontre
klauss 105:a930035b6556 1337 - Informa que esta tendo comunicacao CBx->Header
klauss 105:a930035b6556 1338 ***/
klauss 63:0d95da692bb4 1339 audio_counter++;
klauss 78:1353744f01e1 1340 VZ_call * call = __find_Call__( v_call, ext );
klauss 91:c2a86b1f8aaa 1341 if( call != NULL ) {
klauss 105:a930035b6556 1342 // Por definicao de projeto, os dados de audio comecam no data + 2
klauss 105:a930035b6556 1343 // esses 2 bytes foram usados para id de debug durante o desenvolvimento
klauss 91:c2a86b1f8aaa 1344 char * pkg = call->build_eth_package( data + 2 );
klauss 0:4d17cd9c8f9d 1345 call->send_message( pkg );
klauss 92:92df17f538a8 1346 call->cbx_pkg_idle_timer_reset();
klauss 78:1353744f01e1 1347 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 105:a930035b6556 1348 if( cb != NULL ){
klauss 92:92df17f538a8 1349 cb->set_invite_response_ok();
klauss 92:92df17f538a8 1350 cb->invite_retry_count_reset();
klauss 92:92df17f538a8 1351 }
klauss 91:c2a86b1f8aaa 1352 } else {
klauss 78:1353744f01e1 1353 if( debug_main ) debug_msg("received missed package from CBx :: %i", ext );
klauss 0:4d17cd9c8f9d 1354 }
klauss 91:c2a86b1f8aaa 1355 }
klauss 91:c2a86b1f8aaa 1356 break;
klauss 105:a930035b6556 1357 }//end switch para tratemento de pacote baseado no type
klauss 105:a930035b6556 1358
klauss 99:e80850c51106 1359 { // rajada
klauss 105:a930035b6556 1360 /***
klauss 105:a930035b6556 1361 [ Principio ]
klauss 105:a930035b6556 1362 -- Verifica se existem CBx em ligaçao
klauss 105:a930035b6556 1363 -- Verifica se os mesmos estao enviando pacotes de audio
klauss 105:a930035b6556 1364 -- Re-envio o pacote avisando que o CBx pode entrar no status "on_call"
klauss 105:a930035b6556 1365 ***/
klauss 99:e80850c51106 1366 if( invite_retry_timer.read_ms() > 30 ) {
klauss 99:e80850c51106 1367 invite_retry_timer.reset();
klauss 92:92df17f538a8 1368 static int retry_invite_pkg = 0;
klauss 99:e80850c51106 1369
klauss 92:92df17f538a8 1370 if( retry_invite_pkg >= v_cb->size() ) retry_invite_pkg = 0;
klauss 99:e80850c51106 1371
klauss 105:a930035b6556 1372 // procura por CBx em ligaçao sequencialmente
klauss 99:e80850c51106 1373 register int i = 0;
klauss 106:a34fcf9f0e02 1374
klauss 99:e80850c51106 1375 for( ; i < v_cb->size(); i++ ) {
klauss 99:e80850c51106 1376 Call_Box * cb = (Call_Box * )v_cb->get_element( i );
klauss 106:a34fcf9f0e02 1377 debug_msg("--%p--", cb );
klauss 99:e80850c51106 1378 if( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) ) {
klauss 99:e80850c51106 1379 if( i > retry_invite_pkg ) {
klauss 99:e80850c51106 1380 retry_invite_pkg = i;
klauss 99:e80850c51106 1381 break;
klauss 99:e80850c51106 1382 }
klauss 92:92df17f538a8 1383 }
klauss 99:e80850c51106 1384 }
klauss 99:e80850c51106 1385
klauss 99:e80850c51106 1386 if( i != v_cb->size() ){
klauss 99:e80850c51106 1387 Call_Box * cb = (Call_Box *)v_cb->get_element( retry_invite_pkg++ );
klauss 105:a930035b6556 1388
klauss 99:e80850c51106 1389 if( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) ) {
klauss 99:e80850c51106 1390 if( cb->get_invite_response() == false ) {
klauss 99:e80850c51106 1391 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 1392
klauss 99:e80850c51106 1393 buffer[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
klauss 105:a930035b6556 1394
klauss 105:a930035b6556 1395 // re-envia pacote confirmando que ligacao esta ok, CBx pode ligar o mic. e o speaker
klauss 105:a930035b6556 1396 send2callboxes( build_cb_package( cb->get_ext(), cb->get_port(), __INVITE__, ( char * )buffer,
klauss 105:a930035b6556 1397 cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 105:a930035b6556 1398
klauss 99:e80850c51106 1399 if( debug_invite ) debug_msg("resend invite OK to Cbx : ( %d, %d )", cb->get_ext(), cb->get_port() );
klauss 99:e80850c51106 1400 }
klauss 105:a930035b6556 1401
klauss 105:a930035b6556 1402 // fim das tentativas
klauss 99:e80850c51106 1403 if( cb->get_invite_retry_count() == 0 ) {
klauss 99:e80850c51106 1404 cb->send_bye();
klauss 92:92df17f538a8 1405
klauss 99:e80850c51106 1406 ts->return_timeslice( cb->get_timeslice() );
klauss 99:e80850c51106 1407 cb->set_timeslice( 0x00 );
klauss 99:e80850c51106 1408
klauss 99:e80850c51106 1409 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 1410
klauss 99:e80850c51106 1411 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 99:e80850c51106 1412 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 99:e80850c51106 1413 if( call->get_cb_ext() == cb->get_ext() ) {
klauss 99:e80850c51106 1414 v_call->remove_element( i );
klauss 99:e80850c51106 1415 if( call != NULL ) delete( call );
klauss 99:e80850c51106 1416 break;
klauss 99:e80850c51106 1417 }
klauss 92:92df17f538a8 1418 }
klauss 99:e80850c51106 1419
klauss 99:e80850c51106 1420 if( debug_invite ) debug_msg( "-- No audio pkgs --" );
klauss 99:e80850c51106 1421 set_status( cb->status, cb_idle );
klauss 99:e80850c51106 1422 set_status( cb->sip->status, sip_idle );
klauss 92:92df17f538a8 1423 }
klauss 92:92df17f538a8 1424 }
klauss 92:92df17f538a8 1425 }
klauss 92:92df17f538a8 1426 }
klauss 92:92df17f538a8 1427 }
klauss 106:a34fcf9f0e02 1428
klauss 106:a34fcf9f0e02 1429 //
klauss 106:a34fcf9f0e02 1430
klauss 105:a930035b6556 1431 /***
klauss 105:a930035b6556 1432 [ Principio ]
klauss 105:a930035b6556 1433 -- Para cada CBx em ligaçao
klauss 105:a930035b6556 1434 -- Verificar e encaminhar pacotes recebidos da interface ETH-Header-CBx
klauss 105:a930035b6556 1435 -- Fluxo --
klauss 105:a930035b6556 1436 - Para cada elemento do vetor call
klauss 105:a930035b6556 1437 - Verificar se consta algo pendente para processamento no sentido ETH->Header->Cbx
klauss 105:a930035b6556 1438 - Caso existe
klauss 105:a930035b6556 1439 - Procurar por este CBx no vetor lógico de CBx
klauss 105:a930035b6556 1440 - Caso seja encontrado
klauss 105:a930035b6556 1441 - Enviar pacote recebido para este CBx
klauss 105:a930035b6556 1442 - Caso nao seja encontrado
klauss 105:a930035b6556 1443 - Exibe msg de erro condicionado a debug
klauss 105:a930035b6556 1444 ***/
klauss 106:a34fcf9f0e02 1445
klauss 91:c2a86b1f8aaa 1446 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 106:a34fcf9f0e02 1447 //debug_msg("");
klauss 0:4d17cd9c8f9d 1448 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 0:4d17cd9c8f9d 1449 int length = 0;
klauss 0:4d17cd9c8f9d 1450 char * tmp = call->get_eth_message( &length );
klauss 91:c2a86b1f8aaa 1451 if( tmp != NULL ) {
klauss 0:4d17cd9c8f9d 1452 int cb_port = 0xffff;
klauss 78:1353744f01e1 1453 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() );
klauss 91:c2a86b1f8aaa 1454 if( cb != NULL ) {
klauss 4:de46f0d9b14d 1455 cb_port = cb->get_port();
klauss 91:c2a86b1f8aaa 1456
klauss 105:a930035b6556 1457 uint8_t * pkg2cb = build_cb_package( call->get_cb_ext(), cb_port, __AUDIO__,
klauss 100:09a23fcd3bdf 1458 tmp, __AUDIO__, length, write_buffer );
klauss 99:e80850c51106 1459
klauss 100:09a23fcd3bdf 1460 send2callboxes( pkg2cb );
klauss 99:e80850c51106 1461
klauss 91:c2a86b1f8aaa 1462 } else if( debug_main ) debug_msg("received missed package from CBx :: %i -- Type :: %i", ext, type );
klauss 0:4d17cd9c8f9d 1463 }
klauss 14:22a35f575502 1464 }
klauss 106:a34fcf9f0e02 1465 //
klauss 105:a930035b6556 1466 /***
klauss 105:a930035b6556 1467 [ Principio ]
klauss 105:a930035b6556 1468 -- Verificar se já se passou determinada unidade de tempo
klauss 105:a930035b6556 1469 -- Baseado nisso, chamar a funcao [ 1 ] refresh ou [ 2 ] wake_all_up
klauss 105:a930035b6556 1470 [ 1 ] -- Encaminha periodicamente um pacote de __REGISTRY__ para cada CBx, um por vez.
klauss 105:a930035b6556 1471 [ 2 ] -- Busca por elementos que constem sem seus pares registrados e manda um __PROMPT__ ping para cada um, um por vez.
klauss 105:a930035b6556 1472 ***/
klauss 106:a34fcf9f0e02 1473
klauss 106:a34fcf9f0e02 1474 if( timer_sync_refresh.read_ms() > 250 )
klauss 106:a34fcf9f0e02 1475 {
klauss 89:0fe315117b00 1476 timer_sync_refresh.reset();
klauss 91:c2a86b1f8aaa 1477
klauss 89:0fe315117b00 1478 static uint8_t mode = TIME_TO_REFRESH;
klauss 104:62646ef786a3 1479
klauss 106:a34fcf9f0e02 1480 if( mode == TIME_TO_REFRESH )
klauss 106:a34fcf9f0e02 1481 {
klauss 89:0fe315117b00 1482 mode = TIME_TO_WAKE_UP;
klauss 106:a34fcf9f0e02 1483 refresh( v_cb );
klauss 106:a34fcf9f0e02 1484 }
klauss 106:a34fcf9f0e02 1485 else
klauss 106:a34fcf9f0e02 1486 {
klauss 89:0fe315117b00 1487 mode = TIME_TO_REFRESH;
klauss 106:a34fcf9f0e02 1488 if( wake_all ) if( v_call->size() == 0 ) wake_all_up( v_cb );
klauss 89:0fe315117b00 1489 }
klauss 89:0fe315117b00 1490 }
klauss 106:a34fcf9f0e02 1491
klauss 78:1353744f01e1 1492 // check sip messages only for cbx in call ?
klauss 78:1353744f01e1 1493 int ext_to__be_removed = sip_manager( v_cb );
klauss 91:c2a86b1f8aaa 1494 if( ext_to__be_removed > 0x00 ) {
klauss 78:1353744f01e1 1495 Call_Box * cb = __find_CB__( v_cb, ext_to__be_removed );
klauss 91:c2a86b1f8aaa 1496 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 1497 if( cb->status == cb_on_call ) {
klauss 4:de46f0d9b14d 1498 ts->return_timeslice( cb->get_timeslice() );
klauss 4:de46f0d9b14d 1499 cb->set_timeslice( 0x00 );
klauss 4:de46f0d9b14d 1500 buffer[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 1501
klauss 78:1353744f01e1 1502 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 1503 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 1504
klauss 91:c2a86b1f8aaa 1505 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 4:de46f0d9b14d 1506 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 91:c2a86b1f8aaa 1507 if( call->get_cb_ext() == ext_to__be_removed ) {
klauss 4:de46f0d9b14d 1508 v_call->remove_element( i );
klauss 4:de46f0d9b14d 1509 delete( call );
klauss 4:de46f0d9b14d 1510 }
klauss 2:93bec7313ccc 1511 }
klauss 91:c2a86b1f8aaa 1512
klauss 92:92df17f538a8 1513 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 91:c2a86b1f8aaa 1514
klauss 105:a930035b6556 1515 send2callboxes( build_cb_package( ext, port, __CB_BYE__,
klauss 105:a930035b6556 1516 ( char * )buffer, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 1517
klauss 91:c2a86b1f8aaa 1518 if( debug_invite ) debug_msg("Received Bye from *");
klauss 0:4d17cd9c8f9d 1519 }
klauss 91:c2a86b1f8aaa 1520 } else if( debug_main ) debug_msg("Missed bye request from * CBx :: %d", ext );
klauss 0:4d17cd9c8f9d 1521 }
klauss 91:c2a86b1f8aaa 1522
klauss 81:3656f00ab3db 1523 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 10:22da1a0ac1e1 1524 call_manager( v_call, v_cb, buffer, write_buffer, ts );
klauss 91:c2a86b1f8aaa 1525
klauss 106:a34fcf9f0e02 1526
klauss 105:a930035b6556 1527 /* tratamento de pedidos de ligação já em andamento com o * */
klauss 81:3656f00ab3db 1528 invite_handler( v_call, v_cb, ts, NULL );
klauss 91:c2a86b1f8aaa 1529
klauss 106:a34fcf9f0e02 1530
klauss 81:3656f00ab3db 1531 /* rotina de verificação de TS's perdidos */
klauss 91:c2a86b1f8aaa 1532 if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() != __MAX_TIMESLICES__ ) ) {
klauss 91:c2a86b1f8aaa 1533 bool ts_reset = true;
klauss 91:c2a86b1f8aaa 1534 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 1535 if ( ( ( Call_Box * )v_cb->get_element( i ) )->get_status() != cb_idle &&
klauss 91:c2a86b1f8aaa 1536 ( ( Call_Box * )v_cb->get_element( i ) )->get_sip_status() != sip_idle ) {
klauss 78:1353744f01e1 1537 ts_reset = false;
klauss 78:1353744f01e1 1538 break;
klauss 78:1353744f01e1 1539 }
klauss 91:c2a86b1f8aaa 1540 }
klauss 91:c2a86b1f8aaa 1541 if( ts_reset ) {
klauss 81:3656f00ab3db 1542 if( debug_invite ) debug_msg("Resetando TS");
klauss 78:1353744f01e1 1543 ts->reset();
klauss 78:1353744f01e1 1544 }
klauss 0:4d17cd9c8f9d 1545 }
klauss 91:c2a86b1f8aaa 1546
klauss 106:a34fcf9f0e02 1547
klauss 81:3656f00ab3db 1548 /* rotina que esvazia possiveis pacotes que não foram transmitidos para evitar conflito */
klauss 72:895ca792c647 1549 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 1550
klauss 106:a34fcf9f0e02 1551
klauss 105:a930035b6556 1552 // atribui o valor default para a variavel type
klauss 30:8dfb6d8de53d 1553 type = __DO_NOTHING__;
klauss 91:c2a86b1f8aaa 1554
klauss 106:a34fcf9f0e02 1555
klauss 105:a930035b6556 1556 // verifica o status da conexao ETH, caso exteja conectado ( == 0 ) atribui o valor maximo ao contador de controle
klauss 81:3656f00ab3db 1557 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 106:a34fcf9f0e02 1558
klauss 106:a34fcf9f0e02 1559
klauss 106:a34fcf9f0e02 1560
klauss 105:a930035b6556 1561 // responsavel por atualizar os contadores de controle utilizados para tickar o wdt
klauss 105:a930035b6556 1562 // e tickar o wdt
klauss 91:c2a86b1f8aaa 1563 if( wdt_timer.read() >= 1 ) {
klauss 106:a34fcf9f0e02 1564
klauss 91:c2a86b1f8aaa 1565 //FIXME remove myself
klauss 83:b8a1d8fdeaeb 1566 uptime++;
klauss 91:c2a86b1f8aaa 1567
klauss 81:3656f00ab3db 1568 wdt_timer.reset();
klauss 91:c2a86b1f8aaa 1569
klauss 81:3656f00ab3db 1570 if( wdt_show ) debug_wdt = true;
klauss 91:c2a86b1f8aaa 1571
klauss 81:3656f00ab3db 1572 if( external_wdt ) external_wdt--;
klauss 81:3656f00ab3db 1573 if( pkg_wdt ) pkg_wdt--;
klauss 81:3656f00ab3db 1574 if( eth_wdt ) eth_wdt--;
klauss 91:c2a86b1f8aaa 1575
klauss 91:c2a86b1f8aaa 1576 if( eth_wdt && external_wdt && pkg_wdt ){
klauss 81:3656f00ab3db 1577 wdt.kick();
klauss 81:3656f00ab3db 1578 }
klauss 81:3656f00ab3db 1579 }
klauss 105:a930035b6556 1580
klauss 106:a34fcf9f0e02 1581
klauss 105:a930035b6556 1582 // exibe informacoes referentes ao wdt, ultimo reset, status da eth, tempo em segundos desde o ultimo tick dowdt externo,
klauss 105:a930035b6556 1583 // tempo em segundos desde o ultimo pacote recebido da interface fibra
klauss 91:c2a86b1f8aaa 1584 if( debug_wdt ) {
klauss 87:679ee0d594a9 1585 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 1586 lpc_low_level_input_counter = 0;
klauss 91:c2a86b1f8aaa 1587
klauss 81:3656f00ab3db 1588 debug_wdt = false;
klauss 91:c2a86b1f8aaa 1589 if( eth_status == 0 ) {
klauss 91:c2a86b1f8aaa 1590 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 1591 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1592 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1593 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1594 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1595 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1596 );
klauss 91:c2a86b1f8aaa 1597 } else {
klauss 91:c2a86b1f8aaa 1598 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 1599 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1600 ETH_CONNECT_TIMEOUT - eth_wdt,
klauss 91:c2a86b1f8aaa 1601 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1602 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1603 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1604 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1605 );
klauss 81:3656f00ab3db 1606 }
klauss 81:3656f00ab3db 1607 }
klauss 105:a930035b6556 1608
klauss 105:a930035b6556 1609 // atribui o valor default ao ponteiro de dados
klauss 105:a930035b6556 1610 data = NULL;
klauss 105:a930035b6556 1611 }//fim while ( main loop )
klauss 0:4d17cd9c8f9d 1612 }