Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Wed Feb 25 18:44:11 2015 +0000
Revision:
104:62646ef786a3
Parent:
102:98c7155e8bea
Child:
105:a930035b6556
- Remo??o do implementado para bootloader cbx.; - Remo??o do implementado para telemetria.; - Remo??o do implementado ( comentado ) em file_system_manager.cpp; - BUGFIX perda de conex?o serial quando recebido um comando via eth;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 91:c2a86b1f8aaa 1 #include "eth.h"
klauss 91:c2a86b1f8aaa 2 #include "bits.h"
klauss 74:81c47fff88a5 3 #include "UART3Interrupt.h" // for RXBuffer[ __CB_BUFFER_SIZE__ ];
klauss 91:c2a86b1f8aaa 4 #include "utils.h"
klauss 91:c2a86b1f8aaa 5 #include "parallelcpld.h"
klauss 91:c2a86b1f8aaa 6 #include "debug.h"
klauss 91:c2a86b1f8aaa 7 #include "flood.h"
klauss 91:c2a86b1f8aaa 8 #include "bootloader_cbx.h"
klauss 91:c2a86b1f8aaa 9 #include "call_manager.h"
klauss 91:c2a86b1f8aaa 10 #include "call_box_manager.h"
klauss 91:c2a86b1f8aaa 11 #include "sip_manager.h"
klauss 74:81c47fff88a5 12 #include "shared_variables.h"
klauss 74:81c47fff88a5 13 #include "prompt.h"
klauss 0:4d17cd9c8f9d 14 #include "configs.h"
klauss 87:679ee0d594a9 15 #include "sdram.h"
klauss 99:e80850c51106 16 #include "fw.h"
klauss 0:4d17cd9c8f9d 17
klauss 87:679ee0d594a9 18 volatile u16_t lpc_low_level_input_counter = 0;
klauss 85:b6f2dc1d0f4f 19
klauss 91:c2a86b1f8aaa 20 int main()
klauss 91:c2a86b1f8aaa 21 {
klauss 81:3656f00ab3db 22 init_wdt();
klauss 91:c2a86b1f8aaa 23
klauss 81:3656f00ab3db 24 config_lpc();
klauss 91:c2a86b1f8aaa 25
klauss 0:4d17cd9c8f9d 26 start_cpld();
klauss 91:c2a86b1f8aaa 27
klauss 100:09a23fcd3bdf 28 debug_uart3 = true;
klauss 91:c2a86b1f8aaa 29 if( sdram_init() == 1 ) {
klauss 87:679ee0d594a9 30 send_msg("******* Failed to initialize SDRAM *******");
klauss 87:679ee0d594a9 31 return 1;
klauss 89:0fe315117b00 32 } else {
klauss 87:679ee0d594a9 33 send_msg("******* Success to initialize SDRAM *******");
klauss 87:679ee0d594a9 34 }
klauss 91:c2a86b1f8aaa 35
klauss 43:455522f98de5 36 init_fsystem();
klauss 91:c2a86b1f8aaa 37
klauss 89:0fe315117b00 38 {
klauss 89:0fe315117b00 39 char s[ 32 ];
klauss 89:0fe315117b00 40 mbed_mac_address( s );
klauss 89:0fe315117b00 41 send_msg( "::Mac::%02x:%02x:%02x:%02x:%02x:%02x:: ", s[0],s[1],s[2],s[3],s[4],s[5] );
klauss 89:0fe315117b00 42 }
klauss 91:c2a86b1f8aaa 43
klauss 78:1353744f01e1 44 short int eth_status = __init_eth__();
klauss 91:c2a86b1f8aaa 45 if( eth_status ) {
klauss 87:679ee0d594a9 46 send_msg("******* Cannot connect to eth *******");
klauss 91:c2a86b1f8aaa 47 } else {
klauss 81:3656f00ab3db 48 send_msg("******* Connection eth - ok *******");
klauss 78:1353744f01e1 49 init_prompt_eth();
klauss 82:f55d13babca0 50 init_external_wdt()
klauss 8:e3bfe62a477e 51 }
klauss 91:c2a86b1f8aaa 52
klauss 78:1353744f01e1 53 Timer sync_timer, led_sync_timer;
klauss 78:1353744f01e1 54 sync_timer.start(), led_sync_timer.start();
klauss 91:c2a86b1f8aaa 55
klauss 0:4d17cd9c8f9d 56 /* representa ramal do call box */
klauss 0:4d17cd9c8f9d 57 int ext = 0;
klauss 91:c2a86b1f8aaa 58
klauss 0:4d17cd9c8f9d 59 /* representa porta do call box */
klauss 78:1353744f01e1 60 int port = 0;
klauss 91:c2a86b1f8aaa 61
klauss 0:4d17cd9c8f9d 62 /* buffer para onde se copia os dados vindos do cb para tratameno interno */
klauss 91:c2a86b1f8aaa 63 uint8_t buffer[ __CB_BUFFER_SIZE__ ];
klauss 91:c2a86b1f8aaa 64
klauss 0:4d17cd9c8f9d 65 /* buffer de escrita do pacote de saida que sera enviado pro cb / servidor */
klauss 0:4d17cd9c8f9d 66 uint8_t write_buffer[ __CB_BUFFER_SIZE__ ];
klauss 91:c2a86b1f8aaa 67
klauss 0:4d17cd9c8f9d 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 62:07e5bdc9f8f7 71 /* Armazena o ultimo pacote recebido dos CBx */
klauss 62:07e5bdc9f8f7 72 uint8_t cb_rx_buffer[ __CB_BUFFER_SIZE__ ];
klauss 91:c2a86b1f8aaa 73
klauss 0:4d17cd9c8f9d 74 /* referencia para os dados contidos no pacote, sem o header */
klauss 0:4d17cd9c8f9d 75 uint8_t * data = NULL;
klauss 91:c2a86b1f8aaa 76
klauss 0:4d17cd9c8f9d 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 87:679ee0d594a9 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 0:4d17cd9c8f9d 83 /* representa a lista de ligacoes ativas na cabeceira */
klauss 0:4d17cd9c8f9d 84 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 85
klauss 0:4d17cd9c8f9d 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 81:3656f00ab3db 93 /* instancia o vetor de call boxes // calls */
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 91:c2a86b1f8aaa 102 } else if( v_call == NULL ) {
klauss 91:c2a86b1f8aaa 103 while( v_call == NULL ) {
klauss 0:4d17cd9c8f9d 104 Vector * v_call = new Vector();
klauss 91:c2a86b1f8aaa 105 if( sync_timer.read() > 5 ) {
klauss 48:195c97f12e8e 106 send_msg("Erro ao alocar o vetor de Calls");
klauss 78:1353744f01e1 107 sync_timer.reset();
klauss 0:4d17cd9c8f9d 108 }
klauss 0:4d17cd9c8f9d 109 }
klauss 0:4d17cd9c8f9d 110 }
klauss 91:c2a86b1f8aaa 111
klauss 91:c2a86b1f8aaa 112 if( v_cb == NULL ) {
klauss 89:0fe315117b00 113 memory_is_over = true;
klauss 89:0fe315117b00 114 if( debug_memory ) debug_msg("Call_Box vector allocation fail");
klauss 89:0fe315117b00 115 }
klauss 91:c2a86b1f8aaa 116
klauss 91:c2a86b1f8aaa 117 if( v_call == NULL ) {
klauss 89:0fe315117b00 118 memory_is_over = true;
klauss 89:0fe315117b00 119 if( debug_memory ) debug_msg("Call vector allocation fail");
klauss 89:0fe315117b00 120 }
klauss 91:c2a86b1f8aaa 121
klauss 91:c2a86b1f8aaa 122 for( register uint16_t i = 0; i < __CB_BUFFER_SIZE__; i++ ) {
klauss 63:0d95da692bb4 123 cb_rx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 124 cb_tx_buffer[ i ] = 0;
klauss 63:0d95da692bb4 125 }
klauss 91:c2a86b1f8aaa 126
klauss 0:4d17cd9c8f9d 127 reset_leds();
klauss 91:c2a86b1f8aaa 128
klauss 33:735fd60e96d8 129 udp_timer.start();
klauss 99:e80850c51106 130
klauss 99:e80850c51106 131 init_fw_handler();
klauss 99:e80850c51106 132
klauss 99:e80850c51106 133 led2 = 0;
klauss 81:3656f00ab3db 134 init_ranges();
klauss 91:c2a86b1f8aaa 135
klauss 80:61d61c9eb75c 136 init_refresh();
klauss 91:c2a86b1f8aaa 137
klauss 78:1353744f01e1 138 init_aging();
klauss 91:c2a86b1f8aaa 139
klauss 89:0fe315117b00 140 init_sync_refresh();
klauss 91:c2a86b1f8aaa 141
klauss 81:3656f00ab3db 142 //init_invite_pgk_retry_manager();
klauss 91:c2a86b1f8aaa 143
klauss 81:3656f00ab3db 144 //void init_bye_pgk_retry_manager();
klauss 91:c2a86b1f8aaa 145
klauss 62:07e5bdc9f8f7 146 static uint8_t count = 0;
klauss 91:c2a86b1f8aaa 147
klauss 89:0fe315117b00 148 //short int bl_ret = init_bl_handler();
klauss 89:0fe315117b00 149 //if( dbl ) send_msg("Valor de retorno do bl_habdler = %d", bl_ret );
klauss 91:c2a86b1f8aaa 150
klauss 78:1353744f01e1 151 uint8_t max_registered_cbx = 0;
klauss 91:c2a86b1f8aaa 152
klauss 81:3656f00ab3db 153 bool wake_all = false;
klauss 91:c2a86b1f8aaa 154
klauss 81:3656f00ab3db 155 uint16_t pkg_wdt = RX_CB_IDLE;
klauss 81:3656f00ab3db 156 uint16_t eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 83:b8a1d8fdeaeb 157 uint32_t uptime = 0;
klauss 99:e80850c51106 158 led1 = 0;
klauss 68:b54993674190 159 send_msg("Ready");
klauss 91:c2a86b1f8aaa 160
klauss 104:62646ef786a3 161 //bool registry_test = true;
klauss 104:62646ef786a3 162 //bool registry_test2 = false;
klauss 104:62646ef786a3 163
klauss 104:62646ef786a3 164 //static int next_value = 5000;
klauss 92:92df17f538a8 165 //static int nex_test_registry = next_value;
klauss 92:92df17f538a8 166
klauss 99:e80850c51106 167 Timer invite_retry_timer;
klauss 99:e80850c51106 168 invite_retry_timer.start();
klauss 100:09a23fcd3bdf 169 debug_uart3 = false;
klauss 91:c2a86b1f8aaa 170
klauss 78:1353744f01e1 171 /*------------------------------------------ main loop ---------------------------------------------------------------*/
klauss 91:c2a86b1f8aaa 172 while( true ) {
klauss 99:e80850c51106 173 reset_leds();
klauss 100:09a23fcd3bdf 174 // need be removed;
klauss 99:e80850c51106 175
klauss 78:1353744f01e1 176 if( v_cb->size() > max_registered_cbx ) max_registered_cbx = v_cb->size();
klauss 91:c2a86b1f8aaa 177
klauss 91:c2a86b1f8aaa 178 if( sync_timer.read() > 5 ) {
klauss 78:1353744f01e1 179 sync_timer.reset();
klauss 91:c2a86b1f8aaa 180
klauss 91:c2a86b1f8aaa 181 if( debug_cks == true ) {
klauss 81:3656f00ab3db 182 pcks_s = true;
klauss 78:1353744f01e1 183 }
klauss 91:c2a86b1f8aaa 184
klauss 91:c2a86b1f8aaa 185 if( debug_alive == true ) {
klauss 81:3656f00ab3db 186 pshowcb = true;
klauss 78:1353744f01e1 187 }
klauss 100:09a23fcd3bdf 188
klauss 91:c2a86b1f8aaa 189 if( !( ++count % 15 ) ) {
klauss 91:c2a86b1f8aaa 190 if( eth_status ) {
klauss 78:1353744f01e1 191 eth_status = __init_eth__();
klauss 91:c2a86b1f8aaa 192 if( eth_status ) {
klauss 78:1353744f01e1 193 if( debug_main ) debug_msg("Cannot connect to eth");
klauss 91:c2a86b1f8aaa 194 } else {
klauss 78:1353744f01e1 195 if( debug_main ) debug_msg("Connection eth - ok");
klauss 78:1353744f01e1 196 init_prompt_eth();
klauss 82:f55d13babca0 197 init_external_wdt()
klauss 78:1353744f01e1 198 }
klauss 78:1353744f01e1 199 }
klauss 78:1353744f01e1 200 }
klauss 100:09a23fcd3bdf 201
klauss 81:3656f00ab3db 202 //35 sec.
klauss 91:c2a86b1f8aaa 203 if( ( count > 7 ) && ( wake_all == false ) ) {
klauss 81:3656f00ab3db 204 wake_all = true;
klauss 78:1353744f01e1 205 if( debug_wake == true ) send_msg( "Time to wake" );
klauss 78:1353744f01e1 206 }
klauss 78:1353744f01e1 207 }
klauss 91:c2a86b1f8aaa 208
klauss 68:b54993674190 209 //FIXMEj colocar uma condicao aqui caso necessario pra nao comprometer ligacoes ...
klauss 35:96885a7931f0 210 prompt_process( NULL );
klauss 104:62646ef786a3 211
klauss 104:62646ef786a3 212 if( reconnect_stats )
klauss 104:62646ef786a3 213 {
klauss 104:62646ef786a3 214 reconnect_stats = false;
klauss 104:62646ef786a3 215 char str[ 256 ];
klauss 104:62646ef786a3 216 snprintf( str, 256,
klauss 104:62646ef786a3 217 "Reconnetc Status from :: \nFW :: %d\nPrompt UDP :: %d\n",
klauss 104:62646ef786a3 218
klauss 104:62646ef786a3 219 miss_fw_send_pkg,
klauss 104:62646ef786a3 220 miss_prompt_udp_send_pkg
klauss 104:62646ef786a3 221 );
klauss 104:62646ef786a3 222 send_msg( str );
klauss 104:62646ef786a3 223 }
klauss 91:c2a86b1f8aaa 224
klauss 91:c2a86b1f8aaa 225 if( r_stats ) {
klauss 91:c2a86b1f8aaa 226 boot_counter = 0;
klauss 91:c2a86b1f8aaa 227 registry_counter = 0;
klauss 91:c2a86b1f8aaa 228 invite_counter = 0;
klauss 91:c2a86b1f8aaa 229 audio_counter = 0;
klauss 91:c2a86b1f8aaa 230 telemetry_counter = 0;
klauss 91:c2a86b1f8aaa 231 cb_bye_counter = 0;
klauss 91:c2a86b1f8aaa 232 prompt_counter = 0;
klauss 91:c2a86b1f8aaa 233 flood_counter = 0;
klauss 67:cdedc64d9921 234 bootloader_cbx_counter = 0;
klauss 99:e80850c51106 235 cb_stats_counter = 0;
klauss 63:0d95da692bb4 236 r_stats = false;
klauss 63:0d95da692bb4 237 stats = true;
klauss 63:0d95da692bb4 238 }
klauss 91:c2a86b1f8aaa 239
klauss 91:c2a86b1f8aaa 240 if( stats ) {
klauss 63:0d95da692bb4 241 char str[ 200 ];
klauss 99:e80850c51106 242 snprintf( str, 200, "\n\rReceived 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",
klauss 99:e80850c51106 243 boot_counter, registry_counter, invite_counter, audio_counter, telemetry_counter, cb_stats_counter, cb_bye_counter, prompt_counter, flood_counter, bootloader_cbx_counter );
klauss 63:0d95da692bb4 244 send_msg( str );
klauss 63:0d95da692bb4 245 stats =false;
klauss 63:0d95da692bb4 246 }
klauss 91:c2a86b1f8aaa 247
klauss 91:c2a86b1f8aaa 248 if( list ) {
klauss 78:1353744f01e1 249 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 250
klauss 78:1353744f01e1 251 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 91:c2a86b1f8aaa 252
klauss 78:1353744f01e1 253 if( min_ext % 2 ) missed_cb++;
klauss 91:c2a86b1f8aaa 254
klauss 78:1353744f01e1 255 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 91:c2a86b1f8aaa 256
klauss 78:1353744f01e1 257 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 258 if( v_cb->size() == 1 ) {
klauss 78:1353744f01e1 259 send_msg(" %d ", ( ( Call_Box * )v_cb->get_element( 0 ) )->get_ext() );
klauss 91:c2a86b1f8aaa 260 } else if( v_cb->size() > 1 ) {
klauss 62:07e5bdc9f8f7 261 char str[ 1024 ];
klauss 78:1353744f01e1 262 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 62:07e5bdc9f8f7 263 register int i = 0;
klauss 91:c2a86b1f8aaa 264 for( ; i < v_cb->size(); i++ ) {
klauss 78:1353744f01e1 265 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 62:07e5bdc9f8f7 266 }
klauss 91:c2a86b1f8aaa 267
klauss 62:07e5bdc9f8f7 268 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 91:c2a86b1f8aaa 269
klauss 62:07e5bdc9f8f7 270 char aux[ 16 ];
klauss 78:1353744f01e1 271 strcpy( str, "\r\n> " );
klauss 91:c2a86b1f8aaa 272 for( i = 0; i < v_cb->size() - 1; i++ ) {
klauss 62:07e5bdc9f8f7 273 sprintf( aux, "%i, ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 274 strcat( str, aux );
klauss 78:1353744f01e1 275 if( ( i != 0 ) && !( ( i + 1 ) % 16 ) ) strcat( str, "\r\n> " );
klauss 62:07e5bdc9f8f7 276 }
klauss 62:07e5bdc9f8f7 277 sprintf( aux, "%i ", ext_list[ i ] );
klauss 62:07e5bdc9f8f7 278 strcat( str, aux );
klauss 62:07e5bdc9f8f7 279 send_msg( "%s", str );
klauss 62:07e5bdc9f8f7 280 }
klauss 91:c2a86b1f8aaa 281 list = false;
klauss 62:07e5bdc9f8f7 282 }
klauss 91:c2a86b1f8aaa 283
klauss 91:c2a86b1f8aaa 284 if( long_list ) {
klauss 81:3656f00ab3db 285 //FIXME implementar um algoritmo que me mostre o timeout de cada cbx do lado da linha, desse.
klauss 85:b6f2dc1d0f4f 286 /*
klauss 81:3656f00ab3db 287 uint8_t missed_cb = ( ( max_ext - min_ext ) + 1 ) - v_cb->size();
klauss 91:c2a86b1f8aaa 288
klauss 81:3656f00ab3db 289 if( ( max_ext % 2 ) == 0 ) missed_cb++;
klauss 91:c2a86b1f8aaa 290
klauss 81:3656f00ab3db 291 if( min_ext % 2 ) missed_cb++;
klauss 91:c2a86b1f8aaa 292
klauss 81:3656f00ab3db 293 if( min_ext == 0 && max_ext == 0 ) missed_cb = 0;
klauss 91:c2a86b1f8aaa 294
klauss 81:3656f00ab3db 295 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 81:3656f00ab3db 296 if( v_cb->size() == 1 ){
klauss 81:3656f00ab3db 297 send_msg(" %d ", ( ( Call_Box * )v_cb->get_element( 0 ) )->get_ext() );
klauss 81:3656f00ab3db 298 }else if( v_cb->size() > 1 ){
klauss 81:3656f00ab3db 299 char str[ 1024 ];
klauss 81:3656f00ab3db 300 int ext_list[ __MAX_CB_IN_A_BRANCH__ ];
klauss 81:3656f00ab3db 301 register int i = 0;
klauss 81:3656f00ab3db 302 for( ; i < ( v_cb->size() * 2 ); i += 2 ){
klauss 81:3656f00ab3db 303 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 81:3656f00ab3db 304 ext_list[ i + 1 ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_elapsed_time();
klauss 81:3656f00ab3db 305 }
klauss 91:c2a86b1f8aaa 306
klauss 81:3656f00ab3db 307 qsort( ext_list, v_cb->size(), sizeof( int ) * 2, ls_comp );
klauss 91:c2a86b1f8aaa 308
klauss 81:3656f00ab3db 309 char aux[ 16 ];
klauss 81:3656f00ab3db 310 strcpy( str, "\r\n> " );
klauss 81:3656f00ab3db 311 for( i = 0; i < ( v_cb->size() * 2 ) - 2; i++ ){
klauss 81:3656f00ab3db 312 sprintf( aux, "%i - %i,", ext_list[ i ], ext_list[ i + 1 ] );
klauss 81:3656f00ab3db 313 strcat( str, aux );
klauss 81:3656f00ab3db 314 strcat( str, "\r\n> " );
klauss 81:3656f00ab3db 315 }
klauss 81:3656f00ab3db 316 sprintf( aux, "%i - %i,", ext_list[ i ], ext_list[ i + 1 ] );
klauss 81:3656f00ab3db 317 strcat( str, aux );
klauss 81:3656f00ab3db 318 send_msg( "%s", str );
klauss 81:3656f00ab3db 319 }
klauss 85:b6f2dc1d0f4f 320 */
klauss 91:c2a86b1f8aaa 321 long_list = false;
klauss 52:12930cef17c4 322 }
klauss 91:c2a86b1f8aaa 323
klauss 91:c2a86b1f8aaa 324 if( pshowcb == true ) {
klauss 78:1353744f01e1 325 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 326 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 30:8dfb6d8de53d 327 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 78:1353744f01e1 328 char cb_status[ 32 ];
klauss 78:1353744f01e1 329 char cb_sip_status[ 32 ];
klauss 91:c2a86b1f8aaa 330 switch( cb->status ) {
klauss 91:c2a86b1f8aaa 331 case cb_idle : {
klauss 91:c2a86b1f8aaa 332 strcpy( cb_status, "cb_idle" );
klauss 91:c2a86b1f8aaa 333 break;
klauss 91:c2a86b1f8aaa 334 }
klauss 91:c2a86b1f8aaa 335 case cb_ringing : {
klauss 91:c2a86b1f8aaa 336 strcpy( cb_status, "cb_ringing" );
klauss 91:c2a86b1f8aaa 337 break;
klauss 91:c2a86b1f8aaa 338 }
klauss 91:c2a86b1f8aaa 339 case cb_trying : {
klauss 91:c2a86b1f8aaa 340 strcpy( cb_status,"cb_trying" );
klauss 91:c2a86b1f8aaa 341 break;
klauss 91:c2a86b1f8aaa 342 }
klauss 91:c2a86b1f8aaa 343 case cb_on_call : {
klauss 91:c2a86b1f8aaa 344 strcpy( cb_status, "cb_on_call" );
klauss 91:c2a86b1f8aaa 345 break;
klauss 91:c2a86b1f8aaa 346 }
klauss 91:c2a86b1f8aaa 347 case cb_busy : {
klauss 91:c2a86b1f8aaa 348 strcpy( cb_status, "cb_busy" );
klauss 91:c2a86b1f8aaa 349 break;
klauss 91:c2a86b1f8aaa 350 }
klauss 91:c2a86b1f8aaa 351 case cb_denied : {
klauss 91:c2a86b1f8aaa 352 strcpy( cb_status, "cb_denied" );
klauss 91:c2a86b1f8aaa 353 break;
klauss 91:c2a86b1f8aaa 354 }
klauss 78:1353744f01e1 355 }
klauss 91:c2a86b1f8aaa 356 switch( cb->sip->status ) {
klauss 91:c2a86b1f8aaa 357 case sip_idle : {
klauss 91:c2a86b1f8aaa 358 strcpy( cb_sip_status, "sip_idle" );
klauss 91:c2a86b1f8aaa 359 break;
klauss 91:c2a86b1f8aaa 360 }
klauss 91:c2a86b1f8aaa 361 case sip_waiting_trying : {
klauss 91:c2a86b1f8aaa 362 strcpy( cb_sip_status, "sip_waiting_trying" );
klauss 91:c2a86b1f8aaa 363 break;
klauss 91:c2a86b1f8aaa 364 }
klauss 91:c2a86b1f8aaa 365 case sip_trying : {
klauss 91:c2a86b1f8aaa 366 strcpy( cb_sip_status, "sip_trying" );
klauss 91:c2a86b1f8aaa 367 break;
klauss 91:c2a86b1f8aaa 368 }
klauss 91:c2a86b1f8aaa 369 case sip_ringing : {
klauss 91:c2a86b1f8aaa 370 strcpy( cb_sip_status, "sip_ringing" );
klauss 91:c2a86b1f8aaa 371 break;
klauss 91:c2a86b1f8aaa 372 }
klauss 91:c2a86b1f8aaa 373 case sip_busy : {
klauss 91:c2a86b1f8aaa 374 strcpy( cb_sip_status, "sip_busy" );
klauss 91:c2a86b1f8aaa 375 break;
klauss 91:c2a86b1f8aaa 376 }
klauss 91:c2a86b1f8aaa 377 case sip_ok : {
klauss 91:c2a86b1f8aaa 378 strcpy( cb_sip_status, "sip_ok" );
klauss 91:c2a86b1f8aaa 379 break;
klauss 91:c2a86b1f8aaa 380 }
klauss 91:c2a86b1f8aaa 381 case sip_on_call : {
klauss 91:c2a86b1f8aaa 382 strcpy( cb_sip_status, "sip_on_call" );
klauss 91:c2a86b1f8aaa 383 break;
klauss 91:c2a86b1f8aaa 384 }
klauss 91:c2a86b1f8aaa 385 case sip_denied : {
klauss 91:c2a86b1f8aaa 386 strcpy( cb_sip_status, "sip_denied" );
klauss 91:c2a86b1f8aaa 387 break;
klauss 91:c2a86b1f8aaa 388 }
klauss 78:1353744f01e1 389 }
klauss 78:1353744f01e1 390 char cbx_to_string[ 254 ];
klauss 78:1353744f01e1 391 char aux[ 16 ];
klauss 78:1353744f01e1 392 strcpy( cbx_to_string, "Ext :: " );
klauss 78:1353744f01e1 393 itoa( cb->get_ext(), aux , 10 );
klauss 98:43b45f26b430 394 strcat( cbx_to_string, aux );
klauss 97:8985817e8847 395 strcat( cbx_to_string, " :: Port :: " );
klauss 97:8985817e8847 396 itoa( cb->get_port(), aux , 10 );
klauss 78:1353744f01e1 397 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 398 strcat( cbx_to_string, " :: Status -- " );
klauss 78:1353744f01e1 399 strcat( cbx_to_string, cb_status );
klauss 78:1353744f01e1 400 strcat( cbx_to_string, " - " );
klauss 78:1353744f01e1 401 strcat( cbx_to_string, cb_sip_status );
klauss 91:c2a86b1f8aaa 402 if( cb->get_timeslice() != 0 ) {
klauss 78:1353744f01e1 403 strcat( cbx_to_string, " -- on TimeSlice :: " );
klauss 78:1353744f01e1 404 itoa( cb->get_timeslice(), aux , 10 );
klauss 78:1353744f01e1 405 strcat( cbx_to_string, aux );
klauss 78:1353744f01e1 406 }
klauss 78:1353744f01e1 407 send_msg( cbx_to_string );
klauss 48:195c97f12e8e 408 }
klauss 78:1353744f01e1 409 pshowcb = false;
klauss 48:195c97f12e8e 410 }
klauss 97:8985817e8847 411
klauss 97:8985817e8847 412 if( show_sip == true ){
klauss 97:8985817e8847 413 show_sip = false;
klauss 99:e80850c51106 414 send_msg(":: Sip :: %u", v_cb->size() );
klauss 97:8985817e8847 415 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 97:8985817e8847 416 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 99:e80850c51106 417 send_msg("ext :: %d -- port :: %d -- timer %d", cb->get_sip_ext(), cb->get_sip_port(), cb->get_timer() );
klauss 97:8985817e8847 418 }
klauss 97:8985817e8847 419 }
klauss 91:c2a86b1f8aaa 420
klauss 81:3656f00ab3db 421 if( pflood == true ) flood();
klauss 91:c2a86b1f8aaa 422
klauss 91:c2a86b1f8aaa 423 if( debug_eth ) {
klauss 81:3656f00ab3db 424 debug_eth = false;
klauss 81:3656f00ab3db 425 send_msg("Eth status %s", ( eth_status == 0 ) ? "Connected" : "Disconnected" );
klauss 81:3656f00ab3db 426 }
klauss 91:c2a86b1f8aaa 427
klauss 91:c2a86b1f8aaa 428 if( status != __WAITING__ ) {
klauss 81:3656f00ab3db 429 pkg_wdt = RX_CB_IDLE;
klauss 86:bf7b0d4c3232 430 xmemcpy( cb_rx_buffer, buffer_from_cb_ptr, __CB_BUFFER_SIZE__ );
klauss 0:4d17cd9c8f9d 431 status = __WAITING__;
klauss 81:3656f00ab3db 432 missed_pkg--;
klauss 91:c2a86b1f8aaa 433 xmemcpy( buffer, cb_rx_buffer, __CB_BUFFER_SIZE__ );
klauss 98:43b45f26b430 434
klauss 98:43b45f26b430 435 /*
klauss 98:43b45f26b430 436 {
klauss 98:43b45f26b430 437 uint16_t e, p;
klauss 98:43b45f26b430 438 e = buffer[0];
klauss 98:43b45f26b430 439 e <<= 8;
klauss 98:43b45f26b430 440 e |= buffer[1];
klauss 98:43b45f26b430 441 p = buffer[2];
klauss 98:43b45f26b430 442 p <<= 8;
klauss 98:43b45f26b430 443 p |= buffer[3];
klauss 98:43b45f26b430 444 //if (e != (p+100)) {
klauss 98:43b45f26b430 445 if( ( buffer[0] == 0x14 ) && ( buffer[1] == 0x0a ) ) {
klauss 98:43b45f26b430 446 int i;
klauss 98:43b45f26b430 447 char s[400], ss[4];;
klauss 98:43b45f26b430 448 strcpy(s,"OPS-PKG:");
klauss 98:43b45f26b430 449 for (i=0; i<40; i++) {
klauss 98:43b45f26b430 450 sprintf(ss," %02x",buffer[i]);
klauss 98:43b45f26b430 451 strcat(s,ss);
klauss 98:43b45f26b430 452 }
klauss 98:43b45f26b430 453 debug_msg( s );
klauss 98:43b45f26b430 454 }
klauss 98:43b45f26b430 455 }
klauss 98:43b45f26b430 456 */
klauss 98:43b45f26b430 457
klauss 91:c2a86b1f8aaa 458 if( debug_cpld ) {
klauss 81:3656f00ab3db 459 rx = true;
klauss 81:3656f00ab3db 460 tx = true;
klauss 81:3656f00ab3db 461 }
klauss 91:c2a86b1f8aaa 462
klauss 91:c2a86b1f8aaa 463 if( rx ) {
klauss 81:3656f00ab3db 464 char str[ 1024 ];
klauss 81:3656f00ab3db 465 strcpy( str, "RX :: \n\r " );
klauss 91:c2a86b1f8aaa 466 for( register uint16_t i = 0; i < __CB_BUFFER_SIZE__; i++ ) {
klauss 81:3656f00ab3db 467 char tmp[ 16 ];
klauss 81:3656f00ab3db 468 strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
klauss 81:3656f00ab3db 469 if( ( i != 0 ) && !( ( i + 1 ) % 50 ) ) strcat( str, "\n\r " );
klauss 91:c2a86b1f8aaa 470
klauss 81:3656f00ab3db 471 else strcat( str, " " );
klauss 81:3656f00ab3db 472 }
klauss 81:3656f00ab3db 473 send_msg( "%s", str );
klauss 91:c2a86b1f8aaa 474 rx = false;
klauss 81:3656f00ab3db 475 }
klauss 91:c2a86b1f8aaa 476
klauss 34:f19d9735428e 477 data = __parse_vz_pkg__( &ext, &port, &type, buffer );
klauss 91:c2a86b1f8aaa 478
klauss 91:c2a86b1f8aaa 479 if( data != NULL ) {
klauss 78:1353744f01e1 480 if( min_ext == 0 ) min_ext = ext;
klauss 91:c2a86b1f8aaa 481
klauss 78:1353744f01e1 482 if( ext > max_ext ) max_ext = ext;
klauss 91:c2a86b1f8aaa 483
klauss 78:1353744f01e1 484 if( ext < min_ext ) min_ext = ext;
klauss 99:e80850c51106 485
klauss 99:e80850c51106 486 if( debug_fw ){
klauss 99:e80850c51106 487 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 488 }
klauss 99:e80850c51106 489
klauss 104:62646ef786a3 490 if( type == __TELEMETRY__ )
klauss 104:62646ef786a3 491 {
klauss 104:62646ef786a3 492 telemetry_counter++;
klauss 104:62646ef786a3 493 //FIXME colocar o dtelos aqui
klauss 104:62646ef786a3 494 }
klauss 91:c2a86b1f8aaa 495
klauss 104:62646ef786a3 496 if( type != __AUDIO__ ) {
klauss 99:e80850c51106 497 if(
klauss 99:e80850c51106 498 type == __TELEMETRY__ ||
klauss 99:e80850c51106 499 type == __CB_STATS__ ||
klauss 99:e80850c51106 500 type == __FW1__ ||
klauss 99:e80850c51106 501 type == __FW2__ ||
klauss 99:e80850c51106 502 type == __FW3__ ||
klauss 99:e80850c51106 503 type == __FW4__ ||
klauss 99:e80850c51106 504 type == __FW5__ ||
klauss 99:e80850c51106 505 type == __FW6__
klauss 99:e80850c51106 506 ) type = __FW__;
klauss 99:e80850c51106 507
klauss 99:e80850c51106 508 if( debug_cb_rx == true ){
klauss 99:e80850c51106 509 send_msg("Pkg from CBx :: ( %d, %d ) -- Type :: %d", ext, port, type );
klauss 99:e80850c51106 510 }
klauss 99:e80850c51106 511
klauss 0:4d17cd9c8f9d 512 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 513 if( cb != NULL ) {
klauss 92:92df17f538a8 514 if( data[ 0 ] & BIT7 ) {
klauss 91:c2a86b1f8aaa 515 if( type == __BOOT__ ) {
klauss 91:c2a86b1f8aaa 516 send2callboxes( __build_cb_package__( ext, port, __REGISTRY__,
klauss 92:92df17f538a8 517 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 518 } else {
klauss 81:3656f00ab3db 519 if( debug_main ) debug_msg("Received ack pkg with seq_num %d", data[ 0 ] );
klauss 91:c2a86b1f8aaa 520
klauss 91:c2a86b1f8aaa 521 switch( type ) {
klauss 81:3656f00ab3db 522 case __INVITE__ : {
klauss 81:3656f00ab3db 523 if( debug_main || debug_invite ) debug_msg("Invite Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 92:92df17f538a8 524 //cb->first_invite_response_ok();
klauss 91:c2a86b1f8aaa 525 break;
klauss 81:3656f00ab3db 526 }
klauss 81:3656f00ab3db 527 case __CB_BYE__ : {
klauss 81:3656f00ab3db 528 if( debug_main || debug_invite ) debug_msg("BYE Ack from %d on msg_id %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 529 cb->set_bye_response_ok();
klauss 91:c2a86b1f8aaa 530 break;
klauss 81:3656f00ab3db 531 }
klauss 81:3656f00ab3db 532 case __REGISTRY__ : {
klauss 81:3656f00ab3db 533 if( debug_main || debug_aging ) debug_msg("Registry ACK from %d in pkg :: %d", ext, cb->get_msg_id() );
klauss 81:3656f00ab3db 534 break;
klauss 81:3656f00ab3db 535 }
klauss 81:3656f00ab3db 536 default : {
klauss 91:c2a86b1f8aaa 537 if( debug_main || debug_aging ) debug_msg("ACK from %d in pkg :: %d :: type %d", ext, cb->get_msg_id(), type );
klauss 91:c2a86b1f8aaa 538 }
klauss 81:3656f00ab3db 539 }
klauss 92:92df17f538a8 540 if( type != __REGISTRY__ && type != __CB_BYE__ ) type = __DO_NOTHING__;
klauss 92:92df17f538a8 541 if( type == __CB_BYE__ ){
klauss 92:92df17f538a8 542 VZ_call * call = __find_Call__( v_call, ext );
klauss 92:92df17f538a8 543 if( call != NULL ){
klauss 92:92df17f538a8 544 if( call->get_elapsed_time() < 120000 ){
klauss 92:92df17f538a8 545 if( debug_invite ) debug_msg("%d ack bye ignored", ext );
klauss 92:92df17f538a8 546 type = __DO_NOTHING__;
klauss 92:92df17f538a8 547 }
klauss 92:92df17f538a8 548 }
klauss 92:92df17f538a8 549 }
klauss 0:4d17cd9c8f9d 550 }
klauss 0:4d17cd9c8f9d 551 }
klauss 0:4d17cd9c8f9d 552 }
klauss 0:4d17cd9c8f9d 553 }
klauss 91:c2a86b1f8aaa 554 } else type = __DO_NOTHING__;
klauss 0:4d17cd9c8f9d 555 }
klauss 91:c2a86b1f8aaa 556
klauss 104:62646ef786a3 557 if( sizes == true ) {
klauss 104:62646ef786a3 558 sizes = false;
klauss 85:b6f2dc1d0f4f 559 send_msg("CB_New (%u) -- CB_Delete (%u)", cb_new_counter, cb_delete_counter );
klauss 85:b6f2dc1d0f4f 560 send_msg("SIP_New (%u) -- SIP_Delete (%u)", sip_new_counter, sip_delete_counter );
klauss 87:679ee0d594a9 561 send_msg("RTP_header_New (%u) -- RTP_header_Delete (%u)", rtp_header_new_counter, rtp_header_delete_counter );
klauss 87:679ee0d594a9 562 send_msg("RTP_body_New (%u) -- RTP_body_Delete (%u)", rtp_body_new_counter, rtp_body_delete_counter );
klauss 91:c2a86b1f8aaa 563 send_msg("Call_New (%u) -- Call_Delete (%u)", call_new_counter, call_delete_counter );
klauss 87:679ee0d594a9 564 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 565 send_msg("Memory is %s", ( memory_is_over ) ? "Over" : "Ok" );
klauss 81:3656f00ab3db 566 send_msg("Missed_Pkg :: %d ::", missed_pkg );
klauss 87:679ee0d594a9 567 send_msg("Sizeof Sip :: %u", sizeof( Sip ) );
klauss 87:679ee0d594a9 568 send_msg("Sizeof Call_Box :: %u", sizeof( Call_Box ) );
klauss 87:679ee0d594a9 569 send_msg("Sizeof VZ_call :: %u", sizeof( VZ_call ) );
klauss 87:679ee0d594a9 570 send_msg("Sizeof RTP :: %u", sizeof( RTP ) );
klauss 87:679ee0d594a9 571 send_msg("Sizeof RTP_Header :: %u", sizeof( RTP_Header ) );
klauss 87:679ee0d594a9 572 send_msg("Sizeof RTP_Body :: %u", sizeof( RTP_Body ) );
klauss 87:679ee0d594a9 573 send_msg("Sizeof Vector :: %u", sizeof( Vector ) );
klauss 87:679ee0d594a9 574 send_msg("Sizeof Timeslice :: %u", sizeof( Timeslice ) );
klauss 87:679ee0d594a9 575 send_msg("Sizeof Watchdog :: %u", sizeof( Watchdog ) );
klauss 81:3656f00ab3db 576 }
klauss 104:62646ef786a3 577
klauss 92:92df17f538a8 578 /*
klauss 104:62646ef786a3 579 static int ext_random_index = 0;
klauss 104:62646ef786a3 580 static int ext_random[ 10 ] = { 5878, 5919, 5030, 5797, 5980, 5499, 5151, 5340, 5782, 5494 };
klauss 104:62646ef786a3 581
klauss 104:62646ef786a3 582 if( registry_test )
klauss 104:62646ef786a3 583 {
klauss 104:62646ef786a3 584 if( type == __DO_NOTHING__ )
klauss 104:62646ef786a3 585 {
klauss 104:62646ef786a3 586 pkg_wdt = RX_CB_IDLE;
klauss 104:62646ef786a3 587 type = __REGISTRY__;
klauss 104:62646ef786a3 588 data = buffer;
klauss 104:62646ef786a3 589 ext = ext_random[ ext_random_index ];
klauss 104:62646ef786a3 590 port = ext_random[ ext_random_index ];
klauss 104:62646ef786a3 591 }
klauss 104:62646ef786a3 592 if( ext_random_index++ >= 9 )
klauss 104:62646ef786a3 593 {
klauss 104:62646ef786a3 594 registry_test = false;
klauss 104:62646ef786a3 595 }
klauss 104:62646ef786a3 596
klauss 104:62646ef786a3 597 }
klauss 104:62646ef786a3 598 */
klauss 104:62646ef786a3 599 /*
klauss 104:62646ef786a3 600 if( registry_test2 )
klauss 104:62646ef786a3 601 {
klauss 104:62646ef786a3 602 registry_test2 = false;
klauss 104:62646ef786a3 603
klauss 104:62646ef786a3 604 if( type == __DO_NOTHING__ )
klauss 104:62646ef786a3 605 {
klauss 104:62646ef786a3 606 pkg_wdt = RX_CB_IDLE;
klauss 104:62646ef786a3 607 type = __REGISTRY__;
klauss 104:62646ef786a3 608 data = buffer;
klauss 104:62646ef786a3 609 ext = 6662;
klauss 104:62646ef786a3 610 port = 6662;
klauss 86:bf7b0d4c3232 611 }
klauss 86:bf7b0d4c3232 612 }
klauss 92:92df17f538a8 613 */
klauss 92:92df17f538a8 614
klauss 91:c2a86b1f8aaa 615 {
klauss 91:c2a86b1f8aaa 616 fd_set fdSet;
klauss 91:c2a86b1f8aaa 617 FD_ZERO(&fdSet);
klauss 91:c2a86b1f8aaa 618
klauss 91:c2a86b1f8aaa 619 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 91:c2a86b1f8aaa 620 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 91:c2a86b1f8aaa 621 FD_SET( cb->get_sip_socket_fd(), &fdSet);
klauss 91:c2a86b1f8aaa 622 }
klauss 91:c2a86b1f8aaa 623
klauss 91:c2a86b1f8aaa 624 FD_SET( udp_wdt_client.get_fd(), &fdSet);
klauss 91:c2a86b1f8aaa 625
klauss 91:c2a86b1f8aaa 626 struct timeval t;
klauss 91:c2a86b1f8aaa 627 t.tv_sec = 0;
klauss 91:c2a86b1f8aaa 628 t.tv_usec = 0;
klauss 91:c2a86b1f8aaa 629 int ret = lwip_select( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 91:c2a86b1f8aaa 630
klauss 102:98c7155e8bea 631 if(ret > 0 ) {
klauss 91:c2a86b1f8aaa 632 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 91:c2a86b1f8aaa 633 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 91:c2a86b1f8aaa 634 int fd = cb->get_sip_socket_fd();
klauss 91:c2a86b1f8aaa 635 if( FD_ISSET( fd, &fdSet ) ) {
klauss 91:c2a86b1f8aaa 636 int rcv = cb->sip_udp_incomming_pkg();
klauss 91:c2a86b1f8aaa 637 }
klauss 91:c2a86b1f8aaa 638 }
klauss 91:c2a86b1f8aaa 639 if( FD_ISSET( udp_wdt_client.get_fd(), &fdSet ) ) {
klauss 91:c2a86b1f8aaa 640 char wake_msg[ 768 ];
klauss 91:c2a86b1f8aaa 641 Endpoint udp_wdt_server;
klauss 91:c2a86b1f8aaa 642
klauss 104:62646ef786a3 643 int wake_msg_rcv = udp_wdt_client.receiveFrom( udp_wdt_server, wake_msg, sizeof( wake_msg ) );
klauss 104:62646ef786a3 644
klauss 104:62646ef786a3 645 if( wake_msg_rcv == -1 )
klauss 104:62646ef786a3 646 {
klauss 104:62646ef786a3 647 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 104:62646ef786a3 648 reconnect_extern_wdt_socket();
klauss 104:62646ef786a3 649 miss_wdt_send_pkg++;
klauss 104:62646ef786a3 650 }
klauss 104:62646ef786a3 651 else if( wake_msg_rcv > 0 )
klauss 104:62646ef786a3 652 {
klauss 91:c2a86b1f8aaa 653 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 91:c2a86b1f8aaa 654 // Just ckeck but not set 'alive?'
klauss 91:c2a86b1f8aaa 655 // 'alive*' - force wdt tick right now
klauss 91:c2a86b1f8aaa 656 // Ckecking and set 'alive'
klauss 91:c2a86b1f8aaa 657 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 91:c2a86b1f8aaa 658 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 99:e80850c51106 659
klauss 99:e80850c51106 660 snprintf( wake_msg, 48,"wdt:%u,%u,%u,%c,%u,%u,%u,%u,%u:",
klauss 99:e80850c51106 661 uptime,
klauss 99:e80850c51106 662 invite_counter,
klauss 99:e80850c51106 663 external_wdt,
klauss 99:e80850c51106 664 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 99:e80850c51106 665 cb_new_counter,
klauss 99:e80850c51106 666 v_cb->size(),
klauss 99:e80850c51106 667 ts->remain_timeslices(),
klauss 99:e80850c51106 668 sip_socket_send_failure,
klauss 99:e80850c51106 669 v_call->size()
klauss 99:e80850c51106 670 );
klauss 92:92df17f538a8 671 wake_msg[ 768 - 1 ] = 0;
klauss 104:62646ef786a3 672 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 104:62646ef786a3 673 if( send != strlen( wake_msg ) )
klauss 104:62646ef786a3 674 {
klauss 104:62646ef786a3 675 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 104:62646ef786a3 676 reconnect_extern_wdt_socket();
klauss 104:62646ef786a3 677 miss_wdt_send_pkg++;
klauss 104:62646ef786a3 678 }
klauss 91:c2a86b1f8aaa 679
klauss 91:c2a86b1f8aaa 680 if( ( (!question_alive) && ( cb_new_counter <= __MAX_CB_IN_A_BRANCH__ ) && ( cb_new_counter >= 2 ) ) ) {
klauss 91:c2a86b1f8aaa 681 external_wdt = EXTERN_WDT_IDLE;
klauss 91:c2a86b1f8aaa 682 }
klauss 91:c2a86b1f8aaa 683 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 91:c2a86b1f8aaa 684 external_wdt = 0;
klauss 91:c2a86b1f8aaa 685
klauss 91:c2a86b1f8aaa 686 sprintf( wake_msg, "rst:%u:", uptime );
klauss 104:62646ef786a3 687 int send = udp_wdt_client.sendTo( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 104:62646ef786a3 688 if( send != strlen( wake_msg ) )
klauss 104:62646ef786a3 689 {
klauss 104:62646ef786a3 690 if( debug_reconnect ) send_msg("Reconnect Extern wdt");
klauss 104:62646ef786a3 691 reconnect_extern_wdt_socket();
klauss 104:62646ef786a3 692 miss_wdt_send_pkg++;
klauss 104:62646ef786a3 693 }
klauss 91:c2a86b1f8aaa 694 }
klauss 91:c2a86b1f8aaa 695 }
klauss 91:c2a86b1f8aaa 696 }
klauss 91:c2a86b1f8aaa 697 }
klauss 91:c2a86b1f8aaa 698 }
klauss 91:c2a86b1f8aaa 699
klauss 91:c2a86b1f8aaa 700 if( reset_cks == true ) {
klauss 81:3656f00ab3db 701 pkg_cksok = 0;
klauss 81:3656f00ab3db 702 pkg_ckserr = 0;
klauss 99:e80850c51106 703 pkg_zero = 0;
klauss 81:3656f00ab3db 704 reset_cks = false;
klauss 99:e80850c51106 705 out_of_range = 0;
klauss 99:e80850c51106 706 missed_pkg = 0;
klauss 100:09a23fcd3bdf 707 delayed_pkg_to_cb = 0;
klauss 99:e80850c51106 708 cpld_pkg_tx_counter = 0;
klauss 99:e80850c51106 709 cpld_pkg_rx_counter = 0;
klauss 81:3656f00ab3db 710 pcks_s = true;
klauss 81:3656f00ab3db 711 }
klauss 91:c2a86b1f8aaa 712
klauss 91:c2a86b1f8aaa 713 if( pcks_s == true ) {
klauss 99:e80850c51106 714 send_msg("PKG_CKS OK: %d :: PKG_CKS ERR: %d :: PKG_0: %d :: Out_of_range: %d :: Miss_Pkg :: %d"
klauss 100:09a23fcd3bdf 715 "\n\r> TX_delayed :: %d :: TX_Counter :: %d :: RX_Counter :: %d", pkg_cksok, pkg_ckserr, pkg_zero, out_of_range, missed_pkg, delayed_pkg_to_cb, cpld_pkg_tx_counter, cpld_pkg_rx_counter );
klauss 81:3656f00ab3db 716 pcks_s = false;
klauss 81:3656f00ab3db 717 }
klauss 91:c2a86b1f8aaa 718
klauss 100:09a23fcd3bdf 719 if( flood_bug_pkg ){
klauss 100:09a23fcd3bdf 720 static int id = 0x10;
klauss 100:09a23fcd3bdf 721 if( id < 10 ) id = 0x0b;
klauss 100:09a23fcd3bdf 722 send2callboxes( __build_cb_package__( 5828, 5123, __REGISTRY__,
klauss 100:09a23fcd3bdf 723 ( char * )buffer, id++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 100:09a23fcd3bdf 724 }
klauss 100:09a23fcd3bdf 725
klauss 104:62646ef786a3 726 if( led_sync_timer.read() >= 1 ) {
klauss 78:1353744f01e1 727 led_sync_timer.reset();
klauss 78:1353744f01e1 728 led3 = !led3;
klauss 78:1353744f01e1 729 CAB_LED = !CAB_LED;
klauss 78:1353744f01e1 730 }
klauss 91:c2a86b1f8aaa 731
klauss 91:c2a86b1f8aaa 732 switch( type ) {
klauss 91:c2a86b1f8aaa 733 case __DO_NOTHING__ :
klauss 91:c2a86b1f8aaa 734 {}
klauss 91:c2a86b1f8aaa 735 break;
klauss 91:c2a86b1f8aaa 736
klauss 0:4d17cd9c8f9d 737 case __CB_BYE__ : {
klauss 63:0d95da692bb4 738 cb_bye_counter++;
klauss 0:4d17cd9c8f9d 739 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 740 if( cb != NULL ) {
klauss 81:3656f00ab3db 741 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 742 data[ 0 ] |= BIT7;
klauss 0:4d17cd9c8f9d 743 cb->set_msg_id( data[ 0 ] );
klauss 81:3656f00ab3db 744 if( debug_main || debug_invite ) debug_msg( "Request bye from CBx " );
klauss 92:92df17f538a8 745
klauss 81:3656f00ab3db 746 bool already_removed = true;
klauss 91:c2a86b1f8aaa 747 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 748 VZ_call * call = (VZ_call *)v_call->get_element( i );
klauss 91:c2a86b1f8aaa 749 if( call->get_cb_ext() == ext ) {
klauss 81:3656f00ab3db 750 already_removed = false;
klauss 4:de46f0d9b14d 751 cb->send_bye();
klauss 91:c2a86b1f8aaa 752
klauss 0:4d17cd9c8f9d 753 ts->return_timeslice( cb->get_timeslice() );
klauss 0:4d17cd9c8f9d 754 cb->set_timeslice( 0x00 );
klauss 78:1353744f01e1 755 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 756
klauss 0:4d17cd9c8f9d 757 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 758 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 759
klauss 81:3656f00ab3db 760 v_call->remove_element( i );
klauss 102:98c7155e8bea 761
klauss 102:98c7155e8bea 762 //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 102:98c7155e8bea 763 //cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 91:c2a86b1f8aaa 764
klauss 74:81c47fff88a5 765 send2callboxes( __build_cb_package__( ext, port, __CB_BYE__,
klauss 0:4d17cd9c8f9d 766 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 92:92df17f538a8 767
klauss 92:92df17f538a8 768 // envia o ack bye depois atualiza o msg_id
klauss 92:92df17f538a8 769 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 91:c2a86b1f8aaa 770
klauss 3:cd9148672e25 771 delete( call );
klauss 102:98c7155e8bea 772 //cb->re_start_timer();
klauss 0:4d17cd9c8f9d 773 }
klauss 0:4d17cd9c8f9d 774 }
klauss 82:f55d13babca0 775 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from vector call" );
klauss 91:c2a86b1f8aaa 776
klauss 82:f55d13babca0 777 //ok, mas nem sempre o cbx "entrou em call
klauss 82:f55d13babca0 778 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 779 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 82:f55d13babca0 780 if( cb->get_ext() == ext ) {
klauss 82:f55d13babca0 781 already_removed = true;
klauss 82:f55d13babca0 782 if( cb->get_status() != cb_idle ) {
klauss 82:f55d13babca0 783 already_removed = false;
klauss 82:f55d13babca0 784 cb->send_bye();
klauss 82:f55d13babca0 785
klauss 82:f55d13babca0 786 ts->return_timeslice( cb->get_timeslice() );
klauss 82:f55d13babca0 787 cb->set_timeslice( 0x00 );
klauss 82:f55d13babca0 788 data[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 82:f55d13babca0 789
klauss 82:f55d13babca0 790 set_status( cb->status, cb_idle );
klauss 82:f55d13babca0 791 set_status( cb->sip->status, sip_idle );
klauss 82:f55d13babca0 792
klauss 82:f55d13babca0 793 send2callboxes( __build_cb_package__( ext, port, __CB_BYE__,
klauss 92:92df17f538a8 794 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 82:f55d13babca0 795
klauss 102:98c7155e8bea 796 //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 92:92df17f538a8 797 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 102:98c7155e8bea 798
klauss 102:98c7155e8bea 799 //cb->re_start_timer();
klauss 82:f55d13babca0 800 }
klauss 82:f55d13babca0 801 }
klauss 82:f55d13babca0 802 }
klauss 91:c2a86b1f8aaa 803
klauss 82:f55d13babca0 804 if( already_removed ) if( debug_main || debug_invite ) debug_msg( "Already removed from inviting queue" );
klauss 91:c2a86b1f8aaa 805
klauss 78:1353744f01e1 806 cb->registry();
klauss 91:c2a86b1f8aaa 807 } else if( debug_invite || debug_main ) debug_msg("Bye from who ? %d", ext );
klauss 91:c2a86b1f8aaa 808 }
klauss 91:c2a86b1f8aaa 809 break;
klauss 91:c2a86b1f8aaa 810
klauss 0:4d17cd9c8f9d 811 case __INVITE__ : {
klauss 63:0d95da692bb4 812 invite_counter++;
klauss 78:1353744f01e1 813 if( debug_invite ) debug_msg("Request Invite received from Cbx %i", ext);
klauss 0:4d17cd9c8f9d 814 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 815 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 816 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 817 if( debug_main ) debug_msg( "Adding CBx :: %i", ext );
klauss 91:c2a86b1f8aaa 818 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 819
klauss 91:c2a86b1f8aaa 820 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 821 memory_is_over = true;
klauss 91:c2a86b1f8aaa 822 if( debug_memory ) debug_msg("Invite allocation cb fail");
klauss 91:c2a86b1f8aaa 823 } else {
klauss 91:c2a86b1f8aaa 824 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 825 }
klauss 89:0fe315117b00 826 }
klauss 0:4d17cd9c8f9d 827 }
klauss 91:c2a86b1f8aaa 828 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 829 cb->set_msg_id( data[ 0 ] );
klauss 92:92df17f538a8 830 if( cb->status == cb_idle ){
klauss 92:92df17f538a8 831 cb->set_invite_response_ok();
klauss 92:92df17f538a8 832 cb->invite_retry_count_reset();
klauss 92:92df17f538a8 833 }
klauss 87:679ee0d594a9 834 invite_handler( v_call, v_cb, ts, cb );
klauss 87:679ee0d594a9 835 }
klauss 91:c2a86b1f8aaa 836 }
klauss 91:c2a86b1f8aaa 837 break;
klauss 4:de46f0d9b14d 838 case __REGISTRY__ : {
klauss 63:0d95da692bb4 839 registry_counter++;
klauss 78:1353744f01e1 840 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 841 if( v_cb->size() < __MAX_CB_IN_A_BRANCH__ ) {
klauss 91:c2a86b1f8aaa 842 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 843 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 91:c2a86b1f8aaa 844 cb = new Call_Box( ext, port );
klauss 91:c2a86b1f8aaa 845
klauss 91:c2a86b1f8aaa 846 if( cb == NULL ) {
klauss 91:c2a86b1f8aaa 847 memory_is_over = true;
klauss 91:c2a86b1f8aaa 848 if( debug_memory ) debug_msg("Registry cb allocation fail");
klauss 91:c2a86b1f8aaa 849 } else {
klauss 91:c2a86b1f8aaa 850 v_cb->add( cb );
klauss 91:c2a86b1f8aaa 851 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 91:c2a86b1f8aaa 852 }
klauss 87:679ee0d594a9 853 }
klauss 0:4d17cd9c8f9d 854 }
klauss 78:1353744f01e1 855 if( debug_main ) debug_msg("Registered %d - %d", ext, port );
klauss 91:c2a86b1f8aaa 856
klauss 87:679ee0d594a9 857 if( cb != NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 858
klauss 91:c2a86b1f8aaa 859 }
klauss 91:c2a86b1f8aaa 860 break;
klauss 4:de46f0d9b14d 861 case __BOOT__ : {
klauss 63:0d95da692bb4 862 boot_counter++;
klauss 99:e80850c51106 863 if( debug_boot == true ){
klauss 99:e80850c51106 864 send_msg("Rcv boot pkg from (%d, %d) pkg-id %d", ext, port, data[ 0 ] );
klauss 99:e80850c51106 865 }
klauss 91:c2a86b1f8aaa 866 send2callboxes( __build_cb_package__( ext, port, __REGISTRY__,
klauss 92:92df17f538a8 867 ( char * )data, data[ 0 ] | BIT7, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 868 }
klauss 91:c2a86b1f8aaa 869 break;
klauss 99:e80850c51106 870
klauss 99:e80850c51106 871 case __FW__ : {
klauss 99:e80850c51106 872 if( debug_fw_print ) send_msg("::FW pkg from %d - %d::", ext, port );
klauss 99:e80850c51106 873 fw_cbx_pkg( ext, port, ( char *)buffer );
klauss 99:e80850c51106 874 }
klauss 99:e80850c51106 875 break;
klauss 91:c2a86b1f8aaa 876
klauss 67:cdedc64d9921 877 case __BOOTLOADER_CBX__ : {
klauss 67:cdedc64d9921 878 bootloader_cbx_counter++;
klauss 102:98c7155e8bea 879 //int ret = bl_cbx_reply_to_eth( ext, ( char * )data );
klauss 91:c2a86b1f8aaa 880 }
klauss 91:c2a86b1f8aaa 881 break;
klauss 91:c2a86b1f8aaa 882
klauss 36:728498a78e1e 883 case __PROMPT__ : {
klauss 78:1353744f01e1 884 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 91:c2a86b1f8aaa 885
klauss 91:c2a86b1f8aaa 886 if( cb == NULL ) {
klauss 102:98c7155e8bea 887 // send2callboxes( __build_cb_package__( ext, port, __REGISTRY__,
klauss 102:98c7155e8bea 888 // ( char * )data, ( ( data[ 0 ] & ~BIT7 ) + 1 ), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 102:98c7155e8bea 889
klauss 78:1353744f01e1 890 if( debug_main ) debug_msg("Adding Cbx :: %d", ext );
klauss 78:1353744f01e1 891 cb = new Call_Box( ext, port );
klauss 87:679ee0d594a9 892 if( cb == NULL ){
klauss 87:679ee0d594a9 893 memory_is_over = true;
klauss 87:679ee0d594a9 894 }else{
klauss 87:679ee0d594a9 895 v_cb->add( cb );
klauss 87:679ee0d594a9 896 if( debug_main ) debug_msg("Added CBx -- %d", ext );
klauss 87:679ee0d594a9 897 }
klauss 48:195c97f12e8e 898 }
klauss 91:c2a86b1f8aaa 899
klauss 92:92df17f538a8 900 if( cb!= NULL ) cb->registry();
klauss 91:c2a86b1f8aaa 901
klauss 91:c2a86b1f8aaa 902 if( xstrmatch( ( uint8_t * )data, ( uint8_t * )"ping" ) ) {
klauss 78:1353744f01e1 903 if( debug_ping ) send_msg( "Prompt pkg from ( %i, %i ) :: Ping", ext, port );
klauss 91:c2a86b1f8aaa 904 } else {
klauss 78:1353744f01e1 905 prompt_counter++;
klauss 78:1353744f01e1 906 //fixme isso nao poderia ser resolvido com um sendmsg ?
klauss 78:1353744f01e1 907 send_msg( "Prompt pkg from ( %i, %i ) ::", ext, port );
klauss 91:c2a86b1f8aaa 908 for( register uint8_t i = 0; i < 32; i++ ) {
klauss 100:09a23fcd3bdf 909 if( debug_uart3 ) pc.printf("%c", data[ i ] );
klauss 100:09a23fcd3bdf 910 if( i == 15 ) if( debug_uart3 ) pc.printf( "\r\n" );
klauss 78:1353744f01e1 911 }
klauss 100:09a23fcd3bdf 912 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 91:c2a86b1f8aaa 913
klauss 91:c2a86b1f8aaa 914 if( tcp_session ) {
klauss 78:1353744f01e1 915 char aux[ __CB_BUFFER_SIZE__ + 3 ];
klauss 78:1353744f01e1 916 strncpy( aux, (char * )data, __CB_BUFFER_SIZE__ );
klauss 78:1353744f01e1 917 strcat( aux, "\n\r\0" );
klauss 78:1353744f01e1 918 tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
klauss 78:1353744f01e1 919 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 78:1353744f01e1 920 }
klauss 48:195c97f12e8e 921 }
klauss 91:c2a86b1f8aaa 922 }
klauss 91:c2a86b1f8aaa 923 break;
klauss 0:4d17cd9c8f9d 924 case __AUDIO__ : {
klauss 63:0d95da692bb4 925 audio_counter++;
klauss 78:1353744f01e1 926 VZ_call * call = __find_Call__( v_call, ext );
klauss 91:c2a86b1f8aaa 927 if( call != NULL ) {
klauss 91:c2a86b1f8aaa 928 char * pkg = call->build_eth_package( data + 2 );
klauss 0:4d17cd9c8f9d 929 call->send_message( pkg );
klauss 92:92df17f538a8 930 call->cbx_pkg_idle_timer_reset();
klauss 78:1353744f01e1 931 Call_Box * cb = __find_CB__( v_cb, ext );
klauss 92:92df17f538a8 932 if( cb != NULL ){
klauss 99:e80850c51106 933 //cb->reset_elapsed_time();
klauss 92:92df17f538a8 934 cb->set_invite_response_ok();
klauss 92:92df17f538a8 935 cb->invite_retry_count_reset();
klauss 92:92df17f538a8 936 }
klauss 91:c2a86b1f8aaa 937 } else {
klauss 78:1353744f01e1 938 if( debug_main ) debug_msg("received missed package from CBx :: %i", ext );
klauss 0:4d17cd9c8f9d 939 }
klauss 91:c2a86b1f8aaa 940 }
klauss 91:c2a86b1f8aaa 941 break;
klauss 9:ffa64f38ef9c 942 }// fim switch
klauss 92:92df17f538a8 943
klauss 99:e80850c51106 944 { // rajada
klauss 99:e80850c51106 945 //if( invite_retry_time == true ){
klauss 99:e80850c51106 946 // invite_retry_time = false;
klauss 99:e80850c51106 947 if( invite_retry_timer.read_ms() > 30 ) {
klauss 99:e80850c51106 948 invite_retry_timer.reset();
klauss 92:92df17f538a8 949 static int retry_invite_pkg = 0;
klauss 99:e80850c51106 950
klauss 92:92df17f538a8 951 if( retry_invite_pkg >= v_cb->size() ) retry_invite_pkg = 0;
klauss 99:e80850c51106 952
klauss 99:e80850c51106 953 register int i = 0;
klauss 99:e80850c51106 954 for( ; i < v_cb->size(); i++ ) {
klauss 99:e80850c51106 955 Call_Box * cb = (Call_Box * )v_cb->get_element( i );
klauss 99:e80850c51106 956 if( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) ) {
klauss 99:e80850c51106 957 if( i > retry_invite_pkg ) {
klauss 99:e80850c51106 958 retry_invite_pkg = i;
klauss 99:e80850c51106 959 break;
klauss 99:e80850c51106 960 }
klauss 92:92df17f538a8 961 }
klauss 99:e80850c51106 962 }
klauss 99:e80850c51106 963
klauss 99:e80850c51106 964 if( i != v_cb->size() ){
klauss 99:e80850c51106 965 Call_Box * cb = (Call_Box *)v_cb->get_element( retry_invite_pkg++ );
klauss 99:e80850c51106 966
klauss 99:e80850c51106 967 if( ( cb->status == cb_ringing ) || ( cb->status == cb_trying ) || ( cb->status == cb_on_call ) ) {
klauss 99:e80850c51106 968 if( cb->get_invite_response() == false ) {
klauss 99:e80850c51106 969 //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 99:e80850c51106 970 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 971
klauss 99:e80850c51106 972 buffer[ __TIMESLICE_PLACE__ ] = cb->get_timeslice();
klauss 99:e80850c51106 973
klauss 99:e80850c51106 974 send2callboxes( __build_cb_package__( cb->get_ext(), cb->get_port(), __INVITE__, ( char * )buffer,
klauss 99:e80850c51106 975 cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 99:e80850c51106 976 if( debug_invite ) debug_msg("resend invite OK to Cbx : ( %d, %d )", cb->get_ext(), cb->get_port() );
klauss 99:e80850c51106 977 }
klauss 99:e80850c51106 978 if( cb->get_invite_retry_count() == 0 ) {
klauss 99:e80850c51106 979 cb->send_bye();
klauss 92:92df17f538a8 980
klauss 99:e80850c51106 981 ts->return_timeslice( cb->get_timeslice() );
klauss 99:e80850c51106 982 cb->set_timeslice( 0x00 );
klauss 99:e80850c51106 983
klauss 99:e80850c51106 984 //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 99:e80850c51106 985 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 99:e80850c51106 986
klauss 99:e80850c51106 987 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 99:e80850c51106 988 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 99:e80850c51106 989 if( call->get_cb_ext() == cb->get_ext() ) {
klauss 99:e80850c51106 990 v_call->remove_element( i );
klauss 99:e80850c51106 991 if( call != NULL ) delete( call );
klauss 99:e80850c51106 992 break;
klauss 99:e80850c51106 993 }
klauss 92:92df17f538a8 994 }
klauss 99:e80850c51106 995
klauss 99:e80850c51106 996 if( debug_invite ) debug_msg( "-- No audio pkgs --" );
klauss 99:e80850c51106 997 set_status( cb->status, cb_idle );
klauss 99:e80850c51106 998 set_status( cb->sip->status, sip_idle );
klauss 92:92df17f538a8 999 }
klauss 92:92df17f538a8 1000 }
klauss 92:92df17f538a8 1001 }
klauss 92:92df17f538a8 1002 }
klauss 92:92df17f538a8 1003 }
klauss 91:c2a86b1f8aaa 1004
klauss 91:c2a86b1f8aaa 1005 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 0:4d17cd9c8f9d 1006 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 0:4d17cd9c8f9d 1007 int length = 0;
klauss 0:4d17cd9c8f9d 1008 char * tmp = call->get_eth_message( &length );
klauss 91:c2a86b1f8aaa 1009 if( tmp != NULL ) {
klauss 0:4d17cd9c8f9d 1010 int cb_port = 0xffff;
klauss 78:1353744f01e1 1011 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() );
klauss 91:c2a86b1f8aaa 1012
klauss 91:c2a86b1f8aaa 1013 if( cb != NULL ) {
klauss 4:de46f0d9b14d 1014 cb_port = cb->get_port();
klauss 91:c2a86b1f8aaa 1015
klauss 91:c2a86b1f8aaa 1016 uint8_t * pkg2cb = __build_cb_package__( call->get_cb_ext(), cb_port, __AUDIO__,
klauss 100:09a23fcd3bdf 1017 tmp, __AUDIO__, length, write_buffer );
klauss 99:e80850c51106 1018
klauss 100:09a23fcd3bdf 1019 send2callboxes( pkg2cb );
klauss 99:e80850c51106 1020
klauss 91:c2a86b1f8aaa 1021 } else if( debug_main ) debug_msg("received missed package from CBx :: %i -- Type :: %i", ext, type );
klauss 0:4d17cd9c8f9d 1022 }
klauss 14:22a35f575502 1023 }
klauss 91:c2a86b1f8aaa 1024
klauss 99:e80850c51106 1025 if( timer_sync_refresh.read_ms() > 250 ) {
klauss 89:0fe315117b00 1026 timer_sync_refresh.reset();
klauss 91:c2a86b1f8aaa 1027
klauss 89:0fe315117b00 1028 static uint8_t mode = TIME_TO_REFRESH;
klauss 104:62646ef786a3 1029
klauss 91:c2a86b1f8aaa 1030 if( mode == TIME_TO_REFRESH ) {
klauss 89:0fe315117b00 1031 mode = TIME_TO_WAKE_UP;
klauss 89:0fe315117b00 1032 refresh( v_cb, buffer, write_buffer, NULL );
klauss 91:c2a86b1f8aaa 1033 } else {
klauss 89:0fe315117b00 1034 mode = TIME_TO_REFRESH;
klauss 91:c2a86b1f8aaa 1035 if( wake_all ) if( v_call->size() == 0 ) wake_all_up( v_cb, buffer, write_buffer );
klauss 104:62646ef786a3 1036
klauss 104:62646ef786a3 1037 if( main_test == true )
klauss 104:62646ef786a3 1038 {
klauss 104:62646ef786a3 1039 //registry_test2 = true;
klauss 104:62646ef786a3 1040 }
klauss 89:0fe315117b00 1041 }
klauss 89:0fe315117b00 1042 }
klauss 91:c2a86b1f8aaa 1043
klauss 91:c2a86b1f8aaa 1044
klauss 89:0fe315117b00 1045 //refresh( v_cb, buffer, write_buffer, NULL );
klauss 91:c2a86b1f8aaa 1046
klauss 78:1353744f01e1 1047 //Fixme pensar melhor nessa parte durante ligacoes, pode complicar com muitos cbx ...
klauss 81:3656f00ab3db 1048 //if( v_call->size() == 0 ) registry_aging( v_cb, buffer, write_buffer );
klauss 91:c2a86b1f8aaa 1049
klauss 78:1353744f01e1 1050 // check sip messages only for cbx in call ?
klauss 78:1353744f01e1 1051 int ext_to__be_removed = sip_manager( v_cb );
klauss 91:c2a86b1f8aaa 1052 if( ext_to__be_removed > 0x00 ) {
klauss 78:1353744f01e1 1053 Call_Box * cb = __find_CB__( v_cb, ext_to__be_removed );
klauss 91:c2a86b1f8aaa 1054 if( cb != NULL ) {
klauss 91:c2a86b1f8aaa 1055 if( cb->status == cb_on_call ) {
klauss 4:de46f0d9b14d 1056 ts->return_timeslice( cb->get_timeslice() );
klauss 4:de46f0d9b14d 1057 cb->set_timeslice( 0x00 );
klauss 4:de46f0d9b14d 1058 buffer[ __TIMESLICE_PLACE__ ] = 0x00;
klauss 91:c2a86b1f8aaa 1059
klauss 78:1353744f01e1 1060 set_status( cb->status, cb_idle );
klauss 78:1353744f01e1 1061 set_status( cb->sip->status, sip_idle );
klauss 91:c2a86b1f8aaa 1062
klauss 91:c2a86b1f8aaa 1063 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 4:de46f0d9b14d 1064 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 91:c2a86b1f8aaa 1065 if( call->get_cb_ext() == ext_to__be_removed ) {
klauss 4:de46f0d9b14d 1066 v_call->remove_element( i );
klauss 4:de46f0d9b14d 1067 delete( call );
klauss 4:de46f0d9b14d 1068 }
klauss 2:93bec7313ccc 1069 }
klauss 91:c2a86b1f8aaa 1070
klauss 92:92df17f538a8 1071 //cb->set_msg_id( ( cb->get_msg_id() & ~BIT7 ) + 1 );
klauss 92:92df17f538a8 1072 cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 );
klauss 91:c2a86b1f8aaa 1073
klauss 82:f55d13babca0 1074 //debug_msg("msg_id -- %d", cb->get_msg_id() );
klauss 91:c2a86b1f8aaa 1075
klauss 91:c2a86b1f8aaa 1076 send2callboxes( __build_cb_package__( ext, port, __CB_BYE__,
klauss 4:de46f0d9b14d 1077 ( char * )buffer, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
klauss 91:c2a86b1f8aaa 1078
klauss 91:c2a86b1f8aaa 1079 if( debug_invite ) debug_msg("Received Bye from *");
klauss 99:e80850c51106 1080 //cb->re_start_timer();
klauss 0:4d17cd9c8f9d 1081 }
klauss 91:c2a86b1f8aaa 1082 } else if( debug_main ) debug_msg("Missed bye request from * CBx :: %d", ext );
klauss 0:4d17cd9c8f9d 1083 }
klauss 91:c2a86b1f8aaa 1084
klauss 81:3656f00ab3db 1085 /* Verifica andamento de ligações para eventualmente encerra-las por timeout */
klauss 10:22da1a0ac1e1 1086 call_manager( v_call, v_cb, buffer, write_buffer, ts );
klauss 91:c2a86b1f8aaa 1087
klauss 81:3656f00ab3db 1088 /* tratamento de pedidos de ligação */
klauss 81:3656f00ab3db 1089 invite_handler( v_call, v_cb, ts, NULL );
klauss 91:c2a86b1f8aaa 1090
klauss 81:3656f00ab3db 1091 /* rotina de verificação de TS's perdidos */
klauss 91:c2a86b1f8aaa 1092 if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() != __MAX_TIMESLICES__ ) ) {
klauss 91:c2a86b1f8aaa 1093 bool ts_reset = true;
klauss 91:c2a86b1f8aaa 1094 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 82:f55d13babca0 1095 if ( ( ( Call_Box * )v_cb->get_element( i ) )->get_status() != cb_idle &&
klauss 91:c2a86b1f8aaa 1096 ( ( Call_Box * )v_cb->get_element( i ) )->get_sip_status() != sip_idle ) {
klauss 78:1353744f01e1 1097 ts_reset = false;
klauss 78:1353744f01e1 1098 break;
klauss 78:1353744f01e1 1099 }
klauss 91:c2a86b1f8aaa 1100 }
klauss 91:c2a86b1f8aaa 1101 if( ts_reset ) {
klauss 81:3656f00ab3db 1102 if( debug_invite ) debug_msg("Resetando TS");
klauss 78:1353744f01e1 1103 ts->reset();
klauss 78:1353744f01e1 1104 }
klauss 0:4d17cd9c8f9d 1105 }
klauss 91:c2a86b1f8aaa 1106
klauss 81:3656f00ab3db 1107 //invite_pgk_retry_manager( v_call, v_cb, buffer, write_buffer );
klauss 91:c2a86b1f8aaa 1108
klauss 81:3656f00ab3db 1109 /* escuta se existe algum procedimento de gravação de cbx */
klauss 91:c2a86b1f8aaa 1110 //bl_handler();
klauss 91:c2a86b1f8aaa 1111
klauss 81:3656f00ab3db 1112 /* rotina que esvazia possiveis pacotes que não foram transmitidos para evitar conflito */
klauss 72:895ca792c647 1113 tx_buffer_ring_buffer_handler();
klauss 91:c2a86b1f8aaa 1114
klauss 30:8dfb6d8de53d 1115 type = __DO_NOTHING__;
klauss 91:c2a86b1f8aaa 1116
klauss 81:3656f00ab3db 1117 if( eth_status == 0 ) eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 91:c2a86b1f8aaa 1118
klauss 91:c2a86b1f8aaa 1119 if( wdt_timer.read() >= 1 ) {
klauss 91:c2a86b1f8aaa 1120 //FIXME remove myself
klauss 83:b8a1d8fdeaeb 1121 uptime++;
klauss 91:c2a86b1f8aaa 1122
klauss 81:3656f00ab3db 1123 wdt_timer.reset();
klauss 91:c2a86b1f8aaa 1124
klauss 81:3656f00ab3db 1125 if( wdt_show ) debug_wdt = true;
klauss 91:c2a86b1f8aaa 1126
klauss 81:3656f00ab3db 1127 if( external_wdt ) external_wdt--;
klauss 81:3656f00ab3db 1128 if( pkg_wdt ) pkg_wdt--;
klauss 81:3656f00ab3db 1129 if( eth_wdt ) eth_wdt--;
klauss 91:c2a86b1f8aaa 1130
klauss 91:c2a86b1f8aaa 1131 if( eth_wdt && external_wdt && pkg_wdt ){
klauss 81:3656f00ab3db 1132 wdt.kick();
klauss 81:3656f00ab3db 1133 }
klauss 81:3656f00ab3db 1134 }
klauss 91:c2a86b1f8aaa 1135
klauss 91:c2a86b1f8aaa 1136 if( debug_wdt ) {
klauss 87:679ee0d594a9 1137 send_msg("lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 87:679ee0d594a9 1138 lpc_low_level_input_counter = 0;
klauss 91:c2a86b1f8aaa 1139
klauss 81:3656f00ab3db 1140 debug_wdt = false;
klauss 91:c2a86b1f8aaa 1141 if( eth_status == 0 ) {
klauss 91:c2a86b1f8aaa 1142 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 1143 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1144 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1145 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1146 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1147 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1148 );
klauss 91:c2a86b1f8aaa 1149 } else {
klauss 91:c2a86b1f8aaa 1150 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 1151 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 91:c2a86b1f8aaa 1152 ETH_CONNECT_TIMEOUT - eth_wdt,
klauss 91:c2a86b1f8aaa 1153 EXTERN_WDT_IDLE - external_wdt,
klauss 91:c2a86b1f8aaa 1154 EXTERN_WDT_IDLE,
klauss 91:c2a86b1f8aaa 1155 RX_CB_IDLE - pkg_wdt,
klauss 91:c2a86b1f8aaa 1156 RX_CB_IDLE
klauss 91:c2a86b1f8aaa 1157 );
klauss 81:3656f00ab3db 1158 }
klauss 81:3656f00ab3db 1159 }
klauss 0:4d17cd9c8f9d 1160 }
klauss 0:4d17cd9c8f9d 1161 }