Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Thu Feb 19 14:31:42 2015 +0000
Revision:
102:98c7155e8bea
Parent:
101:162c28286c29
Child:
104:62646ef786a3
implementado correcoes de ;   - tamanho de variaveis usadas no cks e no stats;   - limapando o buffer de envio de cmd para os cbx, usando o delimitador de string \r ( oxod )

Who changed what in which revision?

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