Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Tue Nov 24 14:06:22 2015 +0000
Revision:
137:32dd35a6dbc9
Parent:
135:2f4290590e51
core source of the .bin (09/21/2015) in the field

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 121:ee02790d00b7 1 #include "main_app_functions.h"
klauss 121:ee02790d00b7 2
klauss 121:ee02790d00b7 3 inline void reset_leds() { led1 = led2 = 1; led3 = led4 = 0; }
klauss 121:ee02790d00b7 4
klauss 121:ee02790d00b7 5 int header_app_init ( void )
klauss 121:ee02790d00b7 6 {
klauss 121:ee02790d00b7 7
klauss 132:05cd37f7e007 8 vz_printf ( "\r\n" );
klauss 121:ee02790d00b7 9
klauss 132:05cd37f7e007 10 if ( debug_app_init ) vz_printf ( "init_wdt() :: %s", ( init_wdt () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 11
klauss 132:05cd37f7e007 12 if ( debug_app_init ) vz_printf ( "config_lpc() :: %s", ( config_lpc () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 13
klauss 132:05cd37f7e007 14 if ( debug_app_init ) vz_printf ( "start_cpld() :: %s", ( start_cpld () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 15
klauss 121:ee02790d00b7 16 if( sdram_init() == 1 ) {
klauss 132:05cd37f7e007 17 vz_printf ("******* Failed to initialize SDRAM *******");
klauss 121:ee02790d00b7 18 return 1;
klauss 121:ee02790d00b7 19 } else {
klauss 132:05cd37f7e007 20 vz_printf ("******* Success to initialize SDRAM *******");
klauss 121:ee02790d00b7 21 }
klauss 121:ee02790d00b7 22
klauss 121:ee02790d00b7 23 int init_fsystem_ret = init_fsystem();
klauss 121:ee02790d00b7 24 if( init_fsystem_ret & BIT0 )
klauss 121:ee02790d00b7 25 {
klauss 132:05cd37f7e007 26 vz_printf ("******* File system configured!!*******");
klauss 121:ee02790d00b7 27 }
klauss 121:ee02790d00b7 28
klauss 121:ee02790d00b7 29 if( init_fsystem_ret & BIT1 )
klauss 121:ee02790d00b7 30 {
klauss 132:05cd37f7e007 31 vz_printf ("******* File System Ready *******");
klauss 121:ee02790d00b7 32 }
klauss 121:ee02790d00b7 33
klauss 121:ee02790d00b7 34 {
klauss 121:ee02790d00b7 35 char s[ 32 ];
klauss 121:ee02790d00b7 36 mbed_mac_address( s );
klauss 132:05cd37f7e007 37 vz_printf ( "::Mac::%02x:%02x:%02x:%02x:%02x:%02x:: ", s[0],s[1],s[2],s[3],s[4],s[5] );
klauss 121:ee02790d00b7 38 }
klauss 121:ee02790d00b7 39
klauss 126:1f90756250fb 40 eth_status = __init_eth__ ();
klauss 126:1f90756250fb 41 if ( eth_status )
klauss 126:1f90756250fb 42 {
klauss 132:05cd37f7e007 43 vz_printf ("******* Cannot connect to eth *******");
klauss 121:ee02790d00b7 44 } else {
klauss 132:05cd37f7e007 45 vz_printf ("******* Connection eth - ok *******");
klauss 132:05cd37f7e007 46 int vz_io_eth_init_ret = vz_io_eth_init ();
klauss 121:ee02790d00b7 47
klauss 132:05cd37f7e007 48 if ( vz_io_eth_init_ret == BIT0 ) vz_printf ("******* Prompt eth UDP Ready *******");
klauss 121:ee02790d00b7 49
klauss 132:05cd37f7e007 50 if ( vz_io_eth_init_ret == BIT1 ) vz_printf ("******* Prompt eth TCP Ready *******");
klauss 121:ee02790d00b7 51
klauss 132:05cd37f7e007 52 if ( debug_app_init ) vz_printf ( "vz_io_eth_init () :: %s", ( vz_io_eth_init_ret == ( BIT0 bitor BIT1 ) ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 53
klauss 132:05cd37f7e007 54 if ( debug_app_init ) vz_printf ( "init_external_wdt () :: %s", ( init_external_wdt () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 55
klauss 132:05cd37f7e007 56 if ( debug_app_init ) vz_printf ( "init_bl () :: %s", ( init_bl() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 57
klauss 132:05cd37f7e007 58 if ( debug_app_init ) vz_printf ( "init_clock () :: %s", ( init_clock () == 0 ) ? "Ok" : "Failure" );
klauss 128:3ae1c74773a8 59
klauss 132:05cd37f7e007 60 if ( debug_app_init ) vz_printf ( "init_pwr_src () :: %s", ( init_power_source () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 61 }
klauss 121:ee02790d00b7 62
klauss 121:ee02790d00b7 63 sync_timer.start();
klauss 121:ee02790d00b7 64
klauss 121:ee02790d00b7 65 led_sync_timer.start();
klauss 121:ee02790d00b7 66
klauss 121:ee02790d00b7 67 ext = 0;
klauss 121:ee02790d00b7 68
klauss 121:ee02790d00b7 69 port = 0;
klauss 121:ee02790d00b7 70
klauss 121:ee02790d00b7 71 buffer_from_cb_ptr = ( uint8_t * )RXBuffer;
klauss 121:ee02790d00b7 72
klauss 121:ee02790d00b7 73 data = NULL;
klauss 121:ee02790d00b7 74
klauss 121:ee02790d00b7 75 type = DO_NOTHING;
klauss 121:ee02790d00b7 76
klauss 121:ee02790d00b7 77 v_cb = new Vector();
klauss 121:ee02790d00b7 78
klauss 132:05cd37f7e007 79 if ( debug_app_init ) vz_printf ( "v_cb :: %s", ( v_cb not_eq NULL ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 80
klauss 121:ee02790d00b7 81 v_call = new Vector();
klauss 121:ee02790d00b7 82
klauss 132:05cd37f7e007 83 if ( debug_app_init ) vz_printf ( "v_call :: %s", ( v_call not_eq NULL ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 84
klauss 121:ee02790d00b7 85 ts = new Timeslice();
klauss 121:ee02790d00b7 86 if( ts == NULL ) {
klauss 121:ee02790d00b7 87 memory_is_over = true;
klauss 132:05cd37f7e007 88 if( debug_memory ) vz_printf ("TS allocation fail");
klauss 121:ee02790d00b7 89 }
klauss 121:ee02790d00b7 90
klauss 132:05cd37f7e007 91 if ( debug_app_init ) vz_printf ( "TS :: %s", ( ts not_eq NULL ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 92
klauss 121:ee02790d00b7 93 for( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ ) {
klauss 121:ee02790d00b7 94 cb_rx_buffer[ i ] = 0;
klauss 121:ee02790d00b7 95 cb_tx_buffer[ i ] = 0;
klauss 121:ee02790d00b7 96 }
klauss 121:ee02790d00b7 97
klauss 121:ee02790d00b7 98 reset_leds();
klauss 121:ee02790d00b7 99
klauss 132:05cd37f7e007 100 if ( debug_app_init ) vz_printf ( "init_fw_handler() :: %s", ( init_fw_handler() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 101
klauss 132:05cd37f7e007 102 if ( debug_app_init ) vz_printf ( "init_ranges() :: %s", ( init_ranges() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 103
klauss 132:05cd37f7e007 104 if ( debug_app_init ) vz_printf ( "init_refresh() :: %s", ( init_refresh() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 105
klauss 132:05cd37f7e007 106 if ( debug_app_init ) vz_printf ( "init_sync_refresh() :: %s", ( init_sync_refresh() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 107
klauss 121:ee02790d00b7 108 count = 0;
klauss 121:ee02790d00b7 109
klauss 121:ee02790d00b7 110 max_registered_cbx = 0;
klauss 121:ee02790d00b7 111
klauss 121:ee02790d00b7 112 wake_all = false;
klauss 121:ee02790d00b7 113
klauss 121:ee02790d00b7 114 pkg_wdt = RX_CB_IDLE;
klauss 121:ee02790d00b7 115
klauss 121:ee02790d00b7 116 eth_wdt = ETH_CONNECT_TIMEOUT;
klauss 121:ee02790d00b7 117
klauss 121:ee02790d00b7 118 invite_retry_timer.start();
klauss 121:ee02790d00b7 119
klauss 132:05cd37f7e007 120 if ( debug_app_init ) vz_printf ( "hex_init() :: %s", ( hex_init() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 121
klauss 121:ee02790d00b7 122 reset_leds();
klauss 121:ee02790d00b7 123
klauss 121:ee02790d00b7 124 lpc_low_level_input_counter = 0;
klauss 121:ee02790d00b7 125
klauss 132:05cd37f7e007 126 if ( debug_app_init ) vz_printf ( "init_hello () :: %s", ( init_hello () == 0 ) ? "Ok" : "Failure" );
klauss 124:c1b6c893e1c3 127
klauss 126:1f90756250fb 128 test_ts_timer.start ();
klauss 126:1f90756250fb 129
klauss 132:05cd37f7e007 130 vz_printf ( "\r\n" );
klauss 121:ee02790d00b7 131
klauss 121:ee02790d00b7 132 return ( 0 );
klauss 121:ee02790d00b7 133 }
klauss 121:ee02790d00b7 134
klauss 121:ee02790d00b7 135
klauss 121:ee02790d00b7 136 int try_reconnect_with_eth ( void )
klauss 121:ee02790d00b7 137 {
klauss 121:ee02790d00b7 138 eth_status = __init_eth__();
klauss 121:ee02790d00b7 139
klauss 126:1f90756250fb 140 if ( eth_status )
klauss 126:1f90756250fb 141 {
klauss 132:05cd37f7e007 142 vz_printf ("******* Cannot connect to eth *******");
klauss 121:ee02790d00b7 143 } else {
klauss 132:05cd37f7e007 144 vz_printf ("******* Connection eth - ok *******");
klauss 132:05cd37f7e007 145 int vz_io_eth_init_ret = vz_io_eth_init ();
klauss 121:ee02790d00b7 146
klauss 132:05cd37f7e007 147 if ( vz_io_eth_init_ret == BIT0 ) vz_printf ("******* Prompt eth UDP Ready *******");
klauss 121:ee02790d00b7 148
klauss 132:05cd37f7e007 149 if ( vz_io_eth_init_ret == BIT1 ) vz_printf ("******* Prompt eth TCP Ready *******");
klauss 121:ee02790d00b7 150
klauss 132:05cd37f7e007 151 if ( debug_app_init ) vz_printf ( "vz_io_eth_init () :: %s", ( vz_io_eth_init_ret == ( BIT0 bitor BIT1 ) ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 152
klauss 132:05cd37f7e007 153 if ( debug_app_init ) vz_printf ( "init_external_wdt() :: %s", ( init_external_wdt() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 154
klauss 132:05cd37f7e007 155 if ( debug_app_init ) vz_printf ( "init_bl() :: %s", ( init_bl() == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 156
klauss 132:05cd37f7e007 157 if ( debug_app_init ) vz_printf ( "init_clock() :: %s", ( init_clock() == 0 ) ? "Ok" : "Failure" );
klauss 128:3ae1c74773a8 158
klauss 132:05cd37f7e007 159 if ( debug_app_init ) vz_printf ( "init_pwr_src () :: %s", ( init_power_source () == 0 ) ? "Ok" : "Failure" );
klauss 121:ee02790d00b7 160 }
klauss 121:ee02790d00b7 161
klauss 121:ee02790d00b7 162 return eth_status;
klauss 121:ee02790d00b7 163 }
klauss 121:ee02790d00b7 164
klauss 121:ee02790d00b7 165
klauss 121:ee02790d00b7 166 int show_stats ( void )
klauss 121:ee02790d00b7 167 {
klauss 132:05cd37f7e007 168 char str [ 256 ];
klauss 132:05cd37f7e007 169 int snprintf_ret = snprintf( str, sizeof ( str ) - 1,
klauss 121:ee02790d00b7 170 "\n\rReceived Pkgs::\n\r "
klauss 121:ee02790d00b7 171 "Boot :: %u\n\r "
klauss 121:ee02790d00b7 172 "Registry :: %u\n\r "
klauss 121:ee02790d00b7 173 "Invite :: %u\n\r "
klauss 121:ee02790d00b7 174 "Audio :: %u\n\r "
klauss 121:ee02790d00b7 175 "Telemetry :: %u\n\r "
klauss 121:ee02790d00b7 176 "CB_stats :: %u\n\r "
klauss 121:ee02790d00b7 177 "CB_bye :: %u\n\r "
klauss 121:ee02790d00b7 178 "Prompt :: %u\n\r "
klauss 121:ee02790d00b7 179 "Flood :: %u\n\r "
klauss 121:ee02790d00b7 180 "Bootloader_cbx :: %u\n\r",
klauss 121:ee02790d00b7 181 boot_counter,
klauss 121:ee02790d00b7 182 registry_counter,
klauss 121:ee02790d00b7 183 invite_counter,
klauss 121:ee02790d00b7 184 audio_counter,
klauss 121:ee02790d00b7 185 telemetry_counter,
klauss 121:ee02790d00b7 186 cb_stats_counter,
klauss 121:ee02790d00b7 187 cb_bye_counter,
klauss 121:ee02790d00b7 188 prompt_counter,
klauss 121:ee02790d00b7 189 flood_counter,
klauss 121:ee02790d00b7 190 bootloader_cbx_counter
klauss 121:ee02790d00b7 191 );
klauss 132:05cd37f7e007 192
klauss 132:05cd37f7e007 193 vz_printf ( "%s", str );
klauss 121:ee02790d00b7 194
klauss 132:05cd37f7e007 195 if ( debug_string_length ) vz_debug ( "str.length ( %d )", snprintf_ret );
klauss 132:05cd37f7e007 196
klauss 121:ee02790d00b7 197 return ( snprintf_ret );
klauss 121:ee02790d00b7 198 }
klauss 121:ee02790d00b7 199
klauss 121:ee02790d00b7 200
klauss 121:ee02790d00b7 201 int reset_stats ( void )
klauss 121:ee02790d00b7 202 {
klauss 121:ee02790d00b7 203 boot_counter = 0;
klauss 121:ee02790d00b7 204 registry_counter = 0;
klauss 121:ee02790d00b7 205 invite_counter = 0;
klauss 121:ee02790d00b7 206 audio_counter = 0;
klauss 121:ee02790d00b7 207 telemetry_counter = 0;
klauss 121:ee02790d00b7 208 cb_bye_counter = 0;
klauss 121:ee02790d00b7 209 prompt_counter = 0;
klauss 121:ee02790d00b7 210 flood_counter = 0;
klauss 121:ee02790d00b7 211 bootloader_cbx_counter = 0;
klauss 121:ee02790d00b7 212 cb_stats_counter = 0;
klauss 121:ee02790d00b7 213 fw_counter = 0;
klauss 121:ee02790d00b7 214
klauss 121:ee02790d00b7 215 return ( 0 );
klauss 121:ee02790d00b7 216 }
klauss 121:ee02790d00b7 217
klauss 132:05cd37f7e007 218 int
klauss 132:05cd37f7e007 219 show_cb_list ( Vector * v_cb )
klauss 121:ee02790d00b7 220 {
klauss 135:2f4290590e51 221 vz_printf (
klauss 135:2f4290590e51 222 "Registered %d[ %d ] CBx ( %d - %d ) -- "
klauss 132:05cd37f7e007 223 "Remain_timeslices :: %d :: v_call->size() :: %d",
klauss 135:2f4290590e51 224 v_cb->size(), max_registered_cbx, min_ext, max_ext,
klauss 132:05cd37f7e007 225 ts->remain_timeslices(), v_call->size()
klauss 132:05cd37f7e007 226 );
klauss 132:05cd37f7e007 227
klauss 121:ee02790d00b7 228 if( v_cb->size() == 1 ) {
klauss 132:05cd37f7e007 229 vz_printf (" %d ", ( ( Call_Box * )v_cb -> get_element( 0 ) ) -> get_ext () );
klauss 132:05cd37f7e007 230 } else if( v_cb -> size() > 1 ) {
klauss 132:05cd37f7e007 231 char str [ 1024 ];
klauss 135:2f4290590e51 232 int ext_list [ u8_MAX_CB_IN_A_BRANCH ];
klauss 121:ee02790d00b7 233 register int i = 0;
klauss 132:05cd37f7e007 234 for( ; i < v_cb -> size(); i++ ) {
klauss 132:05cd37f7e007 235 ext_list [ i ] = ( ( Call_Box * )v_cb->get_element ( i ) ) -> get_ext ();
klauss 121:ee02790d00b7 236 }
klauss 121:ee02790d00b7 237
klauss 121:ee02790d00b7 238 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 121:ee02790d00b7 239
klauss 121:ee02790d00b7 240 char aux[ 16 ];
klauss 132:05cd37f7e007 241 strcpy ( str, "\r\n> " );
klauss 132:05cd37f7e007 242 for ( i = 0; i < v_cb -> size () - 1; i ++ )
klauss 132:05cd37f7e007 243 {
klauss 132:05cd37f7e007 244 sprintf ( aux, "%i, ", ext_list [ i ] );
klauss 132:05cd37f7e007 245 strcat ( str, aux );
klauss 132:05cd37f7e007 246 if ( ( i not_eq 0 ) and not ( ( i + 1 ) % 16 ) ) strcat ( str, "\r\n> " );
klauss 121:ee02790d00b7 247 }
klauss 132:05cd37f7e007 248 sprintf ( aux, "%i ", ext_list [ i ] );
klauss 132:05cd37f7e007 249 strcat ( str, aux );
klauss 132:05cd37f7e007 250 vz_printf ( "%s", str );
klauss 121:ee02790d00b7 251 }
klauss 121:ee02790d00b7 252
klauss 121:ee02790d00b7 253 return ( 0 );
klauss 121:ee02790d00b7 254 }
klauss 121:ee02790d00b7 255
klauss 132:05cd37f7e007 256 int
klauss 132:05cd37f7e007 257 show_cb_long_list ( Vector * v_cb, bool show_time, bool show_invite )
klauss 121:ee02790d00b7 258 {
klauss 121:ee02790d00b7 259 {
klauss 135:2f4290590e51 260 int ext_list [ u8_MAX_CB_IN_A_BRANCH ];
klauss 121:ee02790d00b7 261
klauss 132:05cd37f7e007 262 if ( v_cb -> size () >= 1 )
klauss 132:05cd37f7e007 263 {
klauss 132:05cd37f7e007 264 for ( register int i = 0; i < v_cb -> size (); i ++ )
klauss 121:ee02790d00b7 265 {
klauss 132:05cd37f7e007 266 ext_list [ i ] = ( ( Call_Box * )v_cb -> get_element ( i ) ) -> get_ext ();
klauss 121:ee02790d00b7 267 }
klauss 132:05cd37f7e007 268 qsort ( ext_list, v_cb -> size (), sizeof ( int ), ls_comp );
klauss 121:ee02790d00b7 269 }
klauss 121:ee02790d00b7 270
klauss 135:2f4290590e51 271 vz_printf ("Registered %d[ %d ] CBx ( %d - %d ) -- "
klauss 132:05cd37f7e007 272 "Remain_timeslices :: %d :: v_call->size() :: %d",
klauss 135:2f4290590e51 273 v_cb->size(), max_registered_cbx, min_ext, max_ext,
klauss 132:05cd37f7e007 274 ts->remain_timeslices(), v_call->size()
klauss 132:05cd37f7e007 275 );
klauss 121:ee02790d00b7 276
klauss 132:05cd37f7e007 277 for ( register uint8_t i = 0; i < v_cb -> size (); i ++ )
klauss 132:05cd37f7e007 278 {
klauss 132:05cd37f7e007 279 Call_Box * cb = find_CB ( v_cb, ext_list [ i ] );
klauss 121:ee02790d00b7 280
klauss 132:05cd37f7e007 281 if ( cb not_eq NULL )
klauss 121:ee02790d00b7 282 {
klauss 132:05cd37f7e007 283 char cb_status [ 32 ];
klauss 132:05cd37f7e007 284 char cb_sip_status [ 32 ];
klauss 121:ee02790d00b7 285 switch ( cb -> get_status () )
klauss 121:ee02790d00b7 286 {
klauss 121:ee02790d00b7 287 case cb_idle : {
klauss 132:05cd37f7e007 288 strcpy ( cb_status, "cb_idle" );
klauss 121:ee02790d00b7 289 break;
klauss 121:ee02790d00b7 290 }
klauss 121:ee02790d00b7 291 case cb_ringing : {
klauss 132:05cd37f7e007 292 strcpy ( cb_status, "cb_ringing" );
klauss 121:ee02790d00b7 293 break;
klauss 121:ee02790d00b7 294 }
klauss 121:ee02790d00b7 295 case cb_trying : {
klauss 132:05cd37f7e007 296 strcpy ( cb_status,"cb_trying" );
klauss 121:ee02790d00b7 297 break;
klauss 121:ee02790d00b7 298 }
klauss 121:ee02790d00b7 299 case cb_on_call : {
klauss 132:05cd37f7e007 300 strcpy ( cb_status, "cb_on_call" );
klauss 121:ee02790d00b7 301 break;
klauss 121:ee02790d00b7 302 }
klauss 121:ee02790d00b7 303 case cb_busy : {
klauss 132:05cd37f7e007 304 strcpy ( cb_status, "cb_busy" );
klauss 121:ee02790d00b7 305 break;
klauss 121:ee02790d00b7 306 }
klauss 121:ee02790d00b7 307 case cb_denied : {
klauss 132:05cd37f7e007 308 strcpy ( cb_status, "cb_denied" );
klauss 121:ee02790d00b7 309 break;
klauss 121:ee02790d00b7 310 }
klauss 121:ee02790d00b7 311 case cb_bootloader : {
klauss 132:05cd37f7e007 312 strcpy ( cb_status, "cb_bootloader" );
klauss 121:ee02790d00b7 313 break;
klauss 121:ee02790d00b7 314 }
klauss 121:ee02790d00b7 315 }
klauss 121:ee02790d00b7 316
klauss 121:ee02790d00b7 317 switch( cb -> get_sip_status () )
klauss 121:ee02790d00b7 318 {
klauss 121:ee02790d00b7 319 case sip_idle : {
klauss 132:05cd37f7e007 320 strcpy ( cb_sip_status, "sip_idle" );
klauss 121:ee02790d00b7 321 break;
klauss 121:ee02790d00b7 322 }
klauss 121:ee02790d00b7 323 case sip_waiting_trying : {
klauss 132:05cd37f7e007 324 strcpy ( cb_sip_status, "sip_waiting_trying" );
klauss 121:ee02790d00b7 325 break;
klauss 121:ee02790d00b7 326 }
klauss 121:ee02790d00b7 327 case sip_trying : {
klauss 132:05cd37f7e007 328 strcpy ( cb_sip_status, "sip_trying" );
klauss 121:ee02790d00b7 329 break;
klauss 121:ee02790d00b7 330 }
klauss 121:ee02790d00b7 331 case sip_ringing : {
klauss 132:05cd37f7e007 332 strcpy ( cb_sip_status, "sip_ringing" );
klauss 121:ee02790d00b7 333 break;
klauss 121:ee02790d00b7 334 }
klauss 121:ee02790d00b7 335 case sip_busy : {
klauss 132:05cd37f7e007 336 strcpy ( cb_sip_status, "sip_busy" );
klauss 121:ee02790d00b7 337 break;
klauss 121:ee02790d00b7 338 }
klauss 121:ee02790d00b7 339 case sip_ok : {
klauss 132:05cd37f7e007 340 strcpy ( cb_sip_status, "sip_ok" );
klauss 121:ee02790d00b7 341 break;
klauss 121:ee02790d00b7 342 }
klauss 121:ee02790d00b7 343 case sip_on_call : {
klauss 132:05cd37f7e007 344 strcpy ( cb_sip_status, "sip_on_call" );
klauss 121:ee02790d00b7 345 break;
klauss 121:ee02790d00b7 346 }
klauss 121:ee02790d00b7 347 case sip_denied : {
klauss 132:05cd37f7e007 348 strcpy ( cb_sip_status, "sip_denied" );
klauss 121:ee02790d00b7 349 break;
klauss 121:ee02790d00b7 350 }
klauss 121:ee02790d00b7 351 }
klauss 121:ee02790d00b7 352
klauss 132:05cd37f7e007 353 char cbx_to_string [ 254 ];
klauss 121:ee02790d00b7 354 snprintf ( cbx_to_string, sizeof ( cbx_to_string ),
klauss 123:1d395b5a4cad 355 "Ext :: %5i :: Port :: %5i :: Status -- %s - %s",
klauss 121:ee02790d00b7 356 cb->get_ext(), cb->get_port(), cb_status, cb_sip_status
klauss 121:ee02790d00b7 357 );
klauss 121:ee02790d00b7 358
klauss 132:05cd37f7e007 359 if( cb -> get_timeslice () not_eq 0 )
klauss 121:ee02790d00b7 360 {
klauss 132:05cd37f7e007 361 char aux [ 32 ];
klauss 132:05cd37f7e007 362 snprintf ( aux, sizeof ( aux ), " -- on TimeSlice :: %i", cb->get_timeslice () );
klauss 121:ee02790d00b7 363 strcat( cbx_to_string, aux );
klauss 121:ee02790d00b7 364 }
klauss 123:1d395b5a4cad 365
klauss 123:1d395b5a4cad 366 if ( show_time )
klauss 123:1d395b5a4cad 367 {
klauss 123:1d395b5a4cad 368 char get_timer_msg [ 128 ];
klauss 123:1d395b5a4cad 369
klauss 123:1d395b5a4cad 370 snprintf ( get_timer_msg, sizeof ( get_timer_msg ) -1, " -- timer %4i [ %s ",
klauss 123:1d395b5a4cad 371 cb -> get_timer (),
klauss 123:1d395b5a4cad 372 ( cb -> get_overflow_flag () ) ? "Overflow" : "Ok"
klauss 123:1d395b5a4cad 373 );
klauss 123:1d395b5a4cad 374
klauss 123:1d395b5a4cad 375 int get_overflow_times_tmp = cb -> get_overflow_times ();
klauss 123:1d395b5a4cad 376
klauss 123:1d395b5a4cad 377 if ( get_overflow_times_tmp == 0 ) strcat ( get_timer_msg, "]" );
klauss 123:1d395b5a4cad 378
klauss 123:1d395b5a4cad 379 else {
klauss 123:1d395b5a4cad 380 char strcat_tmp [ 16 ];
klauss 132:05cd37f7e007 381 if ( get_overflow_times_tmp == 1 ) snprintf ( strcat_tmp, sizeof ( strcat_tmp ) - 1, "1 time ]" );
klauss 123:1d395b5a4cad 382
klauss 135:2f4290590e51 383 else snprintf ( strcat_tmp, sizeof ( strcat_tmp ) - 1, "%d times ]", get_overflow_times_tmp );
klauss 123:1d395b5a4cad 384
klauss 123:1d395b5a4cad 385 strcat ( get_timer_msg, strcat_tmp );
klauss 123:1d395b5a4cad 386 }
klauss 123:1d395b5a4cad 387
klauss 123:1d395b5a4cad 388 strcat ( cbx_to_string, get_timer_msg );
klauss 123:1d395b5a4cad 389 }
klauss 123:1d395b5a4cad 390
klauss 132:05cd37f7e007 391 if ( show_invites )
klauss 132:05cd37f7e007 392 {
klauss 132:05cd37f7e007 393 char get_invites_msg [ 32 ];
klauss 132:05cd37f7e007 394
klauss 132:05cd37f7e007 395 snprintf ( get_invites_msg,
klauss 132:05cd37f7e007 396 sizeof ( get_invites_msg ) -1,
klauss 132:05cd37f7e007 397 " :: invites :: %u ", cb -> get_invite_counter () );
klauss 132:05cd37f7e007 398
klauss 132:05cd37f7e007 399 strcat ( cbx_to_string, get_invites_msg );
klauss 132:05cd37f7e007 400 }
klauss 132:05cd37f7e007 401
klauss 132:05cd37f7e007 402 vz_printf ( cbx_to_string );
klauss 121:ee02790d00b7 403 }
klauss 121:ee02790d00b7 404 }
klauss 121:ee02790d00b7 405 }
klauss 121:ee02790d00b7 406
klauss 121:ee02790d00b7 407 return ( 0 );
klauss 121:ee02790d00b7 408 }
klauss 121:ee02790d00b7 409
klauss 121:ee02790d00b7 410 int show_cb ( Vector * v_cb )
klauss 121:ee02790d00b7 411 {
klauss 132:05cd37f7e007 412 vz_printf ("Registered %d ( of %d ) CBx ( %d - %d ) -- Remain_timeslices :: %d :: v_call->size() :: %d",
klauss 132:05cd37f7e007 413 v_cb->size(), max_registered_cbx, min_ext, max_ext, ts->remain_timeslices(), v_call->size()
klauss 132:05cd37f7e007 414 );
klauss 132:05cd37f7e007 415
klauss 132:05cd37f7e007 416 for( register uint8_t i = 0; i < v_cb -> size (); i++ )
klauss 132:05cd37f7e007 417 {
klauss 132:05cd37f7e007 418 Call_Box * cb = ( Call_Box * )v_cb -> get_element ( i );
klauss 132:05cd37f7e007 419 char cb_status [ 32 ];
klauss 132:05cd37f7e007 420 char cb_sip_status [ 32 ];
klauss 121:ee02790d00b7 421 switch ( cb -> get_status () )
klauss 121:ee02790d00b7 422 {
klauss 121:ee02790d00b7 423 case cb_idle : {
klauss 132:05cd37f7e007 424 strcpy ( cb_status, "cb_idle" );
klauss 121:ee02790d00b7 425 break;
klauss 121:ee02790d00b7 426 }
klauss 121:ee02790d00b7 427 case cb_ringing : {
klauss 132:05cd37f7e007 428 strcpy ( cb_status, "cb_ringing" );
klauss 121:ee02790d00b7 429 break;
klauss 121:ee02790d00b7 430 }
klauss 121:ee02790d00b7 431 case cb_trying : {
klauss 132:05cd37f7e007 432 strcpy ( cb_status,"cb_trying" );
klauss 121:ee02790d00b7 433 break;
klauss 121:ee02790d00b7 434 }
klauss 121:ee02790d00b7 435 case cb_on_call : {
klauss 132:05cd37f7e007 436 strcpy ( cb_status, "cb_on_call" );
klauss 121:ee02790d00b7 437 break;
klauss 121:ee02790d00b7 438 }
klauss 121:ee02790d00b7 439 case cb_busy : {
klauss 132:05cd37f7e007 440 strcpy ( cb_status, "cb_busy" );
klauss 121:ee02790d00b7 441 break;
klauss 121:ee02790d00b7 442 }
klauss 121:ee02790d00b7 443 case cb_denied : {
klauss 132:05cd37f7e007 444 strcpy ( cb_status, "cb_denied" );
klauss 121:ee02790d00b7 445 break;
klauss 121:ee02790d00b7 446 }
klauss 121:ee02790d00b7 447 case cb_bootloader : {
klauss 132:05cd37f7e007 448 strcpy ( cb_status, "cb_bootloader" );
klauss 121:ee02790d00b7 449 break;
klauss 121:ee02790d00b7 450 }
klauss 121:ee02790d00b7 451 }
klauss 121:ee02790d00b7 452 switch( cb -> get_sip_status () ) {
klauss 121:ee02790d00b7 453 case sip_idle : {
klauss 132:05cd37f7e007 454 strcpy ( cb_sip_status, "sip_idle" );
klauss 121:ee02790d00b7 455 break;
klauss 121:ee02790d00b7 456 }
klauss 121:ee02790d00b7 457 case sip_waiting_trying : {
klauss 132:05cd37f7e007 458 strcpy ( cb_sip_status, "sip_waiting_trying" );
klauss 121:ee02790d00b7 459 break;
klauss 121:ee02790d00b7 460 }
klauss 121:ee02790d00b7 461 case sip_trying : {
klauss 132:05cd37f7e007 462 strcpy ( cb_sip_status, "sip_trying" );
klauss 121:ee02790d00b7 463 break;
klauss 121:ee02790d00b7 464 }
klauss 121:ee02790d00b7 465 case sip_ringing : {
klauss 132:05cd37f7e007 466 strcpy ( cb_sip_status, "sip_ringing" );
klauss 121:ee02790d00b7 467 break;
klauss 121:ee02790d00b7 468 }
klauss 121:ee02790d00b7 469 case sip_busy : {
klauss 132:05cd37f7e007 470 strcpy ( cb_sip_status, "sip_busy" );
klauss 121:ee02790d00b7 471 break;
klauss 121:ee02790d00b7 472 }
klauss 121:ee02790d00b7 473 case sip_ok : {
klauss 132:05cd37f7e007 474 strcpy ( cb_sip_status, "sip_ok" );
klauss 121:ee02790d00b7 475 break;
klauss 121:ee02790d00b7 476 }
klauss 121:ee02790d00b7 477 case sip_on_call : {
klauss 132:05cd37f7e007 478 strcpy ( cb_sip_status, "sip_on_call" );
klauss 121:ee02790d00b7 479 break;
klauss 121:ee02790d00b7 480 }
klauss 121:ee02790d00b7 481 case sip_denied : {
klauss 132:05cd37f7e007 482 strcpy ( cb_sip_status, "sip_denied" );
klauss 121:ee02790d00b7 483 break;
klauss 121:ee02790d00b7 484 }
klauss 121:ee02790d00b7 485 }
klauss 121:ee02790d00b7 486
klauss 132:05cd37f7e007 487 char cbx_to_string [ 254 ];
klauss 121:ee02790d00b7 488 snprintf ( cbx_to_string, sizeof ( cbx_to_string ),
klauss 123:1d395b5a4cad 489 "Ext :: %5i :: Port :: %5i :: Status -- %s - %s",
klauss 132:05cd37f7e007 490 cb -> get_ext (), cb -> get_port (), cb_status, cb_sip_status
klauss 121:ee02790d00b7 491 );
klauss 121:ee02790d00b7 492
klauss 132:05cd37f7e007 493 if ( cb -> get_timeslice () not_eq 0 )
klauss 121:ee02790d00b7 494 {
klauss 132:05cd37f7e007 495 char aux [ 32 ];
klauss 132:05cd37f7e007 496 snprintf ( aux, sizeof ( aux ), " -- on TimeSlice :: %i", cb -> get_timeslice () );
klauss 132:05cd37f7e007 497 strcat ( cbx_to_string, aux );
klauss 121:ee02790d00b7 498 }
klauss 121:ee02790d00b7 499
klauss 121:ee02790d00b7 500
klauss 132:05cd37f7e007 501 vz_printf ( cbx_to_string );
klauss 121:ee02790d00b7 502 }
klauss 121:ee02790d00b7 503
klauss 121:ee02790d00b7 504 return ( 0 );
klauss 121:ee02790d00b7 505 }
klauss 121:ee02790d00b7 506
klauss 121:ee02790d00b7 507 int show_cb_sip ( Vector * v_cb )
klauss 121:ee02790d00b7 508 {
klauss 132:05cd37f7e007 509 vz_printf (":: Sip :: %u", v_cb -> size () );
klauss 122:480c44b0e205 510 for ( register uint8_t i = 0; i < v_cb -> size (); i++ )
klauss 122:480c44b0e205 511 {
klauss 122:480c44b0e205 512 Call_Box * cb = ( Call_Box * ) v_cb -> get_element ( i );
klauss 121:ee02790d00b7 513
klauss 123:1d395b5a4cad 514 char tmp_send_msg [ 256 ];
klauss 123:1d395b5a4cad 515
klauss 123:1d395b5a4cad 516 snprintf ( tmp_send_msg, sizeof ( tmp_send_msg ) - 1,
klauss 123:1d395b5a4cad 517 "ext :: %5i -- port :: %5i -- timer %4i [ %s ",
klauss 122:480c44b0e205 518 cb -> get_sip_ext (),
klauss 121:ee02790d00b7 519 cb -> get_sip_port (),
klauss 121:ee02790d00b7 520 cb -> get_timer (),
klauss 121:ee02790d00b7 521 ( cb -> get_overflow_flag () ) ? "Overflow" : "Ok"
klauss 121:ee02790d00b7 522 );
klauss 123:1d395b5a4cad 523
klauss 123:1d395b5a4cad 524 int get_overflow_times_tmp = cb -> get_overflow_times ();
klauss 123:1d395b5a4cad 525
klauss 123:1d395b5a4cad 526 if ( get_overflow_times_tmp == 0 ) strcat ( tmp_send_msg, "]" );
klauss 123:1d395b5a4cad 527
klauss 123:1d395b5a4cad 528 else {
klauss 123:1d395b5a4cad 529 char strcat_tmp [ 16 ];
klauss 123:1d395b5a4cad 530 if ( get_overflow_times_tmp == 1 ) snprintf( strcat_tmp, sizeof ( strcat_tmp ) - 1, "1 time ]" );
klauss 123:1d395b5a4cad 531
klauss 123:1d395b5a4cad 532 else snprintf( strcat_tmp, sizeof ( strcat_tmp ) - 1, "%d times ]", get_overflow_times_tmp );
klauss 123:1d395b5a4cad 533
klauss 123:1d395b5a4cad 534 strcat ( tmp_send_msg, strcat_tmp );
klauss 123:1d395b5a4cad 535 }
klauss 123:1d395b5a4cad 536
klauss 132:05cd37f7e007 537 vz_printf ( tmp_send_msg );
klauss 121:ee02790d00b7 538 }
klauss 121:ee02790d00b7 539
klauss 121:ee02790d00b7 540 return ( 0 );
klauss 121:ee02790d00b7 541 }
klauss 121:ee02790d00b7 542
klauss 121:ee02790d00b7 543 int show_sizes ( void )
klauss 121:ee02790d00b7 544 {
klauss 121:ee02790d00b7 545 sizes = false;
klauss 132:05cd37f7e007 546 vz_printf ( "CB_New (%u) -- CB_Delete (%u)", cb_new_counter, cb_delete_counter );
klauss 132:05cd37f7e007 547 vz_printf ( "SIP_New (%u) -- SIP_Delete (%u)", sip_new_counter, sip_delete_counter );
klauss 132:05cd37f7e007 548 vz_printf ( "RTP_header_New (%u) -- RTP_header_Delete (%u)", rtp_header_new_counter, rtp_header_delete_counter );
klauss 132:05cd37f7e007 549 vz_printf ( "RTP_body_New (%u) -- RTP_body_Delete (%u)", rtp_body_new_counter, rtp_body_delete_counter );
klauss 132:05cd37f7e007 550 vz_printf ( "Call_New (%u) -- Call_Delete (%u)", call_new_counter, call_delete_counter );
klauss 132:05cd37f7e007 551 vz_printf ( "lpc_low_level_input_counter :: %d", lpc_low_level_input_counter );
klauss 132:05cd37f7e007 552 vz_printf ( "Memory is %s", ( memory_is_over ) ? "Over" : "Ok" );
klauss 132:05cd37f7e007 553 vz_printf ( "Missed_Pkg :: %d ::", missed_pkg );
klauss 132:05cd37f7e007 554 vz_printf ( "Sizeof Sip :: %u", sizeof ( Sip ) );
klauss 132:05cd37f7e007 555 vz_printf ( "Sizeof Call_Box :: %u", sizeof ( Call_Box ) );
klauss 132:05cd37f7e007 556 vz_printf ( "Sizeof VZ_call :: %u", sizeof ( VZ_call ) );
klauss 132:05cd37f7e007 557 vz_printf ( "Sizeof RTP :: %u", sizeof ( RTP ) );
klauss 132:05cd37f7e007 558 vz_printf ( "Sizeof RTP_Header :: %u", sizeof ( RTP_Header ) );
klauss 132:05cd37f7e007 559 vz_printf ( "Sizeof RTP_Body :: %u", sizeof ( RTP_Body ) );
klauss 132:05cd37f7e007 560 vz_printf ( "Sizeof Vector :: %u", sizeof ( Vector ) );
klauss 132:05cd37f7e007 561 vz_printf ("Sizeof Timeslice :: %u", sizeof ( Timeslice ) );
klauss 132:05cd37f7e007 562 vz_printf ( "Sizeof Watchdog :: %u", sizeof ( Watchdog ) );
klauss 121:ee02790d00b7 563
klauss 121:ee02790d00b7 564 return ( 0 );
klauss 121:ee02790d00b7 565 }
klauss 121:ee02790d00b7 566
klauss 121:ee02790d00b7 567 int check_udp_packages_pending ( Vector * v_cb )
klauss 121:ee02790d00b7 568 {
klauss 121:ee02790d00b7 569 fd_set fdSet;
klauss 121:ee02790d00b7 570 FD_ZERO(&fdSet);
klauss 132:05cd37f7e007 571
klauss 132:05cd37f7e007 572 udp_query = false;
klauss 132:05cd37f7e007 573 from_eth = false;
klauss 121:ee02790d00b7 574
klauss 121:ee02790d00b7 575 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 121:ee02790d00b7 576 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 121:ee02790d00b7 577 FD_SET( cb->get_sip_socket_fd(), &fdSet);
klauss 121:ee02790d00b7 578 }
klauss 121:ee02790d00b7 579
klauss 121:ee02790d00b7 580 /* Recepcao de pacotes UDP para atualizacao de callboxes */
klauss 124:c1b6c893e1c3 581 FD_SET( udp_bl_client.get_fd (), &fdSet);
klauss 121:ee02790d00b7 582
klauss 121:ee02790d00b7 583 /* Recepcao de pacotes UDP para "tickagem" do watchdog */
klauss 124:c1b6c893e1c3 584 FD_SET( udp_wdt_client.get_fd (), &fdSet);
klauss 121:ee02790d00b7 585
klauss 121:ee02790d00b7 586 // adiciona o socket de comandos prompt-UDP-ETH
klauss 124:c1b6c893e1c3 587 FD_SET( udp_client.get_fd (), &fdSet );
klauss 121:ee02790d00b7 588
klauss 121:ee02790d00b7 589 // adiciona o socket de pedido de clock para o servidor
klauss 124:c1b6c893e1c3 590 FD_SET( clock_sock.get_fd (), &fdSet );
klauss 121:ee02790d00b7 591
klauss 121:ee02790d00b7 592 struct timeval t;
klauss 121:ee02790d00b7 593 t.tv_sec = 0;
klauss 121:ee02790d00b7 594 t.tv_usec = 0;
klauss 124:c1b6c893e1c3 595 int ret = lwip_select ( FD_SETSIZE, &fdSet, NULL, NULL, &t );
klauss 121:ee02790d00b7 596
klauss 124:c1b6c893e1c3 597 if ( ( udp_bl_timer.read() > 30) and (bl_start_flag) )
klauss 124:c1b6c893e1c3 598 {
klauss 121:ee02790d00b7 599 udp_bl_timer.stop();
klauss 121:ee02790d00b7 600 udp_bl_timer.reset();
klauss 121:ee02790d00b7 601 bl_start_flag = 0;
klauss 126:1f90756250fb 602 if (bl_ts not_eq 0) {
klauss 121:ee02790d00b7 603 ts->return_timeslice( bl_ts );
klauss 121:ee02790d00b7 604 bl_ts = 0;
klauss 121:ee02790d00b7 605 }
klauss 126:1f90756250fb 606 if (bl_cb not_eq NULL) {
klauss 121:ee02790d00b7 607 bl_cb -> set_timeslice( 0 );
klauss 121:ee02790d00b7 608 bl_cb -> cb_set_status ( cb_idle );
klauss 121:ee02790d00b7 609 bl_cb = NULL;
klauss 121:ee02790d00b7 610 }
klauss 121:ee02790d00b7 611 }
klauss 121:ee02790d00b7 612
klauss 121:ee02790d00b7 613 if ( ret > 0 )
klauss 121:ee02790d00b7 614 {
klauss 132:05cd37f7e007 615 for ( register uint8_t i = 0; i < v_cb -> size (); i++ )
klauss 132:05cd37f7e007 616 {
klauss 132:05cd37f7e007 617 Call_Box * cb = ( Call_Box * )v_cb -> get_element ( i );
klauss 132:05cd37f7e007 618 int fd = cb -> get_sip_socket_fd ();
klauss 132:05cd37f7e007 619 if ( FD_ISSET ( fd, &fdSet ) )
klauss 132:05cd37f7e007 620 {
klauss 135:2f4290590e51 621 cb -> sip_udp_incomming_pkg ();
klauss 121:ee02790d00b7 622 }
klauss 121:ee02790d00b7 623 }
klauss 121:ee02790d00b7 624
klauss 121:ee02790d00b7 625 /* Tratamento dos pacotes de bootloader vindo do servidor */
klauss 121:ee02790d00b7 626 if( FD_ISSET( udp_bl_client.get_fd(), &fdSet ) ) {
klauss 121:ee02790d00b7 627 if( udp_bl_client.receiveFrom( udp_bl_server, bl_recv_buffer, sizeof( bl_recv_buffer ) ) > 0 ) {
klauss 121:ee02790d00b7 628 uint16_t cnt = 0;
klauss 121:ee02790d00b7 629 if (debug_bootloader) {
klauss 121:ee02790d00b7 630 pc.printf("\r\nPACOTE SRV->HDR {");
klauss 121:ee02790d00b7 631 for (cnt = 0;cnt < UDP_BL_SIZE;cnt++) {
klauss 121:ee02790d00b7 632 if ((cnt % 30) == 0) {
klauss 121:ee02790d00b7 633 pc.printf("\r\n ");
klauss 121:ee02790d00b7 634 pc.printf(hex16(cnt));
klauss 121:ee02790d00b7 635 pc.printf(" : ");
klauss 121:ee02790d00b7 636 }
klauss 121:ee02790d00b7 637 pc.printf(hex8(bl_recv_buffer[cnt]));
klauss 121:ee02790d00b7 638 pc.printf(", ");
klauss 121:ee02790d00b7 639 }
klauss 121:ee02790d00b7 640 pc.printf("\r\n}");
klauss 121:ee02790d00b7 641 }
klauss 121:ee02790d00b7 642 bl_peer = ((uint8_t)bl_recv_buffer[0])*256 + (uint8_t)bl_recv_buffer[1];
klauss 121:ee02790d00b7 643 bl_send_buffer[0] = bl_recv_buffer[0];
klauss 121:ee02790d00b7 644 bl_send_buffer[1] = bl_recv_buffer[1];
klauss 121:ee02790d00b7 645 for (cnt = 2;cnt < UDP_BL_SIZE;cnt++) {
klauss 121:ee02790d00b7 646 bl_send_buffer[cnt] = 0;
klauss 121:ee02790d00b7 647 }
klauss 121:ee02790d00b7 648
klauss 121:ee02790d00b7 649 if ((bl_ts == 0) and !(bl_start_flag)) {
klauss 121:ee02790d00b7 650 bl_ts = ts->get_timeslice();
klauss 121:ee02790d00b7 651 }
klauss 121:ee02790d00b7 652
klauss 121:ee02790d00b7 653 /* caso nao haja timeslice disponivel informar servidor */
klauss 121:ee02790d00b7 654 if ((bl_ts == 0) and !(bl_start_flag)) {
klauss 121:ee02790d00b7 655 strncpy(bl_send_buffer + 2,"cbxdead\x00",8);
klauss 132:05cd37f7e007 656 int udp_bl_client_ret = udp_bl_client.sendTo ( udp_bl_server, bl_send_buffer, strlen ( bl_send_buffer ) );
klauss 121:ee02790d00b7 657
klauss 126:1f90756250fb 658 if ( udp_bl_client_ret not_eq strlen( bl_send_buffer ) )
klauss 121:ee02790d00b7 659 {
klauss 132:05cd37f7e007 660 reconnect_bl ();
klauss 132:05cd37f7e007 661 miss_bl_udp_send_pkg ++;
klauss 132:05cd37f7e007 662 if ( debug_reconnect ) vz_printf ( "[%d] Reconnect BL - %d", bl_peer, udp_bl_client_ret );
klauss 121:ee02790d00b7 663 }
klauss 121:ee02790d00b7 664 } else {
klauss 121:ee02790d00b7 665
klauss 121:ee02790d00b7 666 /* pacote para verificar se o callbox esta disponivel */
klauss 121:ee02790d00b7 667 if (!(strncmp(bl_recv_buffer + 2,"avaiable?",9))) {
klauss 121:ee02790d00b7 668 bl_start_flag = 1;
klauss 121:ee02790d00b7 669 udp_bl_timer.start();
klauss 121:ee02790d00b7 670 udp_bl_timer.reset();
klauss 121:ee02790d00b7 671 strncpy(bl_send_buffer + 2,"cbxalive\x00",9);
klauss 121:ee02790d00b7 672 if (debug_bootloader) {
klauss 121:ee02790d00b7 673 pc.printf("\r\nPACOTE HDR->SRV {");
klauss 121:ee02790d00b7 674 for (cnt = 0;cnt < UDP_BL_SIZE;cnt++) {
klauss 121:ee02790d00b7 675 if ((cnt % 30) == 0) {
klauss 121:ee02790d00b7 676 pc.printf("\r\n ");
klauss 121:ee02790d00b7 677 pc.printf(hex16(cnt));
klauss 121:ee02790d00b7 678 pc.printf(" : ");
klauss 121:ee02790d00b7 679 }
klauss 121:ee02790d00b7 680 pc.printf(hex8(bl_send_buffer[cnt]));
klauss 121:ee02790d00b7 681 pc.printf(", ");
klauss 121:ee02790d00b7 682 }
klauss 121:ee02790d00b7 683 pc.printf("\r\n}");
klauss 121:ee02790d00b7 684 }
klauss 132:05cd37f7e007 685 int udp_bl_client_ret = udp_bl_client.sendTo ( udp_bl_server, bl_send_buffer, strlen ( bl_send_buffer ) );
klauss 132:05cd37f7e007 686
klauss 132:05cd37f7e007 687 if ( udp_bl_client_ret not_eq strlen( bl_send_buffer ) )
klauss 132:05cd37f7e007 688 {
klauss 132:05cd37f7e007 689 reconnect_bl ();
klauss 132:05cd37f7e007 690 miss_bl_udp_send_pkg ++;
klauss 132:05cd37f7e007 691 if ( debug_reconnect ) vz_printf ( "[%d] Reconnect BL - %d", bl_peer, udp_bl_client_ret );
klauss 132:05cd37f7e007 692 }
klauss 121:ee02790d00b7 693 }
klauss 121:ee02790d00b7 694
klauss 121:ee02790d00b7 695 /* pacote para indicar o termino do processo de atualizacao */
klauss 121:ee02790d00b7 696 else if (!(strncmp(bl_recv_buffer + 2,"finished",8))) {
klauss 121:ee02790d00b7 697 bl_start_flag = 0;
klauss 126:1f90756250fb 698 if (bl_ts not_eq 0) {
klauss 121:ee02790d00b7 699 ts->return_timeslice( bl_ts );
klauss 121:ee02790d00b7 700 bl_ts = 0;
klauss 121:ee02790d00b7 701 }
klauss 126:1f90756250fb 702 if (bl_cb not_eq NULL) {
klauss 121:ee02790d00b7 703 bl_cb->set_timeslice( 0 );
klauss 121:ee02790d00b7 704 bl_cb -> cb_set_status( cb_idle );
klauss 121:ee02790d00b7 705 bl_cb = NULL;
klauss 121:ee02790d00b7 706 }
klauss 121:ee02790d00b7 707 }
klauss 121:ee02790d00b7 708
klauss 121:ee02790d00b7 709 /* pacotes a serem repassados para o callbox */
klauss 121:ee02790d00b7 710 else if (bl_start_flag) {
klauss 121:ee02790d00b7 711 uint16_t bl_cnt = 0;
klauss 121:ee02790d00b7 712 udp_bl_timer.reset();
klauss 121:ee02790d00b7 713 /* pacote de ERASE enviado para o cbx */
klauss 121:ee02790d00b7 714 /* neste momento a cabeceira sabe que o servidor se comunicou com o callbox */
klauss 121:ee02790d00b7 715 if (!(strncmp(bl_recv_buffer + 2,"\x45",1))) {
klauss 121:ee02790d00b7 716 bl_cb = find_CB( v_cb, bl_peer );
klauss 126:1f90756250fb 717 if (bl_cb not_eq NULL) {
klauss 121:ee02790d00b7 718 bl_cb->set_timeslice( bl_ts );
klauss 121:ee02790d00b7 719 bl_cb -> cb_set_status ( cb_bootloader );
klauss 121:ee02790d00b7 720 }
klauss 121:ee02790d00b7 721 }
klauss 121:ee02790d00b7 722 /* pacote de OK enviado para o cbx */
klauss 121:ee02790d00b7 723 /* neste momento a cabeceira desaloca o timeslice do callbox */
klauss 121:ee02790d00b7 724 if (!(strncmp(bl_recv_buffer + 2,"\x4f\x00\x00\x00",4))) {
klauss 121:ee02790d00b7 725 ts->return_timeslice( bl_ts );
klauss 121:ee02790d00b7 726 bl_ts = 0;
klauss 126:1f90756250fb 727 if (bl_cb not_eq NULL) {
klauss 121:ee02790d00b7 728 bl_cb->set_timeslice( 0 );
klauss 121:ee02790d00b7 729 }
klauss 121:ee02790d00b7 730 }
klauss 121:ee02790d00b7 731 bl_cbx_buffer[0] = bl_ts;
klauss 121:ee02790d00b7 732 for (bl_cnt = 0; bl_cnt < BL_SIZE; bl_cnt++) {
klauss 121:ee02790d00b7 733 bl_cbx_buffer[bl_cnt + 1] = bl_recv_buffer[bl_cnt + 2];
klauss 121:ee02790d00b7 734 }
klauss 121:ee02790d00b7 735 if (debug_bootloader) {
klauss 121:ee02790d00b7 736 pc.printf("\r\nPACOTE HDR->CBX {");
klauss 121:ee02790d00b7 737 for (cnt = 0;cnt < BL_SIZE + 1;cnt++) {
klauss 121:ee02790d00b7 738 if ((cnt % 30) == 0) {
klauss 121:ee02790d00b7 739 pc.printf("\r\n ");
klauss 121:ee02790d00b7 740 pc.printf(hex16(cnt));
klauss 121:ee02790d00b7 741 pc.printf(" : ");
klauss 121:ee02790d00b7 742 }
klauss 121:ee02790d00b7 743 pc.printf(hex8(bl_cbx_buffer[cnt]));
klauss 121:ee02790d00b7 744 pc.printf(", ");
klauss 121:ee02790d00b7 745 }
klauss 121:ee02790d00b7 746 pc.printf("\r\n}");
klauss 121:ee02790d00b7 747 }
klauss 126:1f90756250fb 748 if (bl_cb not_eq NULL) {
klauss 121:ee02790d00b7 749 bl_port = bl_cb->get_port();
klauss 121:ee02790d00b7 750 } else {
klauss 121:ee02790d00b7 751 bl_port = bl_peer;
klauss 121:ee02790d00b7 752 }
klauss 121:ee02790d00b7 753 send2callboxes( build_cb_package( bl_peer, bl_port, BOOTLOADER_CBX,bl_cbx_buffer, 0, BL_SIZE + 1, write_buffer) );
klauss 121:ee02790d00b7 754 }
klauss 121:ee02790d00b7 755 }
klauss 121:ee02790d00b7 756 }
klauss 121:ee02790d00b7 757 }
klauss 121:ee02790d00b7 758
klauss 121:ee02790d00b7 759 // verifica o socket do prompt-UDP-ETH
klauss 121:ee02790d00b7 760 if( FD_ISSET( udp_client.get_fd(), &fdSet ) ) {
klauss 132:05cd37f7e007 761 char to_prompt_process [ PROMPT_UDP_COMMAND_SIZE ];
klauss 121:ee02790d00b7 762 for( register int i = 0; i < PROMPT_UDP_COMMAND_SIZE; i++ ) to_prompt_process[ i ] = 0;
klauss 121:ee02790d00b7 763
klauss 132:05cd37f7e007 764 int prompt_process_msg_rcv = udp_client.receiveFrom ( udp_server, to_prompt_process, ( PROMPT_UDP_COMMAND_SIZE - 1 ) );
klauss 121:ee02790d00b7 765
klauss 132:05cd37f7e007 766 if ( prompt_process_msg_rcv == -1 )
klauss 121:ee02790d00b7 767 {
klauss 132:05cd37f7e007 768 if ( debug_reconnect ) vz_printf ("Reconnect Prompt Process");
klauss 132:05cd37f7e007 769 reconnect_udp_prompt_process ();
klauss 132:05cd37f7e007 770 miss_prompt_udp_rcv_pkg ++;
klauss 121:ee02790d00b7 771 }
klauss 132:05cd37f7e007 772 else if ( prompt_process_msg_rcv > 0 )
klauss 121:ee02790d00b7 773 {
klauss 121:ee02790d00b7 774 udp_query = true;
klauss 132:05cd37f7e007 775 from_eth = true;
klauss 132:05cd37f7e007 776 prompt_process ( to_prompt_process, prompt_process_msg_rcv );
klauss 121:ee02790d00b7 777 }
klauss 121:ee02790d00b7 778 }
klauss 121:ee02790d00b7 779
klauss 121:ee02790d00b7 780 // verifica o socket do watchdog
klauss 124:c1b6c893e1c3 781 if ( FD_ISSET ( udp_wdt_client.get_fd(), &fdSet ) )
klauss 124:c1b6c893e1c3 782 {
klauss 122:480c44b0e205 783 const uint16_t WAKE_MSG_SIZE = 768;
klauss 122:480c44b0e205 784 static char wake_msg [ WAKE_MSG_SIZE ];
klauss 122:480c44b0e205 785
klauss 122:480c44b0e205 786 for ( register uint16_t i = 0; i < WAKE_MSG_SIZE; i ++ ) wake_msg [ i ] = 0;
klauss 122:480c44b0e205 787
klauss 121:ee02790d00b7 788 Endpoint udp_wdt_server;
klauss 121:ee02790d00b7 789
klauss 132:05cd37f7e007 790 int wake_msg_rcv = udp_wdt_client.receiveFrom ( udp_wdt_server, wake_msg, sizeof ( wake_msg ) );
klauss 121:ee02790d00b7 791
klauss 132:05cd37f7e007 792 if ( dmissed_wdt ) vz_debug ("wake_msg_rcv :: %d -- wake_msg :: %s", wake_msg_rcv, wake_msg );
klauss 122:480c44b0e205 793
klauss 121:ee02790d00b7 794 if( wake_msg_rcv == -1 )
klauss 121:ee02790d00b7 795 {
klauss 132:05cd37f7e007 796 if( debug_reconnect ) vz_printf ("Reconnect Extern wdt");
klauss 132:05cd37f7e007 797 reconnect_extern_wdt_socket ();
klauss 132:05cd37f7e007 798 miss_wdt_send_pkg ++;
klauss 121:ee02790d00b7 799 }
klauss 121:ee02790d00b7 800 else if( wake_msg_rcv > 0 )
klauss 121:ee02790d00b7 801 {
klauss 121:ee02790d00b7 802 if( !( strncmp( wake_msg, "alive", 5 ) ) ) {
klauss 121:ee02790d00b7 803 // Just ckeck but not set 'alive?'
klauss 121:ee02790d00b7 804 // 'alive*' - force wdt tick right now
klauss 121:ee02790d00b7 805 // Ckecking and set 'alive'
klauss 121:ee02790d00b7 806 bool question_alive = ( wake_msg[ 5 ] == '?' );
klauss 121:ee02790d00b7 807 if( wake_msg[ 5 ] == '*' ) wdt.kick();
klauss 121:ee02790d00b7 808
klauss 132:05cd37f7e007 809 if ( dmissed_wdt ) if ( wake_msg [ 5 ] == '?' ) vz_debug ("Recebi o alive ???");
klauss 122:480c44b0e205 810
klauss 132:05cd37f7e007 811 build_wdt_string ( wake_msg, WAKE_MSG_SIZE - 1 );
klauss 132:05cd37f7e007 812
klauss 122:480c44b0e205 813 wake_msg[ WAKE_MSG_SIZE - 1 ] = 0;
klauss 122:480c44b0e205 814
klauss 132:05cd37f7e007 815 int send = udp_wdt_client.sendTo ( udp_wdt_server, wake_msg, strlen ( wake_msg ) );
klauss 132:05cd37f7e007 816 if( send not_eq strlen ( wake_msg ) )
klauss 121:ee02790d00b7 817 {
klauss 132:05cd37f7e007 818 if ( debug_reconnect ) vz_debug ("Reconnect Extern wdt (%d, %d)", send, strlen ( wake_msg ) );
klauss 122:480c44b0e205 819 reconnect_extern_wdt_socket ();
klauss 132:05cd37f7e007 820 miss_wdt_send_pkg ++;
klauss 121:ee02790d00b7 821 }
klauss 122:480c44b0e205 822
klauss 132:05cd37f7e007 823 if ( (
klauss 132:05cd37f7e007 824 (!question_alive)
klauss 135:2f4290590e51 825 && ( cb_new_counter <= u8_MAX_CB_IN_A_BRANCH )
klauss 132:05cd37f7e007 826 && ( ( cb_new_counter >= MIN_CBX_IN_A_BRANCH ) || ( disable_wdt_from_cbx ) )
klauss 132:05cd37f7e007 827 ) )
klauss 132:05cd37f7e007 828 {
klauss 132:05cd37f7e007 829 external_wdt = EXTERN_WDT_IDLE;
klauss 132:05cd37f7e007 830 if ( dmissed_wdt ) vz_debug ("kickando");
klauss 132:05cd37f7e007 831 }
klauss 132:05cd37f7e007 832
klauss 132:05cd37f7e007 833 if ( dmissed_wdt ) vz_debug ("Mandei send = %d[::%s::] to [%s:%i]", send, wake_msg, udp_wdt_server.get_address (), udp_wdt_server.get_port () );
klauss 122:480c44b0e205 834
klauss 121:ee02790d00b7 835 } else if( !( strncmp( wake_msg, "reset", 5 ) ) ) {
klauss 121:ee02790d00b7 836 external_wdt = 0;
klauss 121:ee02790d00b7 837
klauss 121:ee02790d00b7 838 sprintf( wake_msg, "rst:%u:", uptime );
klauss 132:05cd37f7e007 839 int send = udp_wdt_client.sendTo ( udp_wdt_server, wake_msg, strlen( wake_msg ) );
klauss 126:1f90756250fb 840 if( send not_eq strlen( wake_msg ) )
klauss 121:ee02790d00b7 841 {
klauss 132:05cd37f7e007 842 if( debug_reconnect ) vz_printf ("Reconnect Extern wdt");
klauss 132:05cd37f7e007 843 reconnect_extern_wdt_socket ();
klauss 132:05cd37f7e007 844 miss_wdt_send_pkg ++;
klauss 121:ee02790d00b7 845 }
klauss 121:ee02790d00b7 846 }
klauss 121:ee02790d00b7 847 }
klauss 121:ee02790d00b7 848 }
klauss 121:ee02790d00b7 849
klauss 121:ee02790d00b7 850 if( FD_ISSET( clock_sock.get_fd(), &fdSet ) )
klauss 121:ee02790d00b7 851 {
klauss 121:ee02790d00b7 852 update_clock ();
klauss 121:ee02790d00b7 853 }
klauss 121:ee02790d00b7 854 }
klauss 121:ee02790d00b7 855
klauss 121:ee02790d00b7 856 return ( ret );
klauss 121:ee02790d00b7 857 }
klauss 121:ee02790d00b7 858
klauss 121:ee02790d00b7 859 int show_cb_content ( void )
klauss 121:ee02790d00b7 860 {
klauss 121:ee02790d00b7 861 Call_Box * cb = find_CB ( v_cb, print_this_cb );
klauss 132:05cd37f7e007 862 if ( cb not_eq NULL ) {
klauss 121:ee02790d00b7 863 cb -> print_yourself ();
klauss 132:05cd37f7e007 864 } else {
klauss 132:05cd37f7e007 865 if ( print_values ) {
klauss 132:05cd37f7e007 866 vz_debug ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 132:05cd37f7e007 867 } else {
klauss 132:05cd37f7e007 868 vz_printf ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 121:ee02790d00b7 869 }
klauss 121:ee02790d00b7 870 }
klauss 121:ee02790d00b7 871
klauss 121:ee02790d00b7 872 return ( 0 );
klauss 121:ee02790d00b7 873 }
klauss 121:ee02790d00b7 874
klauss 121:ee02790d00b7 875 int show_cb_content_all ( void )
klauss 121:ee02790d00b7 876 {
klauss 132:05cd37f7e007 877 if ( v_cb -> size () == 0 ) {
klauss 132:05cd37f7e007 878 vz_printf ("known CBx :: 0");
klauss 121:ee02790d00b7 879 }
klauss 121:ee02790d00b7 880
klauss 121:ee02790d00b7 881 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 121:ee02790d00b7 882 {
klauss 121:ee02790d00b7 883 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 121:ee02790d00b7 884
klauss 132:05cd37f7e007 885 if ( cb not_eq NULL ) {
klauss 121:ee02790d00b7 886 cb -> print_yourself ();
klauss 132:05cd37f7e007 887 } else {
klauss 132:05cd37f7e007 888 if ( print_values ) vz_debug ("Objeto CBx ( %d ) nao encontrado", i );
klauss 121:ee02790d00b7 889 }
klauss 121:ee02790d00b7 890 }
klauss 121:ee02790d00b7 891
klauss 121:ee02790d00b7 892 return ( 0 );
klauss 121:ee02790d00b7 893 }
klauss 121:ee02790d00b7 894
klauss 121:ee02790d00b7 895 int show_rtp ( void )
klauss 121:ee02790d00b7 896 {
klauss 132:05cd37f7e007 897 vz_printf (":: RTP :: %u", v_cb->size() );
klauss 121:ee02790d00b7 898
klauss 135:2f4290590e51 899 int ext_list[ u8_MAX_CB_IN_A_BRANCH ];
klauss 121:ee02790d00b7 900
klauss 121:ee02790d00b7 901 if( v_cb->size() >= 1 ) {
klauss 121:ee02790d00b7 902 for( register int i = 0; i < v_cb->size(); i++ )
klauss 121:ee02790d00b7 903 {
klauss 121:ee02790d00b7 904 ext_list[ i ] = ( ( Call_Box * )v_cb->get_element( i ) )->get_ext();
klauss 121:ee02790d00b7 905 }
klauss 121:ee02790d00b7 906 qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
klauss 121:ee02790d00b7 907 }
klauss 121:ee02790d00b7 908
klauss 121:ee02790d00b7 909 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 121:ee02790d00b7 910 {
klauss 121:ee02790d00b7 911 Call_Box * cb = find_CB( v_cb, ext_list[ i ] );
klauss 126:1f90756250fb 912 if( cb not_eq NULL )
klauss 121:ee02790d00b7 913 {
klauss 132:05cd37f7e007 914 vz_printf ("CBX ( %d, %d ) - SIP ( %d, %d ) - RTP ( %d )",
klauss 121:ee02790d00b7 915 cb -> get_ext (),
klauss 121:ee02790d00b7 916 cb -> get_port (),
klauss 121:ee02790d00b7 917 cb -> get_sip_ext (),
klauss 121:ee02790d00b7 918 cb -> get_sip_port (),
klauss 121:ee02790d00b7 919 cb -> get_rtp_port ()
klauss 121:ee02790d00b7 920 );
klauss 121:ee02790d00b7 921 }
klauss 121:ee02790d00b7 922 }
klauss 121:ee02790d00b7 923
klauss 121:ee02790d00b7 924 return ( 0 );
klauss 121:ee02790d00b7 925 }
klauss 121:ee02790d00b7 926
klauss 132:05cd37f7e007 927 int
klauss 132:05cd37f7e007 928 fuck_rtp ( Vector * v_cb )
klauss 121:ee02790d00b7 929 {
klauss 121:ee02790d00b7 930 Call_Box * cb = find_CB( v_cb, frtp_target );
klauss 132:05cd37f7e007 931
klauss 132:05cd37f7e007 932 if ( cb not_eq NULL ) {
klauss 121:ee02790d00b7 933 cb -> set_rtp_port ( -1008789032 );
klauss 132:05cd37f7e007 934 } else {
klauss 132:05cd37f7e007 935 vz_debug ("frtp fail");
klauss 121:ee02790d00b7 936 }
klauss 121:ee02790d00b7 937
klauss 121:ee02790d00b7 938 return ( 0 );
klauss 121:ee02790d00b7 939 }
klauss 121:ee02790d00b7 940
klauss 132:05cd37f7e007 941 int
klauss 132:05cd37f7e007 942 show_hex_cb_content ( void )
klauss 121:ee02790d00b7 943 {
klauss 121:ee02790d00b7 944 uint8_t * ptr = ( uint8_t * ) find_CB ( v_cb, print_hex_this_cb );
klauss 121:ee02790d00b7 945
klauss 126:1f90756250fb 946 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 947 {
klauss 132:05cd37f7e007 948 vz_printf ( "Values :: %p\r\n", ( void *) ptr );
klauss 132:05cd37f7e007 949
klauss 121:ee02790d00b7 950 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 121:ee02790d00b7 951 {
klauss 121:ee02790d00b7 952 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 121:ee02790d00b7 953
klauss 121:ee02790d00b7 954 if ( ( i % 32 ) == 0 )
klauss 121:ee02790d00b7 955 {
klauss 132:05cd37f7e007 956 if ( i not_eq 0 ) {
klauss 121:ee02790d00b7 957 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 132:05cd37f7e007 958 } else {
klauss 121:ee02790d00b7 959 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 960 }
klauss 132:05cd37f7e007 961 } else {
klauss 121:ee02790d00b7 962 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 963 }
klauss 121:ee02790d00b7 964 }
klauss 132:05cd37f7e007 965
klauss 121:ee02790d00b7 966 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 967
klauss 121:ee02790d00b7 968 if ( tcp_session ) {
klauss 121:ee02790d00b7 969 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 121:ee02790d00b7 970
klauss 121:ee02790d00b7 971 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 121:ee02790d00b7 972
klauss 121:ee02790d00b7 973 uint8_t * ptr = ( uint8_t * ) find_CB ( v_cb, print_hex_this_cb );
klauss 121:ee02790d00b7 974
klauss 121:ee02790d00b7 975 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 121:ee02790d00b7 976 {
klauss 121:ee02790d00b7 977 char tmp[ 16 ];
klauss 121:ee02790d00b7 978 sprintf( tmp, "%x ", *ptr++ );
klauss 121:ee02790d00b7 979 strcat( aux, tmp );
klauss 121:ee02790d00b7 980 }
klauss 121:ee02790d00b7 981
klauss 121:ee02790d00b7 982 strcat( aux, "\n\r\0" );
klauss 121:ee02790d00b7 983 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 121:ee02790d00b7 984 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 121:ee02790d00b7 985 }
klauss 121:ee02790d00b7 986 }
klauss 121:ee02790d00b7 987 else
klauss 121:ee02790d00b7 988 {
klauss 132:05cd37f7e007 989 if ( print_values ) vz_debug ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 121:ee02790d00b7 990 }
klauss 121:ee02790d00b7 991
klauss 121:ee02790d00b7 992 return ( 0 );
klauss 121:ee02790d00b7 993 }
klauss 121:ee02790d00b7 994
klauss 121:ee02790d00b7 995 int show_hex_cb_content_all ()
klauss 121:ee02790d00b7 996 {
klauss 121:ee02790d00b7 997 if ( v_cb -> size () == 0 )
klauss 121:ee02790d00b7 998 {
klauss 132:05cd37f7e007 999 vz_printf ("known CBx :: 0");
klauss 121:ee02790d00b7 1000 }
klauss 121:ee02790d00b7 1001
klauss 121:ee02790d00b7 1002 for ( register uint8_t j = 0; j < v_cb->size(); j++ )
klauss 121:ee02790d00b7 1003 {
klauss 121:ee02790d00b7 1004 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 121:ee02790d00b7 1005
klauss 126:1f90756250fb 1006 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1007 {
klauss 132:05cd37f7e007 1008 vz_printf ("Values :: %p\r\n", ( void *) ptr );
klauss 121:ee02790d00b7 1009 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 121:ee02790d00b7 1010 {
klauss 121:ee02790d00b7 1011 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 121:ee02790d00b7 1012
klauss 121:ee02790d00b7 1013 if ( ( i % 32 ) == 0 )
klauss 121:ee02790d00b7 1014 {
klauss 132:05cd37f7e007 1015 if( i not_eq 0 ) {
klauss 121:ee02790d00b7 1016 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 132:05cd37f7e007 1017 } else {
klauss 121:ee02790d00b7 1018 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1019 }
klauss 132:05cd37f7e007 1020 } else {
klauss 121:ee02790d00b7 1021 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1022 }
klauss 121:ee02790d00b7 1023 }
klauss 132:05cd37f7e007 1024
klauss 121:ee02790d00b7 1025 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 1026
klauss 132:05cd37f7e007 1027 if ( tcp_session )
klauss 132:05cd37f7e007 1028 {
klauss 121:ee02790d00b7 1029 char aux[ ( sizeof( Call_Box ) * 3 ) + 3 ];
klauss 121:ee02790d00b7 1030
klauss 121:ee02790d00b7 1031 for ( register int i = 0; i < ( sizeof( Call_Box ) * 3 ) + 3 ; i++ ) aux [ i ] = 0;
klauss 121:ee02790d00b7 1032
klauss 121:ee02790d00b7 1033 uint8_t * ptr = ( uint8_t * ) v_cb->get_element( j );
klauss 121:ee02790d00b7 1034
klauss 121:ee02790d00b7 1035 for ( register int i = 0; i < sizeof( Call_Box ); i++ )
klauss 121:ee02790d00b7 1036 {
klauss 121:ee02790d00b7 1037 char tmp[ 16 ];
klauss 121:ee02790d00b7 1038 sprintf( tmp, "%x ", *ptr++ );
klauss 121:ee02790d00b7 1039 strcat( aux, tmp );
klauss 121:ee02790d00b7 1040 }
klauss 121:ee02790d00b7 1041
klauss 121:ee02790d00b7 1042 strcat( aux, "\n\r\0" );
klauss 121:ee02790d00b7 1043 tcp_client.send_all( ( char *)aux, strlen( (char * )aux ) );
klauss 121:ee02790d00b7 1044 tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
klauss 121:ee02790d00b7 1045 }
klauss 132:05cd37f7e007 1046 } else {
klauss 132:05cd37f7e007 1047 if ( print_values ) {
klauss 132:05cd37f7e007 1048 vz_debug ("Objeto CBx ( %d ) nao encontrado", j );
klauss 132:05cd37f7e007 1049 } else {
klauss 132:05cd37f7e007 1050 vz_printf ("Objeto CBx ( %d ) nao encontrado", j );
klauss 121:ee02790d00b7 1051 }
klauss 121:ee02790d00b7 1052 }
klauss 121:ee02790d00b7 1053 }
klauss 121:ee02790d00b7 1054
klauss 121:ee02790d00b7 1055 return ( 0 );
klauss 121:ee02790d00b7 1056 }
klauss 121:ee02790d00b7 1057
klauss 121:ee02790d00b7 1058
klauss 132:05cd37f7e007 1059 int show_cb_sip ( void )
klauss 121:ee02790d00b7 1060 {
klauss 121:ee02790d00b7 1061 Call_Box * cb = find_CB ( v_cb, print_this_sip );
klauss 121:ee02790d00b7 1062
klauss 126:1f90756250fb 1063 if ( cb not_eq NULL )
klauss 121:ee02790d00b7 1064 {
klauss 121:ee02790d00b7 1065 if( cb -> sip_print_yourself () == -1 )
klauss 121:ee02790d00b7 1066 {
klauss 132:05cd37f7e007 1067 if( print_values ) {
klauss 132:05cd37f7e007 1068 vz_debug ("Sip param of %d equals NULL", print_this_sip );
klauss 132:05cd37f7e007 1069 } else {
klauss 132:05cd37f7e007 1070 vz_printf ("Sip param of %d equals NULL", print_this_sip );
klauss 121:ee02790d00b7 1071 }
klauss 121:ee02790d00b7 1072 }
klauss 132:05cd37f7e007 1073 } else {
klauss 132:05cd37f7e007 1074 if ( print_values ) {
klauss 132:05cd37f7e007 1075 vz_debug ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 132:05cd37f7e007 1076 } else {
klauss 132:05cd37f7e007 1077 vz_printf ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 121:ee02790d00b7 1078 }
klauss 121:ee02790d00b7 1079 }
klauss 121:ee02790d00b7 1080
klauss 121:ee02790d00b7 1081 return ( 0 );
klauss 121:ee02790d00b7 1082 }
klauss 132:05cd37f7e007 1083 int show_cb_sip_all ( void )
klauss 121:ee02790d00b7 1084 {
klauss 121:ee02790d00b7 1085 if ( v_cb -> size () == 0 )
klauss 121:ee02790d00b7 1086 {
klauss 132:05cd37f7e007 1087 vz_printf ("known CBx :: 0");
klauss 121:ee02790d00b7 1088 }
klauss 121:ee02790d00b7 1089
klauss 121:ee02790d00b7 1090 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 121:ee02790d00b7 1091 {
klauss 121:ee02790d00b7 1092 Call_Box * cb = (Call_Box *)v_cb->get_element( i );
klauss 121:ee02790d00b7 1093
klauss 126:1f90756250fb 1094 if ( cb not_eq NULL )
klauss 121:ee02790d00b7 1095 {
klauss 121:ee02790d00b7 1096 if ( cb -> sip_print_yourself () == -1 )
klauss 121:ee02790d00b7 1097 {
klauss 132:05cd37f7e007 1098 if ( print_values ) {
klauss 132:05cd37f7e007 1099 vz_debug ("Sip param of %d equals NULL", print_this_sip );
klauss 132:05cd37f7e007 1100 } else {
klauss 132:05cd37f7e007 1101 vz_printf ("Sip param of %d equals NULL", print_this_sip );
klauss 121:ee02790d00b7 1102 }
klauss 121:ee02790d00b7 1103 }
klauss 132:05cd37f7e007 1104 } else {
klauss 132:05cd37f7e007 1105 if( print_values ) {
klauss 132:05cd37f7e007 1106 vz_debug ("CBx %d not found", print_this_sip );
klauss 132:05cd37f7e007 1107 } else {
klauss 132:05cd37f7e007 1108 vz_printf ("CBx %d not found", print_this_sip );
klauss 121:ee02790d00b7 1109 }
klauss 121:ee02790d00b7 1110 }
klauss 121:ee02790d00b7 1111 }
klauss 121:ee02790d00b7 1112 return ( 0 );
klauss 121:ee02790d00b7 1113 }
klauss 121:ee02790d00b7 1114
klauss 132:05cd37f7e007 1115 int show_cb_hex_sip ( void )
klauss 121:ee02790d00b7 1116 {
klauss 121:ee02790d00b7 1117 uint8_t * ptr = NULL;
klauss 121:ee02790d00b7 1118
klauss 121:ee02790d00b7 1119 Call_Box * cb = find_CB ( v_cb, print_hex_this_sip );
klauss 132:05cd37f7e007 1120
klauss 126:1f90756250fb 1121 if( cb not_eq NULL )
klauss 121:ee02790d00b7 1122 {
klauss 121:ee02790d00b7 1123 ptr = ( uint8_t * ) cb -> get_sip ();
klauss 121:ee02790d00b7 1124 }
klauss 121:ee02790d00b7 1125
klauss 126:1f90756250fb 1126 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1127 {
klauss 132:05cd37f7e007 1128 vz_printf ("Values :: %p\r\n", ( void *) ptr );
klauss 121:ee02790d00b7 1129 for ( register int i = 0; i < sizeof( Sip ); i++ )
klauss 121:ee02790d00b7 1130 {
klauss 121:ee02790d00b7 1131 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 121:ee02790d00b7 1132
klauss 121:ee02790d00b7 1133 if ( ( i % 32 ) == 0 )
klauss 121:ee02790d00b7 1134 {
klauss 132:05cd37f7e007 1135 if( i not_eq 0 ) {
klauss 121:ee02790d00b7 1136 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 132:05cd37f7e007 1137 } else {
klauss 121:ee02790d00b7 1138 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1139 }
klauss 132:05cd37f7e007 1140 } else {
klauss 121:ee02790d00b7 1141 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1142 }
klauss 121:ee02790d00b7 1143 }
klauss 132:05cd37f7e007 1144
klauss 121:ee02790d00b7 1145 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 1146
klauss 121:ee02790d00b7 1147 if ( tcp_session ) {
klauss 121:ee02790d00b7 1148 char aux[ ( 32 * 3 ) + 5 ];
klauss 121:ee02790d00b7 1149
klauss 121:ee02790d00b7 1150 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 121:ee02790d00b7 1151
klauss 121:ee02790d00b7 1152 ptr = NULL;
klauss 121:ee02790d00b7 1153
klauss 121:ee02790d00b7 1154 print_hex_sip_var = false;
klauss 121:ee02790d00b7 1155 Call_Box * cb = find_CB ( v_cb, print_hex_this_sip );
klauss 126:1f90756250fb 1156 if( cb not_eq NULL )
klauss 121:ee02790d00b7 1157 {
klauss 121:ee02790d00b7 1158 ptr = ( uint8_t * ) cb -> get_sip ();
klauss 121:ee02790d00b7 1159 }
klauss 121:ee02790d00b7 1160
klauss 126:1f90756250fb 1161 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1162 {
klauss 121:ee02790d00b7 1163 bool finished = false;
klauss 121:ee02790d00b7 1164 volatile int i = 0;
klauss 121:ee02790d00b7 1165 int count = 0;
klauss 121:ee02790d00b7 1166 Timer dont_overwrite_tcp_buffer;
klauss 121:ee02790d00b7 1167 dont_overwrite_tcp_buffer.reset ();
klauss 121:ee02790d00b7 1168 dont_overwrite_tcp_buffer.start ();
klauss 121:ee02790d00b7 1169
klauss 121:ee02790d00b7 1170 while ( !finished )
klauss 121:ee02790d00b7 1171 {
klauss 121:ee02790d00b7 1172 if( dont_overwrite_tcp_buffer.read_ms () >= 500 )
klauss 121:ee02790d00b7 1173 {
klauss 121:ee02790d00b7 1174 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1175 for ( ; i < sizeof( Sip ); i++ )
klauss 121:ee02790d00b7 1176 {
klauss 121:ee02790d00b7 1177 char tmp[ 16 ];
klauss 121:ee02790d00b7 1178 sprintf( tmp, "%x ", *ptr++ );
klauss 121:ee02790d00b7 1179 strcat( aux, tmp );
klauss 121:ee02790d00b7 1180 count++;
klauss 121:ee02790d00b7 1181
klauss 121:ee02790d00b7 1182 if ( count >= 32 )
klauss 121:ee02790d00b7 1183 {
klauss 121:ee02790d00b7 1184 count = 0;
klauss 121:ee02790d00b7 1185 i++;
klauss 121:ee02790d00b7 1186 break;
klauss 121:ee02790d00b7 1187 }
klauss 121:ee02790d00b7 1188 }
klauss 121:ee02790d00b7 1189 strcat ( aux, "\n\r\0" );
klauss 121:ee02790d00b7 1190 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 121:ee02790d00b7 1191 if ( i >= sizeof ( Sip ) ) finished = true;
klauss 121:ee02790d00b7 1192 strcpy ( aux, "\0" );
klauss 121:ee02790d00b7 1193 }
klauss 121:ee02790d00b7 1194 }
klauss 121:ee02790d00b7 1195 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1196 dont_overwrite_tcp_buffer.stop();
klauss 121:ee02790d00b7 1197 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 121:ee02790d00b7 1198 }
klauss 121:ee02790d00b7 1199 }
klauss 121:ee02790d00b7 1200 }
klauss 121:ee02790d00b7 1201 else
klauss 121:ee02790d00b7 1202 {
klauss 132:05cd37f7e007 1203 if ( print_values ) vz_debug ("Objeto CBx ( %d ) nao encontrado", print_this_cb );
klauss 121:ee02790d00b7 1204 }
klauss 121:ee02790d00b7 1205
klauss 121:ee02790d00b7 1206
klauss 121:ee02790d00b7 1207 return ( 0 );
klauss 121:ee02790d00b7 1208 }
klauss 121:ee02790d00b7 1209
klauss 121:ee02790d00b7 1210 int show_rtp_on_call ( void )
klauss 121:ee02790d00b7 1211 {
klauss 132:05cd37f7e007 1212 vz_printf (":: CAll RTP :: %u", v_call->size() );
klauss 121:ee02790d00b7 1213
klauss 121:ee02790d00b7 1214 for( register uint8_t i = 0; i < v_call->size(); i++ ) {
klauss 121:ee02790d00b7 1215 VZ_call * call = ( VZ_call * )v_call->get_element( i );
klauss 126:1f90756250fb 1216 if( call not_eq NULL )
klauss 121:ee02790d00b7 1217 {
klauss 132:05cd37f7e007 1218 vz_printf ("CBX ( %d, %d ) - Server ( %d, %d )",
klauss 121:ee02790d00b7 1219 call->get_cb_ext(),
klauss 121:ee02790d00b7 1220 call->get_cb_port(),
klauss 121:ee02790d00b7 1221 call->get_rtp_server_ext(),
klauss 121:ee02790d00b7 1222 call->get_rtp_server_port()
klauss 121:ee02790d00b7 1223 );
klauss 121:ee02790d00b7 1224 }
klauss 121:ee02790d00b7 1225 }
klauss 121:ee02790d00b7 1226
klauss 121:ee02790d00b7 1227 return ( 0 );
klauss 121:ee02790d00b7 1228 }
klauss 121:ee02790d00b7 1229
klauss 121:ee02790d00b7 1230 int show_call ( void )
klauss 121:ee02790d00b7 1231 {
klauss 126:1f90756250fb 1232 VZ_call * call = find_Call ( v_call, print_this_call );
klauss 121:ee02790d00b7 1233
klauss 126:1f90756250fb 1234 if ( call not_eq NULL )
klauss 121:ee02790d00b7 1235 {
klauss 132:05cd37f7e007 1236 vz_printf ("Values :: %p\r\n", ( void *) call );
klauss 121:ee02790d00b7 1237 call -> print_yourself ();
klauss 121:ee02790d00b7 1238 }
klauss 121:ee02790d00b7 1239 else
klauss 121:ee02790d00b7 1240 {
klauss 132:05cd37f7e007 1241 if( print_values ) {
klauss 132:05cd37f7e007 1242 vz_debug ("Call %d not found", print_this_call );
klauss 132:05cd37f7e007 1243 } else {
klauss 132:05cd37f7e007 1244 vz_printf ("Call %d not found", print_this_call );
klauss 121:ee02790d00b7 1245 }
klauss 121:ee02790d00b7 1246 }
klauss 121:ee02790d00b7 1247
klauss 121:ee02790d00b7 1248 return ( 0 );
klauss 121:ee02790d00b7 1249 }
klauss 121:ee02790d00b7 1250
klauss 121:ee02790d00b7 1251 int show_hex_call ( void )
klauss 121:ee02790d00b7 1252 {
klauss 126:1f90756250fb 1253 VZ_call * call = find_Call ( v_call, print_hex_this_call );
klauss 121:ee02790d00b7 1254
klauss 121:ee02790d00b7 1255 uint8_t * ptr = NULL;
klauss 126:1f90756250fb 1256 if( call not_eq NULL )
klauss 121:ee02790d00b7 1257 {
klauss 121:ee02790d00b7 1258 ptr = ( uint8_t * ) call;
klauss 121:ee02790d00b7 1259 }
klauss 121:ee02790d00b7 1260
klauss 126:1f90756250fb 1261 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1262 {
klauss 132:05cd37f7e007 1263 vz_printf ("Values :: %p\r\n", ( void *) ptr );
klauss 121:ee02790d00b7 1264 for ( register int i = 0; i < sizeof( VZ_call ); i++ )
klauss 121:ee02790d00b7 1265 {
klauss 121:ee02790d00b7 1266 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 121:ee02790d00b7 1267
klauss 121:ee02790d00b7 1268 if ( ( i % 32 ) == 0 )
klauss 121:ee02790d00b7 1269 {
klauss 132:05cd37f7e007 1270 if( i not_eq 0 ) {
klauss 121:ee02790d00b7 1271 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 132:05cd37f7e007 1272 } else {
klauss 121:ee02790d00b7 1273 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1274 }
klauss 121:ee02790d00b7 1275 }
klauss 121:ee02790d00b7 1276 else
klauss 121:ee02790d00b7 1277 {
klauss 121:ee02790d00b7 1278 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1279 }
klauss 121:ee02790d00b7 1280 }
klauss 121:ee02790d00b7 1281 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 1282
klauss 121:ee02790d00b7 1283 if ( tcp_session ) {
klauss 121:ee02790d00b7 1284 char aux[ ( 32 * 3 ) + 5 ];
klauss 121:ee02790d00b7 1285
klauss 121:ee02790d00b7 1286 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 121:ee02790d00b7 1287
klauss 121:ee02790d00b7 1288 ptr = NULL;
klauss 121:ee02790d00b7 1289
klauss 126:1f90756250fb 1290 VZ_call * call = find_Call ( v_call, print_hex_this_call );
klauss 121:ee02790d00b7 1291
klauss 121:ee02790d00b7 1292 uint8_t * ptr = NULL;
klauss 126:1f90756250fb 1293 if( call not_eq NULL )
klauss 121:ee02790d00b7 1294 {
klauss 121:ee02790d00b7 1295 ptr = ( uint8_t * ) call;
klauss 121:ee02790d00b7 1296 }
klauss 121:ee02790d00b7 1297
klauss 126:1f90756250fb 1298 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1299 {
klauss 121:ee02790d00b7 1300 bool finished = false;
klauss 121:ee02790d00b7 1301 volatile int i = 0;
klauss 121:ee02790d00b7 1302 int count = 0;
klauss 121:ee02790d00b7 1303 Timer dont_overwrite_tcp_buffer;
klauss 121:ee02790d00b7 1304 dont_overwrite_tcp_buffer.reset ();
klauss 121:ee02790d00b7 1305 dont_overwrite_tcp_buffer.start ();
klauss 121:ee02790d00b7 1306
klauss 121:ee02790d00b7 1307 while ( !finished )
klauss 121:ee02790d00b7 1308 {
klauss 121:ee02790d00b7 1309 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 121:ee02790d00b7 1310 {
klauss 121:ee02790d00b7 1311 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1312 for ( ; i < sizeof( VZ_call ); i++ )
klauss 121:ee02790d00b7 1313 {
klauss 121:ee02790d00b7 1314 char tmp[ 16 ];
klauss 121:ee02790d00b7 1315 sprintf( tmp, "%x ", *ptr++ );
klauss 121:ee02790d00b7 1316 strcat( aux, tmp );
klauss 121:ee02790d00b7 1317 count++;
klauss 121:ee02790d00b7 1318
klauss 121:ee02790d00b7 1319 if ( count >= 32 )
klauss 121:ee02790d00b7 1320 {
klauss 121:ee02790d00b7 1321 count = 0;
klauss 121:ee02790d00b7 1322 i++;
klauss 121:ee02790d00b7 1323 break;
klauss 121:ee02790d00b7 1324 }
klauss 121:ee02790d00b7 1325 }
klauss 121:ee02790d00b7 1326 strcat ( aux, "\n\r\0" );
klauss 121:ee02790d00b7 1327 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 121:ee02790d00b7 1328 if ( i >= sizeof ( VZ_call ) ) finished = true;
klauss 121:ee02790d00b7 1329 strcpy ( aux, "\0" );
klauss 121:ee02790d00b7 1330 }
klauss 121:ee02790d00b7 1331 }
klauss 121:ee02790d00b7 1332 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1333 dont_overwrite_tcp_buffer.stop();
klauss 121:ee02790d00b7 1334 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 121:ee02790d00b7 1335 }
klauss 121:ee02790d00b7 1336 }
klauss 121:ee02790d00b7 1337 }
klauss 121:ee02790d00b7 1338 else
klauss 121:ee02790d00b7 1339 {
klauss 121:ee02790d00b7 1340 if( print_values )
klauss 121:ee02790d00b7 1341 {
klauss 132:05cd37f7e007 1342 vz_debug ("Call %d not found", print_this_call );
klauss 121:ee02790d00b7 1343 }
klauss 121:ee02790d00b7 1344 else
klauss 121:ee02790d00b7 1345 {
klauss 132:05cd37f7e007 1346 vz_printf ("Call %d not found", print_this_call );
klauss 121:ee02790d00b7 1347 }
klauss 121:ee02790d00b7 1348 }
klauss 121:ee02790d00b7 1349
klauss 121:ee02790d00b7 1350 return ( 0 );
klauss 121:ee02790d00b7 1351 }
klauss 121:ee02790d00b7 1352
klauss 121:ee02790d00b7 1353
klauss 121:ee02790d00b7 1354 int show_cb_rtp ( void )
klauss 121:ee02790d00b7 1355 {
klauss 126:1f90756250fb 1356 VZ_call * call = find_Call ( v_call, print_hex_this_rtp );
klauss 121:ee02790d00b7 1357
klauss 121:ee02790d00b7 1358 uint8_t * ptr = NULL;
klauss 126:1f90756250fb 1359 if( call not_eq NULL )
klauss 121:ee02790d00b7 1360 {
klauss 121:ee02790d00b7 1361 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 121:ee02790d00b7 1362 }
klauss 121:ee02790d00b7 1363
klauss 126:1f90756250fb 1364 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1365 {
klauss 132:05cd37f7e007 1366 vz_printf ("Values :: %p\r\n", ( void *) ptr );
klauss 121:ee02790d00b7 1367 for ( register int i = 0; i < sizeof( RTP ); i++ )
klauss 121:ee02790d00b7 1368 {
klauss 121:ee02790d00b7 1369 if( debug_uart3 ) pc.printf("%x", *ptr++ );
klauss 121:ee02790d00b7 1370
klauss 121:ee02790d00b7 1371 if ( ( i % 32 ) == 0 )
klauss 121:ee02790d00b7 1372 {
klauss 126:1f90756250fb 1373 if( i not_eq 0 )
klauss 121:ee02790d00b7 1374 {
klauss 121:ee02790d00b7 1375 if( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 1376 }
klauss 121:ee02790d00b7 1377 else
klauss 121:ee02790d00b7 1378 {
klauss 121:ee02790d00b7 1379 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1380 }
klauss 121:ee02790d00b7 1381 }
klauss 121:ee02790d00b7 1382 else
klauss 121:ee02790d00b7 1383 {
klauss 121:ee02790d00b7 1384 if( debug_uart3 ) pc.printf(" ");
klauss 121:ee02790d00b7 1385 }
klauss 121:ee02790d00b7 1386 }
klauss 121:ee02790d00b7 1387 if ( debug_uart3 ) pc.printf("\n\r> ");
klauss 121:ee02790d00b7 1388
klauss 121:ee02790d00b7 1389 if ( tcp_session ) {
klauss 121:ee02790d00b7 1390 char aux[ ( 32 * 3 ) + 5 ];
klauss 121:ee02790d00b7 1391
klauss 121:ee02790d00b7 1392 for ( register int i = 0; i < ( 32 * 3 ) + 5 ; i++ ) aux [ i ] = 0;
klauss 121:ee02790d00b7 1393
klauss 121:ee02790d00b7 1394 ptr = NULL;
klauss 121:ee02790d00b7 1395
klauss 126:1f90756250fb 1396 VZ_call * call = find_Call ( v_call, print_hex_this_rtp );
klauss 121:ee02790d00b7 1397
klauss 121:ee02790d00b7 1398 uint8_t * ptr = NULL;
klauss 126:1f90756250fb 1399 if( call not_eq NULL )
klauss 121:ee02790d00b7 1400 {
klauss 121:ee02790d00b7 1401 ptr = ( uint8_t * ) call -> check_rtp ();
klauss 121:ee02790d00b7 1402 }
klauss 121:ee02790d00b7 1403
klauss 126:1f90756250fb 1404 if ( ptr not_eq NULL )
klauss 121:ee02790d00b7 1405 {
klauss 121:ee02790d00b7 1406 bool finished = false;
klauss 121:ee02790d00b7 1407 volatile int i = 0;
klauss 121:ee02790d00b7 1408 int count = 0;
klauss 121:ee02790d00b7 1409 Timer dont_overwrite_tcp_buffer;
klauss 121:ee02790d00b7 1410 dont_overwrite_tcp_buffer.reset ();
klauss 121:ee02790d00b7 1411 dont_overwrite_tcp_buffer.start ();
klauss 121:ee02790d00b7 1412
klauss 121:ee02790d00b7 1413 while ( !finished )
klauss 121:ee02790d00b7 1414 {
klauss 121:ee02790d00b7 1415 if( dont_overwrite_tcp_buffer.read_ms () >= 20 )
klauss 121:ee02790d00b7 1416 {
klauss 121:ee02790d00b7 1417 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1418 for ( ; i < sizeof( RTP ); i++ )
klauss 121:ee02790d00b7 1419 {
klauss 121:ee02790d00b7 1420 char tmp[ 16 ];
klauss 121:ee02790d00b7 1421 sprintf( tmp, "%x ", *ptr++ );
klauss 121:ee02790d00b7 1422 strcat( aux, tmp );
klauss 121:ee02790d00b7 1423 count++;
klauss 121:ee02790d00b7 1424
klauss 121:ee02790d00b7 1425 if ( count >= 32 )
klauss 121:ee02790d00b7 1426 {
klauss 121:ee02790d00b7 1427 count = 0;
klauss 121:ee02790d00b7 1428 i++;
klauss 121:ee02790d00b7 1429 break;
klauss 121:ee02790d00b7 1430 }
klauss 121:ee02790d00b7 1431 }
klauss 121:ee02790d00b7 1432 strcat ( aux, "\n\r\0" );
klauss 121:ee02790d00b7 1433 tcp_client.send_all ( ( char *)aux, strlen( (char * )aux ) );
klauss 121:ee02790d00b7 1434 if ( i >= sizeof ( RTP ) ) finished = true;
klauss 121:ee02790d00b7 1435 strcpy ( aux, "\0" );
klauss 121:ee02790d00b7 1436 }
klauss 121:ee02790d00b7 1437 }
klauss 121:ee02790d00b7 1438 dont_overwrite_tcp_buffer.reset();
klauss 121:ee02790d00b7 1439 dont_overwrite_tcp_buffer.stop();
klauss 121:ee02790d00b7 1440 tcp_client.send_all ( "\r\n> ", strlen( "\r\n> " ) );
klauss 121:ee02790d00b7 1441 }
klauss 121:ee02790d00b7 1442 }
klauss 121:ee02790d00b7 1443 }
klauss 121:ee02790d00b7 1444 else
klauss 121:ee02790d00b7 1445 {
klauss 121:ee02790d00b7 1446 if( print_values )
klauss 121:ee02790d00b7 1447 {
klauss 132:05cd37f7e007 1448 vz_debug ("Call %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1449 }
klauss 121:ee02790d00b7 1450 else
klauss 121:ee02790d00b7 1451 {
klauss 132:05cd37f7e007 1452 vz_printf ("Call %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1453 }
klauss 121:ee02790d00b7 1454 }
klauss 121:ee02790d00b7 1455
klauss 121:ee02790d00b7 1456 return ( 0 );
klauss 121:ee02790d00b7 1457 }
klauss 121:ee02790d00b7 1458
klauss 121:ee02790d00b7 1459 int show_cb_hex_rtp ( void )
klauss 121:ee02790d00b7 1460 {
klauss 126:1f90756250fb 1461 VZ_call * call = find_Call ( v_call, print_this_rtp );
klauss 121:ee02790d00b7 1462
klauss 126:1f90756250fb 1463 if ( call not_eq NULL )
klauss 121:ee02790d00b7 1464 {
klauss 126:1f90756250fb 1465 if ( call -> check_rtp () not_eq NULL )
klauss 121:ee02790d00b7 1466 {
klauss 132:05cd37f7e007 1467 vz_printf ("Values :: %p\r\n", ( void *) call -> check_rtp () );
klauss 121:ee02790d00b7 1468 call -> rtp_print_yourself ();
klauss 121:ee02790d00b7 1469 }
klauss 121:ee02790d00b7 1470 else
klauss 121:ee02790d00b7 1471 {
klauss 121:ee02790d00b7 1472 if( print_values )
klauss 121:ee02790d00b7 1473 {
klauss 132:05cd37f7e007 1474 vz_debug ("Call->RTP %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1475 }
klauss 121:ee02790d00b7 1476 else
klauss 121:ee02790d00b7 1477 {
klauss 132:05cd37f7e007 1478 vz_printf ("Call->RTP %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1479 }
klauss 121:ee02790d00b7 1480 }
klauss 121:ee02790d00b7 1481 }
klauss 121:ee02790d00b7 1482 else
klauss 121:ee02790d00b7 1483 {
klauss 121:ee02790d00b7 1484 if( print_values )
klauss 121:ee02790d00b7 1485 {
klauss 132:05cd37f7e007 1486 vz_debug ("Call->RTP %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1487 }
klauss 121:ee02790d00b7 1488 else
klauss 121:ee02790d00b7 1489 {
klauss 132:05cd37f7e007 1490 vz_printf ("Call->RTP %d not found", print_this_rtp );
klauss 121:ee02790d00b7 1491 }
klauss 121:ee02790d00b7 1492 }
klauss 121:ee02790d00b7 1493
klauss 121:ee02790d00b7 1494 return ( 0 );
klauss 121:ee02790d00b7 1495 }
klauss 121:ee02790d00b7 1496
klauss 121:ee02790d00b7 1497
klauss 121:ee02790d00b7 1498 int reset_stats_cks ( void )
klauss 121:ee02790d00b7 1499 {
klauss 121:ee02790d00b7 1500 pkg_cksok = 0;
klauss 121:ee02790d00b7 1501 pkg_ckserr = 0;
klauss 121:ee02790d00b7 1502 pkg_zero = 0;
klauss 121:ee02790d00b7 1503 out_of_range = 0;
klauss 121:ee02790d00b7 1504 missed_pkg = 0;
klauss 121:ee02790d00b7 1505 delayed_pkg_to_cb = 0;
klauss 121:ee02790d00b7 1506 cpld_pkg_tx_counter = 0;
klauss 121:ee02790d00b7 1507 cpld_pkg_rx_counter = 0;
klauss 121:ee02790d00b7 1508
klauss 121:ee02790d00b7 1509 return ( 0 );
klauss 121:ee02790d00b7 1510 }
klauss 121:ee02790d00b7 1511
klauss 121:ee02790d00b7 1512 int show_cb_stats ( void )
klauss 121:ee02790d00b7 1513 {
klauss 132:05cd37f7e007 1514 vz_printf (
klauss 121:ee02790d00b7 1515 "\r\n"
klauss 121:ee02790d00b7 1516 " PKG_CKS OK: %d ( %003.2f )\r\n"
klauss 121:ee02790d00b7 1517 " PKG_CKS ERR: %d ( %003.2f )\r\n"
klauss 121:ee02790d00b7 1518 " PKG_0: %d ( %003.2f )\r\n"
klauss 121:ee02790d00b7 1519 " Out_of_range: %d ( %003.2f )\r\n"
klauss 121:ee02790d00b7 1520 " Miss_Pkg: %d\r\n"
klauss 121:ee02790d00b7 1521 " TX_delayed: %d\n\r"
klauss 121:ee02790d00b7 1522 " TX_Counter: %d\n\r"
klauss 121:ee02790d00b7 1523 " RX_Counter: %d\r\n",
klauss 121:ee02790d00b7 1524 pkg_cksok, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_cksok / cpld_pkg_rx_counter ) * 100,
klauss 121:ee02790d00b7 1525 pkg_ckserr, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_ckserr / cpld_pkg_rx_counter ) * 100,
klauss 121:ee02790d00b7 1526 pkg_zero, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) pkg_zero / cpld_pkg_rx_counter ) * 100,
klauss 121:ee02790d00b7 1527 out_of_range, ( cpld_pkg_rx_counter == 0 ) ? 0.00 : ( ( double ) out_of_range / cpld_pkg_rx_counter ) * 100,
klauss 121:ee02790d00b7 1528 missed_pkg,
klauss 121:ee02790d00b7 1529 delayed_pkg_to_cb,
klauss 121:ee02790d00b7 1530 cpld_pkg_tx_counter,
klauss 121:ee02790d00b7 1531 cpld_pkg_rx_counter
klauss 121:ee02790d00b7 1532 );
klauss 121:ee02790d00b7 1533
klauss 121:ee02790d00b7 1534 return ( 0 );
klauss 121:ee02790d00b7 1535 }
klauss 121:ee02790d00b7 1536
klauss 121:ee02790d00b7 1537
klauss 121:ee02790d00b7 1538 int reset_missed_send_udp ( void )
klauss 121:ee02790d00b7 1539 {
klauss 132:05cd37f7e007 1540 miss_fw_send_pkg = 0;
klauss 132:05cd37f7e007 1541 miss_prompt_udp_send_pkg = 0;
klauss 132:05cd37f7e007 1542 miss_sip_registry_send_pkg = 0;
klauss 132:05cd37f7e007 1543 miss_sip_invite_send_pkg = 0;
klauss 132:05cd37f7e007 1544 miss_sip_bye_send_pkg = 0;
klauss 132:05cd37f7e007 1545 miss_sip_ok_send_pkg = 0;
klauss 121:ee02790d00b7 1546 miss_sip_rcv_bye_send_pkg = 0;
klauss 121:ee02790d00b7 1547 miss_wdt_send_pkg = 0;
klauss 121:ee02790d00b7 1548 miss_prompt_udp_send_pkg = 0;
klauss 132:05cd37f7e007 1549 miss_rtp_udp_send_pkg = 0;
klauss 121:ee02790d00b7 1550 miss_prompt_udp_rcv_pkg = 0;
klauss 121:ee02790d00b7 1551
klauss 121:ee02790d00b7 1552 return ( 0 );
klauss 121:ee02790d00b7 1553 }
klauss 121:ee02790d00b7 1554
klauss 121:ee02790d00b7 1555 int show_missed_send_udp_pkg ( void )
klauss 121:ee02790d00b7 1556 {
klauss 132:05cd37f7e007 1557 vz_printf ( "\r\nMissed pkgs ::\r\n "
klauss 121:ee02790d00b7 1558 "FW: %d\r\n "
klauss 121:ee02790d00b7 1559 "Prompt UDP %d\r\n "
klauss 121:ee02790d00b7 1560 "Registry %d\r\n "
klauss 121:ee02790d00b7 1561 "Invite %d\r\n "
klauss 121:ee02790d00b7 1562 "Bye %d\r\n "
klauss 121:ee02790d00b7 1563 "UDP incoming ( invite ans ) %d\r\n "
klauss 121:ee02790d00b7 1564 "UDP incoming ( bye from * ) %d\r\n "
klauss 121:ee02790d00b7 1565 "Wdt [ alive | rst ] %d\r\n "
klauss 121:ee02790d00b7 1566 "Rcv prompt %d\r\n "
klauss 121:ee02790d00b7 1567 "[ debug | send ]_msg %d\r\n "
klauss 121:ee02790d00b7 1568 "RTP %d\r\n",
klauss 121:ee02790d00b7 1569 miss_fw_send_pkg,
klauss 121:ee02790d00b7 1570 miss_prompt_udp_send_pkg,
klauss 121:ee02790d00b7 1571 miss_sip_registry_send_pkg,
klauss 121:ee02790d00b7 1572 miss_sip_invite_send_pkg,
klauss 121:ee02790d00b7 1573 miss_sip_bye_send_pkg,
klauss 121:ee02790d00b7 1574 miss_sip_ok_send_pkg,
klauss 121:ee02790d00b7 1575 miss_sip_rcv_bye_send_pkg,
klauss 121:ee02790d00b7 1576 miss_wdt_send_pkg,
klauss 121:ee02790d00b7 1577 miss_prompt_udp_send_pkg,
klauss 121:ee02790d00b7 1578 miss_prompt_udp_rcv_pkg,
klauss 132:05cd37f7e007 1579 miss_rtp_udp_send_pkg
klauss 121:ee02790d00b7 1580 );
klauss 121:ee02790d00b7 1581
klauss 121:ee02790d00b7 1582 return ( 0 );
klauss 121:ee02790d00b7 1583 }
klauss 121:ee02790d00b7 1584
klauss 132:05cd37f7e007 1585 int
klauss 132:05cd37f7e007 1586 invite_ack_to_cb_handler ( Vector * v_cb, Vector * v_call )
klauss 121:ee02790d00b7 1587 {
klauss 121:ee02790d00b7 1588 static int retry_invite_pkg = 0;
klauss 121:ee02790d00b7 1589 bool need_retry = false;
klauss 121:ee02790d00b7 1590 Call_Box * cb = NULL;
klauss 121:ee02790d00b7 1591
klauss 132:05cd37f7e007 1592 for ( register uint8_t i = 0; i < v_cb -> size (); i++ )
klauss 121:ee02790d00b7 1593 {
klauss 132:05cd37f7e007 1594 retry_invite_pkg ++;
klauss 132:05cd37f7e007 1595 if ( retry_invite_pkg >= v_cb -> size () ) retry_invite_pkg = 0;
klauss 121:ee02790d00b7 1596
klauss 126:1f90756250fb 1597 cb = (Call_Box * )v_cb -> get_element ( i );
klauss 132:05cd37f7e007 1598
klauss 126:1f90756250fb 1599 if ( cb not_eq NULL )
klauss 121:ee02790d00b7 1600 {
klauss 132:05cd37f7e007 1601 switch ( cb -> get_status () )
klauss 121:ee02790d00b7 1602 {
klauss 132:05cd37f7e007 1603 case cb_ringing :
klauss 132:05cd37f7e007 1604 case cb_trying :
klauss 132:05cd37f7e007 1605 case cb_on_call :
klauss 132:05cd37f7e007 1606 need_retry = true;
klauss 132:05cd37f7e007 1607 break;
klauss 121:ee02790d00b7 1608 }
klauss 132:05cd37f7e007 1609
klauss 132:05cd37f7e007 1610 if ( need_retry ) break;
klauss 121:ee02790d00b7 1611 }
klauss 121:ee02790d00b7 1612 }
klauss 121:ee02790d00b7 1613
klauss 121:ee02790d00b7 1614 if ( need_retry )
klauss 121:ee02790d00b7 1615 {
klauss 132:05cd37f7e007 1616 uint16_t ext = cb -> get_ext ();
klauss 132:05cd37f7e007 1617 uint16_t port = cb -> get_port ();
klauss 132:05cd37f7e007 1618
klauss 126:1f90756250fb 1619 if ( cb -> get_invite_response () == false )
klauss 121:ee02790d00b7 1620 {
klauss 126:1f90756250fb 1621 buffer [ TIMESLICE_PLACE ] = cb -> get_timeslice ();
klauss 126:1f90756250fb 1622
klauss 126:1f90756250fb 1623 do_not_show_this_invite_pkg = true;
klauss 126:1f90756250fb 1624
klauss 132:05cd37f7e007 1625 send2callboxes ( build_cb_package ( ext, port, INVITE, ( char * )buffer,
klauss 126:1f90756250fb 1626 cb -> msg_id_update (), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 121:ee02790d00b7 1627
klauss 132:05cd37f7e007 1628 if ( debug_resend_invite ) vz_debug ("[%d] resend invite OK to Cbx : ( %d, %d )", ext, ext, port );
klauss 121:ee02790d00b7 1629 }
klauss 121:ee02790d00b7 1630
klauss 132:05cd37f7e007 1631 if ( find_Call ( v_call, ext ) == NULL )
klauss 121:ee02790d00b7 1632 {
klauss 132:05cd37f7e007 1633 uint8_t cb_status = cb -> get_status ();
klauss 132:05cd37f7e007 1634
klauss 132:05cd37f7e007 1635 if ( ( ( cb_status == cb_ringing ) or ( cb_status == cb_trying ) ) )
klauss 121:ee02790d00b7 1636 {
klauss 121:ee02790d00b7 1637 char rtp_src_tmp_write_buffer [ CB_BUFFER_SIZE ];
klauss 132:05cd37f7e007 1638
klauss 121:ee02790d00b7 1639 uint8_t rtp_dst_tmp_write_buffer [ CB_BUFFER_SIZE ];
klauss 121:ee02790d00b7 1640
klauss 126:1f90756250fb 1641 for ( register int i = 0; i < RTP_MSG_SIZE; i++ ) rtp_src_tmp_write_buffer [ i ] = 0x00;
klauss 121:ee02790d00b7 1642
klauss 132:05cd37f7e007 1643 send2callboxes ( build_cb_package ( ext, port, AUDIO,
klauss 121:ee02790d00b7 1644 rtp_src_tmp_write_buffer, AUDIO, RTP_MSG_SIZE, rtp_dst_tmp_write_buffer ) );
klauss 121:ee02790d00b7 1645 } else {
klauss 132:05cd37f7e007 1646 if ( cb -> get_invite_retry_count () == 0 )
klauss 121:ee02790d00b7 1647 {
klauss 132:05cd37f7e007 1648 cb -> set_msg_id ( ( cb->get_msg_id () + 1 ) & ~BIT7 );
klauss 121:ee02790d00b7 1649
klauss 132:05cd37f7e007 1650 for ( register uint8_t i = 0; i < v_call -> size(); i++ )
klauss 121:ee02790d00b7 1651 {
klauss 132:05cd37f7e007 1652 VZ_call * call = ( VZ_call * )v_call -> get_element ( i );
klauss 132:05cd37f7e007 1653 if ( call -> get_cb_ext () == ext )
klauss 121:ee02790d00b7 1654 {
klauss 132:05cd37f7e007 1655 v_call -> remove_element ( i );
klauss 132:05cd37f7e007 1656 if ( call not_eq NULL ) delete( call );
klauss 121:ee02790d00b7 1657 break;
klauss 121:ee02790d00b7 1658 }
klauss 121:ee02790d00b7 1659 }
klauss 121:ee02790d00b7 1660
klauss 132:05cd37f7e007 1661 ts -> return_timeslice ( cb -> call_end () );
klauss 121:ee02790d00b7 1662
klauss 132:05cd37f7e007 1663 if( debug_invite or debug_resend_invite ) vz_debug ( "[%d] No audio pkgs from cbx", ext );
klauss 121:ee02790d00b7 1664 }
klauss 121:ee02790d00b7 1665 }
klauss 121:ee02790d00b7 1666 }
klauss 121:ee02790d00b7 1667 }
klauss 121:ee02790d00b7 1668
klauss 121:ee02790d00b7 1669 return ( 0 );
klauss 121:ee02790d00b7 1670 }
klauss 121:ee02790d00b7 1671
klauss 121:ee02790d00b7 1672 int check_audio_from_ast ( Vector * v_cb, Vector * v_call )
klauss 121:ee02790d00b7 1673 {
klauss 126:1f90756250fb 1674 for( register uint8_t i = 0; i < v_call->size(); i++ )
klauss 126:1f90756250fb 1675 {
klauss 126:1f90756250fb 1676 VZ_call * call = ( VZ_call * ) v_call -> get_element ( i );
klauss 126:1f90756250fb 1677 if ( call not_eq NULL )
klauss 121:ee02790d00b7 1678 {
klauss 121:ee02790d00b7 1679 int length = 0;
klauss 126:1f90756250fb 1680 char * tmp = call -> get_eth_message ( &length );
klauss 126:1f90756250fb 1681 if( tmp not_eq NULL )
klauss 126:1f90756250fb 1682 {
klauss 126:1f90756250fb 1683 Call_Box * cb = find_CB ( v_cb, call -> get_cb_ext () );
klauss 121:ee02790d00b7 1684
klauss 126:1f90756250fb 1685 if( cb not_eq NULL )
klauss 126:1f90756250fb 1686 {
klauss 135:2f4290590e51 1687 int cb_port = cb -> get_port ();
klauss 121:ee02790d00b7 1688
klauss 121:ee02790d00b7 1689 if ( drop_rtp_from_ast_pkg )
klauss 121:ee02790d00b7 1690 {
klauss 121:ee02790d00b7 1691 led1 = !led1;
klauss 121:ee02790d00b7 1692 }
klauss 121:ee02790d00b7 1693 else
klauss 121:ee02790d00b7 1694 {
klauss 126:1f90756250fb 1695 uint8_t * pkg2cb = build_cb_package ( call -> get_cb_ext (), cb_port, AUDIO,
klauss 121:ee02790d00b7 1696 tmp, AUDIO, length, write_buffer );
klauss 121:ee02790d00b7 1697
klauss 121:ee02790d00b7 1698 send2callboxes( pkg2cb );
klauss 121:ee02790d00b7 1699 }
klauss 121:ee02790d00b7 1700
klauss 132:05cd37f7e007 1701 } else if ( debug_main ) vz_debug ("[%d] received missed package -- Type :: %i", ext, type );
klauss 121:ee02790d00b7 1702 }
klauss 121:ee02790d00b7 1703 }
klauss 121:ee02790d00b7 1704 }
klauss 121:ee02790d00b7 1705
klauss 121:ee02790d00b7 1706 return ( 0 );
klauss 121:ee02790d00b7 1707 }
klauss 121:ee02790d00b7 1708
klauss 135:2f4290590e51 1709 int
klauss 135:2f4290590e51 1710 wake_up_or_refresh_handler ( Vector * v_cb )
klauss 121:ee02790d00b7 1711 {
klauss 126:1f90756250fb 1712 int return_value = 0;
klauss 126:1f90756250fb 1713
klauss 132:05cd37f7e007 1714 if( timer_sync_refresh.read_ms () > 250 * 2 )
klauss 126:1f90756250fb 1715 {
klauss 132:05cd37f7e007 1716 timer_sync_refresh.reset ();
klauss 121:ee02790d00b7 1717
klauss 121:ee02790d00b7 1718 static uint8_t time_to_mode = TIME_TO_REFRESH;
klauss 121:ee02790d00b7 1719
klauss 132:05cd37f7e007 1720 if ( time_to_mode == TIME_TO_REFRESH )
klauss 132:05cd37f7e007 1721 {
klauss 121:ee02790d00b7 1722 time_to_mode = TIME_TO_WAKE_UP;
klauss 126:1f90756250fb 1723 if ( !do_not_refresh ) return_value = refresh ( v_cb );
klauss 121:ee02790d00b7 1724 } else {
klauss 121:ee02790d00b7 1725 time_to_mode = TIME_TO_REFRESH;
klauss 135:2f4290590e51 1726 if ( wake_all and ( v_call -> size() == 0 ) and cm -> get_cbx_wake_mode () ) wake_all_up ( v_cb );
klauss 121:ee02790d00b7 1727 }
klauss 121:ee02790d00b7 1728 }
klauss 121:ee02790d00b7 1729
klauss 126:1f90756250fb 1730 return ( return_value );
klauss 121:ee02790d00b7 1731 }
klauss 121:ee02790d00b7 1732
klauss 121:ee02790d00b7 1733 int check_sip_messages_from_ast ( Vector * v_cb, Vector * v_call )
klauss 121:ee02790d00b7 1734 {
klauss 121:ee02790d00b7 1735 // check sip messages only for cbx in call ?
klauss 135:2f4290590e51 1736 int ext_to_be_removed = sip_manager ( v_cb );
klauss 135:2f4290590e51 1737 if ( ext_to_be_removed > 0 )
klauss 135:2f4290590e51 1738 {
klauss 135:2f4290590e51 1739 Call_Box * cb = find_CB ( v_cb, ext_to_be_removed );
klauss 135:2f4290590e51 1740 if ( cb not_eq NULL )
klauss 135:2f4290590e51 1741 {
klauss 121:ee02790d00b7 1742 if ( cb -> get_status () == cb_on_call )
klauss 121:ee02790d00b7 1743 {
klauss 135:2f4290590e51 1744 buffer [ TIMESLICE_PLACE ] = 0;
klauss 121:ee02790d00b7 1745
klauss 135:2f4290590e51 1746 for ( register uint8_t i = 0; i < v_call -> size(); i++ )
klauss 135:2f4290590e51 1747 {
klauss 135:2f4290590e51 1748 VZ_call * call = ( VZ_call * )v_call -> get_element ( i );
klauss 135:2f4290590e51 1749 if ( call -> get_cb_ext () == ext_to_be_removed )
klauss 135:2f4290590e51 1750 {
klauss 135:2f4290590e51 1751 v_call -> remove_element ( i );
klauss 135:2f4290590e51 1752 delete ( call );
klauss 121:ee02790d00b7 1753 }
klauss 121:ee02790d00b7 1754 }
klauss 121:ee02790d00b7 1755
klauss 135:2f4290590e51 1756 ts -> return_timeslice ( cb -> call_end ( false ) );
klauss 121:ee02790d00b7 1757
klauss 135:2f4290590e51 1758 send2callboxes ( build_cb_package ( cb -> get_ext (), cb -> get_port (), CB_BYE,
klauss 135:2f4290590e51 1759 ( char * )buffer, cb -> get_msg_id(), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 121:ee02790d00b7 1760
klauss 135:2f4290590e51 1761 if( debug_invite ) vz_debug ("[%d] Received Bye from *", cb -> get_ext () );
klauss 121:ee02790d00b7 1762 }
klauss 135:2f4290590e51 1763 } else if( debug_main ) vz_debug ("[%d] Missed bye request", ext_to_be_removed );
klauss 121:ee02790d00b7 1764 }
klauss 121:ee02790d00b7 1765
klauss 121:ee02790d00b7 1766 return ( 0 );
klauss 121:ee02790d00b7 1767 }
klauss 121:ee02790d00b7 1768
klauss 121:ee02790d00b7 1769 int check_for_runaways_ts ( Vector * v_cb, Timeslice * ts )
klauss 121:ee02790d00b7 1770 {
klauss 126:1f90756250fb 1771 if( ( v_call->size() == 0 ) && ( ts->remain_timeslices() not_eq MAX_TIMESLICES ) ) {
klauss 121:ee02790d00b7 1772 bool ts_reset = true;
klauss 121:ee02790d00b7 1773 for( register uint8_t i = 0; i < v_cb->size(); i++ ) {
klauss 121:ee02790d00b7 1774 uint16_t cb_status = ((Call_Box *)v_cb->get_element( i ))->get_status();
klauss 121:ee02790d00b7 1775 uint16_t cb_sip_status = ((Call_Box *)v_cb->get_element( i ))->get_sip_status();
klauss 121:ee02790d00b7 1776
klauss 126:1f90756250fb 1777 if ((cb_status not_eq cb_idle) and (cb_sip_status not_eq sip_idle)) {
klauss 121:ee02790d00b7 1778 ts_reset = false;
klauss 121:ee02790d00b7 1779 break;
klauss 121:ee02790d00b7 1780 }
klauss 121:ee02790d00b7 1781
klauss 121:ee02790d00b7 1782 }
klauss 121:ee02790d00b7 1783 if( ts_reset && !bl_start_flag )
klauss 121:ee02790d00b7 1784 {
klauss 132:05cd37f7e007 1785 if( debug_invite ) vz_debug ("Resetando TS");
klauss 121:ee02790d00b7 1786 ts->reset();
klauss 121:ee02790d00b7 1787 }
klauss 121:ee02790d00b7 1788 }
klauss 121:ee02790d00b7 1789
klauss 121:ee02790d00b7 1790 return ( 0 );
klauss 121:ee02790d00b7 1791 }
klauss 121:ee02790d00b7 1792
klauss 121:ee02790d00b7 1793 int show_wdt_status ( void )
klauss 121:ee02790d00b7 1794 {
klauss 121:ee02790d00b7 1795 if( eth_status == 0 ) {
klauss 132:05cd37f7e007 1796 vz_printf ( "Wdt last reset: %s - status_eth :: Connected - Extern Wdt idle for :: %3d sec ( %3d ) - Rx from CBx idle for :: %3d sec ( %3d )",
klauss 121:ee02790d00b7 1797 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 121:ee02790d00b7 1798 EXTERN_WDT_IDLE - external_wdt,
klauss 121:ee02790d00b7 1799 EXTERN_WDT_IDLE,
klauss 121:ee02790d00b7 1800 RX_CB_IDLE - pkg_wdt,
klauss 121:ee02790d00b7 1801 RX_CB_IDLE
klauss 121:ee02790d00b7 1802 );
klauss 121:ee02790d00b7 1803 } else {
klauss 132:05cd37f7e007 1804 vz_printf ( "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 121:ee02790d00b7 1805 ( wdt.WatchdogCausedReset() ) ? "true" : "false",
klauss 121:ee02790d00b7 1806 ETH_CONNECT_TIMEOUT - eth_wdt,
klauss 121:ee02790d00b7 1807 EXTERN_WDT_IDLE - external_wdt,
klauss 121:ee02790d00b7 1808 EXTERN_WDT_IDLE,
klauss 121:ee02790d00b7 1809 RX_CB_IDLE - pkg_wdt,
klauss 121:ee02790d00b7 1810 RX_CB_IDLE
klauss 121:ee02790d00b7 1811 );
klauss 121:ee02790d00b7 1812 }
klauss 121:ee02790d00b7 1813
klauss 121:ee02790d00b7 1814 return ( 0 );
klauss 121:ee02790d00b7 1815 }
klauss 121:ee02790d00b7 1816
klauss 121:ee02790d00b7 1817
klauss 121:ee02790d00b7 1818 int wdt_update ( void )
klauss 121:ee02790d00b7 1819 {
klauss 121:ee02790d00b7 1820 uptime++;
klauss 121:ee02790d00b7 1821
klauss 121:ee02790d00b7 1822 current_time++;
klauss 121:ee02790d00b7 1823
klauss 122:480c44b0e205 1824 if ( wdt_show ) debug_wdt = true;
klauss 121:ee02790d00b7 1825
klauss 122:480c44b0e205 1826 if ( external_wdt ) external_wdt--;
klauss 122:480c44b0e205 1827 if ( pkg_wdt ) pkg_wdt--;
klauss 122:480c44b0e205 1828 if ( eth_wdt ) eth_wdt--;
klauss 121:ee02790d00b7 1829
klauss 132:05cd37f7e007 1830 if ( eth_wdt && external_wdt && ( pkg_wdt || disable_wdt_from_cbx ) ){
klauss 121:ee02790d00b7 1831 wdt.kick();
klauss 122:480c44b0e205 1832 return ( 0 );
klauss 121:ee02790d00b7 1833 }
klauss 121:ee02790d00b7 1834
klauss 122:480c44b0e205 1835 return ( 1 );
klauss 121:ee02790d00b7 1836 }
klauss 121:ee02790d00b7 1837
klauss 121:ee02790d00b7 1838 int check_for_unwanted_rtp_ports ( Vector * v_cb )
klauss 121:ee02790d00b7 1839 {
klauss 121:ee02790d00b7 1840 for ( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 121:ee02790d00b7 1841 {
klauss 121:ee02790d00b7 1842 Call_Box * cb = (Call_Box *) v_cb->get_element (i);
klauss 126:1f90756250fb 1843 if ( cb not_eq NULL )
klauss 121:ee02790d00b7 1844 {
klauss 121:ee02790d00b7 1845 if ( ( cb->get_status () == cb_idle ) && ( cb->get_sip_status () == sip_idle ) && ( cb -> is_rtp_timer_timeout () ) )
klauss 121:ee02790d00b7 1846 {
klauss 132:05cd37f7e007 1847 if ( debug_reset_rtp ) vz_debug ( "[%d] rtp reset", cb -> get_ext () );
klauss 121:ee02790d00b7 1848 cb -> cb_set_status( cb_idle );
klauss 121:ee02790d00b7 1849 cb -> set_sip_status ( sip_idle );
klauss 121:ee02790d00b7 1850 cb -> reset_rtp_timer ();
klauss 121:ee02790d00b7 1851 cb -> set_rtp_port ( 0 );
klauss 121:ee02790d00b7 1852 }
klauss 121:ee02790d00b7 1853 }
klauss 121:ee02790d00b7 1854 }
klauss 121:ee02790d00b7 1855 return ( 0 );
klauss 121:ee02790d00b7 1856 }
klauss 121:ee02790d00b7 1857
klauss 121:ee02790d00b7 1858
klauss 121:ee02790d00b7 1859 int process_received_pkg_from_cbx ( void )
klauss 130:850163037da5 1860 {
klauss 126:1f90756250fb 1861 // short path
klauss 125:8ff4dc96ad58 1862 if ( buffer_from_cb_ptr [ TYPE_PLACE ] == AUDIO )
klauss 124:c1b6c893e1c3 1863 {
klauss 125:8ff4dc96ad58 1864 xmemcpy ( buffer, buffer_from_cb_ptr, CB_BUFFER_SIZE );
klauss 124:c1b6c893e1c3 1865 status = WAITING;
klauss 132:05cd37f7e007 1866 missed_pkg --;
klauss 124:c1b6c893e1c3 1867 }
klauss 124:c1b6c893e1c3 1868 else
klauss 126:1f90756250fb 1869 // long path
klauss 124:c1b6c893e1c3 1870 {
klauss 125:8ff4dc96ad58 1871 xmemcpy ( cb_rx_buffer, buffer_from_cb_ptr, CB_BUFFER_SIZE );
klauss 124:c1b6c893e1c3 1872 status = WAITING;
klauss 132:05cd37f7e007 1873 missed_pkg --;
klauss 125:8ff4dc96ad58 1874 xmemcpy ( buffer, cb_rx_buffer, CB_BUFFER_SIZE );
klauss 125:8ff4dc96ad58 1875
klauss 125:8ff4dc96ad58 1876 if ( debug_show_rx_cpld )
klauss 124:c1b6c893e1c3 1877 {
klauss 126:1f90756250fb 1878 char str [ 256 ];
klauss 126:1f90756250fb 1879 strcpy ( str, "RX :: \n\r" );
klauss 125:8ff4dc96ad58 1880
klauss 126:1f90756250fb 1881 for ( register uint16_t i = 0; i < 32; i++ )
klauss 125:8ff4dc96ad58 1882 {
klauss 126:1f90756250fb 1883 char tmp [ 8 ];
klauss 125:8ff4dc96ad58 1884 sprintf ( tmp, "%02x ", cb_rx_buffer [ i ] );
klauss 126:1f90756250fb 1885 strcat ( str, tmp );
klauss 124:c1b6c893e1c3 1886 }
klauss 125:8ff4dc96ad58 1887
klauss 125:8ff4dc96ad58 1888 strcat ( str, "\n\r " );
klauss 125:8ff4dc96ad58 1889
klauss 132:05cd37f7e007 1890 vz_printf ( "%s", str );
klauss 124:c1b6c893e1c3 1891 }
klauss 121:ee02790d00b7 1892 }
klauss 121:ee02790d00b7 1893
klauss 121:ee02790d00b7 1894 data = parse_vz_pkg ( &ext, &port, &type, buffer );
klauss 121:ee02790d00b7 1895
klauss 126:1f90756250fb 1896 if ( data not_eq NULL )
klauss 130:850163037da5 1897 {
klauss 126:1f90756250fb 1898 if ( min_ext == 0 ) min_ext = ext;
klauss 121:ee02790d00b7 1899
klauss 126:1f90756250fb 1900 if ( ext > max_ext ) max_ext = ext;
klauss 121:ee02790d00b7 1901
klauss 126:1f90756250fb 1902 if ( ext < min_ext ) min_ext = ext;
klauss 121:ee02790d00b7 1903
klauss 126:1f90756250fb 1904 if ( debug_fw ) { fw_cbx_pkg ( ext, ( char *)buffer ); }
klauss 121:ee02790d00b7 1905
klauss 126:1f90756250fb 1906 if ( type == TELEMETRY )
klauss 126:1f90756250fb 1907 {
klauss 132:05cd37f7e007 1908 telemetry_counter ++;
klauss 126:1f90756250fb 1909 if ( debug_telemetry ) show_last_rx = true;
klauss 126:1f90756250fb 1910 }
klauss 121:ee02790d00b7 1911
klauss 127:e7160a463b6c 1912 if( type not_eq AUDIO )
klauss 127:e7160a463b6c 1913 {
klauss 132:05cd37f7e007 1914 if ( debug_cb_rx ) { vz_printf ("[%d %d] -- Type :: %d", ext, port, type ); }
klauss 127:e7160a463b6c 1915
klauss 121:ee02790d00b7 1916 if(
klauss 126:1f90756250fb 1917 type == TELEMETRY or
klauss 126:1f90756250fb 1918 type == CB_STATS or
klauss 126:1f90756250fb 1919 type == FW1 or
klauss 126:1f90756250fb 1920 type == FW2 or
klauss 126:1f90756250fb 1921 type == FW3 or
klauss 126:1f90756250fb 1922 type == FW4 or
klauss 126:1f90756250fb 1923 type == FW5 or
klauss 121:ee02790d00b7 1924 type == FW6
klauss 121:ee02790d00b7 1925 ) type = FW;
klauss 121:ee02790d00b7 1926
klauss 132:05cd37f7e007 1927 if ( debug_sqn ) { vz_printf ("[%d %d] -- Type :: %d -- seq_num :: %u", ext, port, type, cb_tx_buffer [ SEQ_NUM_PLACE ] ); }
klauss 121:ee02790d00b7 1928
klauss 126:1f90756250fb 1929 Call_Box * cb = find_CB ( v_cb, ext );
klauss 126:1f90756250fb 1930 if ( cb not_eq NULL )
klauss 126:1f90756250fb 1931 {
klauss 126:1f90756250fb 1932 if ( data[ 0 ] bitand BIT7 )
klauss 126:1f90756250fb 1933 {
klauss 126:1f90756250fb 1934 if ( type == BOOT )
klauss 126:1f90756250fb 1935 {
klauss 121:ee02790d00b7 1936 send2callboxes( build_cb_package( ext, port, REGISTRY,
klauss 121:ee02790d00b7 1937 ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 121:ee02790d00b7 1938 } else {
klauss 132:05cd37f7e007 1939 if ( debug_main ) vz_debug ("[%d] Received ack pkg with seq_num %d", ext, data[ 0 ] );
klauss 121:ee02790d00b7 1940
klauss 126:1f90756250fb 1941 switch ( type )
klauss 126:1f90756250fb 1942 {
klauss 121:ee02790d00b7 1943 case INVITE : {
klauss 132:05cd37f7e007 1944 if ( debug_main or debug_invite ) vz_debug ("[%d] Invite ACK - msg_id %d -- Cbx seqNum %d", ext, cb->get_msg_id(), data[ 0 ] );
klauss 121:ee02790d00b7 1945 break;
klauss 121:ee02790d00b7 1946 }
klauss 121:ee02790d00b7 1947 case CB_BYE : {
klauss 132:05cd37f7e007 1948 if ( debug_main or debug_invite ) vz_debug ("[%d] BYE ACK - msg_id %d", ext, cb->get_msg_id() );
klauss 126:1f90756250fb 1949 cb -> set_bye_response_ok ();
klauss 121:ee02790d00b7 1950 break;
klauss 121:ee02790d00b7 1951 }
klauss 121:ee02790d00b7 1952 case REGISTRY : {
klauss 132:05cd37f7e007 1953 if ( debug_main or debug_aging ) vz_debug ("[%d] Registry ACK - msg_id %d", ext, cb->get_msg_id() );
klauss 121:ee02790d00b7 1954 break;
klauss 121:ee02790d00b7 1955 }
klauss 121:ee02790d00b7 1956 default : {
klauss 132:05cd37f7e007 1957 if ( debug_main or debug_aging ) vz_debug ("[%d] ACK msg_id :: %d :: type %d", ext, cb->get_msg_id(), type );
klauss 121:ee02790d00b7 1958 }
klauss 121:ee02790d00b7 1959 }
klauss 126:1f90756250fb 1960 if ( type not_eq REGISTRY and type not_eq CB_BYE and type not_eq INVITE ) type = DO_NOTHING;
klauss 126:1f90756250fb 1961 if ( type == CB_BYE )
klauss 126:1f90756250fb 1962 {
klauss 126:1f90756250fb 1963 VZ_call * call = find_Call ( v_call, ext );
klauss 126:1f90756250fb 1964 if ( call not_eq NULL )
klauss 126:1f90756250fb 1965 {
klauss 126:1f90756250fb 1966 if ( call -> get_elapsed_time () < 120000 )
klauss 126:1f90756250fb 1967 {
klauss 132:05cd37f7e007 1968 if ( debug_invite ) vz_debug ("[%d] ack bye ignored", ext );
klauss 121:ee02790d00b7 1969 type = DO_NOTHING;
klauss 121:ee02790d00b7 1970 }
klauss 121:ee02790d00b7 1971 }
klauss 121:ee02790d00b7 1972 }
klauss 121:ee02790d00b7 1973 }
klauss 121:ee02790d00b7 1974 }
klauss 121:ee02790d00b7 1975 }
klauss 121:ee02790d00b7 1976 }
klauss 121:ee02790d00b7 1977 } else type = DO_NOTHING;
klauss 121:ee02790d00b7 1978
klauss 121:ee02790d00b7 1979 return 0;
klauss 123:1d395b5a4cad 1980 }
klauss 123:1d395b5a4cad 1981
klauss 135:2f4290590e51 1982 Call_Box *
klauss 135:2f4290590e51 1983 try_add_new_cbx ( Vector * v_cb, const int ext )
klauss 135:2f4290590e51 1984 {
klauss 135:2f4290590e51 1985 if ( v_cb not_eq NULL )
klauss 135:2f4290590e51 1986 {
klauss 135:2f4290590e51 1987 if ( v_cb -> size () < u8_MAX_CB_IN_A_BRANCH )
klauss 135:2f4290590e51 1988 {
klauss 135:2f4290590e51 1989 if ( debug_main ) vz_debug ( "[%d] Adding Cbx", ext );
klauss 135:2f4290590e51 1990
klauss 135:2f4290590e51 1991 Call_Box * cb = new Call_Box ( ext, ext );
klauss 135:2f4290590e51 1992
klauss 135:2f4290590e51 1993 if ( cb == NULL ) { memory_is_over = true; }
klauss 135:2f4290590e51 1994
klauss 135:2f4290590e51 1995 else
klauss 135:2f4290590e51 1996 {
klauss 135:2f4290590e51 1997 int pair_ext = ( ( ext % 2 ) == 0 ) ? ext + 1 : ext - 1;
klauss 135:2f4290590e51 1998
klauss 135:2f4290590e51 1999 Call_Box * pair_cb = find_CB ( v_cb, pair_ext );
klauss 135:2f4290590e51 2000
klauss 135:2f4290590e51 2001 if ( pair_cb not_eq NULL )
klauss 135:2f4290590e51 2002 {
klauss 135:2f4290590e51 2003 int pair_ret = cb -> set_pair_cbx ( pair_cb );
klauss 135:2f4290590e51 2004
klauss 135:2f4290590e51 2005 if ( pair_ret == 0 ) {
klauss 135:2f4290590e51 2006 if ( debug_pair ) vz_debug ( "[%d] vinculado com [%d]", ext, pair_ext );
klauss 135:2f4290590e51 2007
klauss 135:2f4290590e51 2008 pair_cb -> set_pair_cbx ( cb );
klauss 135:2f4290590e51 2009 } else if ( pair_ret == -3 ) {
klauss 135:2f4290590e51 2010 if ( debug_pair ) vz_debug ( "[%d] par sobrescrito com [%d]", ext, pair_ext );
klauss 135:2f4290590e51 2011 }
klauss 135:2f4290590e51 2012
klauss 135:2f4290590e51 2013 } else if ( debug_pair ) vz_debug ( "[%d] Par nao encontrado", ext )
klauss 135:2f4290590e51 2014
klauss 135:2f4290590e51 2015 v_cb -> add ( cb );
klauss 135:2f4290590e51 2016
klauss 135:2f4290590e51 2017 if ( debug_main ) vz_debug ( "[%d] Added CBx", ext );
klauss 135:2f4290590e51 2018
klauss 135:2f4290590e51 2019 return ( cb );
klauss 135:2f4290590e51 2020 }
klauss 135:2f4290590e51 2021 }
klauss 135:2f4290590e51 2022 }
klauss 135:2f4290590e51 2023
klauss 135:2f4290590e51 2024 return ( NULL );
klauss 135:2f4290590e51 2025 }
klauss 135:2f4290590e51 2026
klauss 123:1d395b5a4cad 2027 void update_all_cb_timer ( Vector * v_cb )
klauss 123:1d395b5a4cad 2028 {
klauss 123:1d395b5a4cad 2029 if ( v_cb == NULL ) return;
klauss 123:1d395b5a4cad 2030
klauss 123:1d395b5a4cad 2031 for( register uint8_t i = 0; i < v_cb->size(); i++ )
klauss 123:1d395b5a4cad 2032 {
klauss 123:1d395b5a4cad 2033 Call_Box * cb = ( Call_Box * )v_cb->get_element( i );
klauss 126:1f90756250fb 2034 if ( cb not_eq NULL ) cb -> update_time ();
klauss 123:1d395b5a4cad 2035 }
klauss 124:c1b6c893e1c3 2036 }
klauss 124:c1b6c893e1c3 2037
klauss 124:c1b6c893e1c3 2038 int init_hello ( void )
klauss 124:c1b6c893e1c3 2039 {
klauss 124:c1b6c893e1c3 2040 hello_sync.start ();
klauss 124:c1b6c893e1c3 2041 hello_times = 0;
klauss 124:c1b6c893e1c3 2042 return ( 0 );
klauss 124:c1b6c893e1c3 2043 }
klauss 124:c1b6c893e1c3 2044
klauss 124:c1b6c893e1c3 2045 void send_hello_to_cbx ( void )
klauss 124:c1b6c893e1c3 2046 {
klauss 124:c1b6c893e1c3 2047 if ( hello_times >= 3 ){
klauss 124:c1b6c893e1c3 2048 hello_sync.stop ();
klauss 124:c1b6c893e1c3 2049 hello_sync.reset ();
klauss 124:c1b6c893e1c3 2050 dont_say_hello_again = true;
klauss 124:c1b6c893e1c3 2051 }
klauss 124:c1b6c893e1c3 2052
klauss 124:c1b6c893e1c3 2053 if ( ( !dont_say_hello_again ) && ( hello_sync.read () > 3 ) && ( hello_times < 3 ) )
klauss 124:c1b6c893e1c3 2054 {
klauss 124:c1b6c893e1c3 2055 hello_times++;
klauss 124:c1b6c893e1c3 2056
klauss 124:c1b6c893e1c3 2057 char cmd_msg [ CB_BUFFER_SIZE ] = "pend\r";
klauss 124:c1b6c893e1c3 2058
klauss 132:05cd37f7e007 2059 if ( debug_hello ) vz_debug ("Enviando pend_all nro [ %i ]", hello_times );
klauss 124:c1b6c893e1c3 2060
klauss 124:c1b6c893e1c3 2061 send2callboxes( build_cb_package( BROADCAST_EXT, BROADCAST_EXT, PROMPT, cmd_msg, ( 0x11 + hello_times ), CB_BUFFER_SIZE - VZ_HEADER_OFFSET, write_buffer ) );
klauss 124:c1b6c893e1c3 2062
klauss 124:c1b6c893e1c3 2063 hello_sync.reset ();
klauss 124:c1b6c893e1c3 2064 }
klauss 124:c1b6c893e1c3 2065 }
klauss 124:c1b6c893e1c3 2066
klauss 124:c1b6c893e1c3 2067 void show_hello_status_function ( void )
klauss 124:c1b6c893e1c3 2068 {
klauss 132:05cd37f7e007 2069 vz_printf ("hello_sync.read :: %d -- hello_times :: %u", ( int ) hello_sync.read (), hello_times );
klauss 126:1f90756250fb 2070 }
klauss 126:1f90756250fb 2071
klauss 126:1f90756250fb 2072 void show_last_rx_pkg_from_cbx ( void )
klauss 126:1f90756250fb 2073 {
klauss 126:1f90756250fb 2074 char str [ 256 ] = "";
klauss 126:1f90756250fb 2075
klauss 126:1f90756250fb 2076 for ( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ )
klauss 126:1f90756250fb 2077 {
klauss 126:1f90756250fb 2078 char tmp[ 8 ];
klauss 126:1f90756250fb 2079
klauss 126:1f90756250fb 2080 sprintf ( tmp, "%02x", cb_rx_buffer [ i ] );
klauss 126:1f90756250fb 2081
klauss 126:1f90756250fb 2082 strcat ( str, tmp );
klauss 126:1f90756250fb 2083
klauss 126:1f90756250fb 2084 if ( ( i not_eq 0 ) && !( ( i + 1 ) % 25 ) )
klauss 126:1f90756250fb 2085 {
klauss 132:05cd37f7e007 2086 vz_printf ( "%s", str );
klauss 126:1f90756250fb 2087 strcpy ( str, "" );
klauss 126:1f90756250fb 2088 }
klauss 126:1f90756250fb 2089
klauss 126:1f90756250fb 2090 else { strcat ( str, " " ); }
klauss 126:1f90756250fb 2091 }
klauss 126:1f90756250fb 2092
klauss 132:05cd37f7e007 2093 vz_printf ( "%s", str );
klauss 126:1f90756250fb 2094 }
klauss 126:1f90756250fb 2095
klauss 126:1f90756250fb 2096 void show_last_tx_pkg_from_cbx ( void )
klauss 126:1f90756250fb 2097 {
klauss 126:1f90756250fb 2098 char str [ 256 ] = "";
klauss 126:1f90756250fb 2099
klauss 126:1f90756250fb 2100 for ( register uint16_t i = 0; i < CB_BUFFER_SIZE; i++ )
klauss 126:1f90756250fb 2101 {
klauss 126:1f90756250fb 2102 char tmp[ 8 ];
klauss 126:1f90756250fb 2103
klauss 126:1f90756250fb 2104 sprintf ( tmp, "%02x", cb_tx_buffer [ i ] );
klauss 126:1f90756250fb 2105
klauss 126:1f90756250fb 2106 strcat ( str, tmp );
klauss 126:1f90756250fb 2107
klauss 126:1f90756250fb 2108 if ( ( i not_eq 0 ) && !( ( i + 1 ) % 25 ) )
klauss 126:1f90756250fb 2109 {
klauss 132:05cd37f7e007 2110 vz_printf ( "%s", str );
klauss 126:1f90756250fb 2111 strcpy ( str, "" );
klauss 126:1f90756250fb 2112 }
klauss 126:1f90756250fb 2113
klauss 126:1f90756250fb 2114 else { strcat ( str, " " ); }
klauss 126:1f90756250fb 2115 }
klauss 126:1f90756250fb 2116
klauss 132:05cd37f7e007 2117 vz_printf ( "%s", str );
klauss 128:3ae1c74773a8 2118 }
klauss 128:3ae1c74773a8 2119
klauss 128:3ae1c74773a8 2120 /* Funcao para leitura da fonte de alimentacao e aviso ao servidor */
klauss 128:3ae1c74773a8 2121 void check_power_source ( void )
klauss 128:3ae1c74773a8 2122 {
klauss 128:3ae1c74773a8 2123 static uint8_t samples = 0, warn_back = 0, wait_to_warn = 0;
klauss 128:3ae1c74773a8 2124
klauss 132:05cd37f7e007 2125 power_source_timer.stop ();
klauss 132:05cd37f7e007 2126 power_source_timer.reset ();
klauss 128:3ae1c74773a8 2127
klauss 132:05cd37f7e007 2128 if ( pwr_src_in )
klauss 132:05cd37f7e007 2129 {
klauss 132:05cd37f7e007 2130 if ( samples < 8 ) samples ++;
klauss 128:3ae1c74773a8 2131 } else {
klauss 132:05cd37f7e007 2132 if ( samples > 0 ) samples --;
klauss 128:3ae1c74773a8 2133 }
klauss 128:3ae1c74773a8 2134
klauss 132:05cd37f7e007 2135 if ( wait_to_warn ) wait_to_warn --;
klauss 128:3ae1c74773a8 2136
klauss 132:05cd37f7e007 2137 if ( samples >= 8 )
klauss 132:05cd37f7e007 2138 {
klauss 132:05cd37f7e007 2139 power_source_status = 1;
klauss 132:05cd37f7e007 2140 if (!wait_to_warn )
klauss 132:05cd37f7e007 2141 {
klauss 132:05cd37f7e007 2142 wait_to_warn = u8_WAIT_TO_WARN;
klauss 128:3ae1c74773a8 2143 warn_back = 1;
klauss 132:05cd37f7e007 2144 int power_source_client_ret = power_source_client.sendTo ( pwr_src_server, "mainpowerisdown", u8_POWER_MSG_LENGTH );
klauss 132:05cd37f7e007 2145
klauss 132:05cd37f7e007 2146 if ( power_source_client_ret not_eq u8_POWER_MSG_LENGTH )
klauss 132:05cd37f7e007 2147 {
klauss 132:05cd37f7e007 2148 reconnect_power_source ();
klauss 132:05cd37f7e007 2149 miss_power_source_send_pkg ++;
klauss 132:05cd37f7e007 2150 if ( debug_reconnect ) vz_debug (
klauss 132:05cd37f7e007 2151 "Reconnect power_source_client_ret [ %d - %d ]",
klauss 132:05cd37f7e007 2152 power_source_client_ret, u8_POWER_MSG_LENGTH
klauss 132:05cd37f7e007 2153 );
klauss 132:05cd37f7e007 2154 }
klauss 132:05cd37f7e007 2155
klauss 132:05cd37f7e007 2156 vz_debug ( "Main power is DOWN!");
klauss 128:3ae1c74773a8 2157 } else {
klauss 128:3ae1c74773a8 2158 wait_to_warn--;
klauss 128:3ae1c74773a8 2159 }
klauss 128:3ae1c74773a8 2160 }
klauss 132:05cd37f7e007 2161
klauss 132:05cd37f7e007 2162 if ( ( samples == 0 ) and ( warn_back ) )
klauss 132:05cd37f7e007 2163 {
klauss 132:05cd37f7e007 2164 power_source_status = 0;
klauss 128:3ae1c74773a8 2165 warn_back = 0;
klauss 128:3ae1c74773a8 2166 wait_to_warn = 0;
klauss 132:05cd37f7e007 2167 int power_source_client_ret = power_source_client.sendTo ( pwr_src_server, "mainpowerisback", u8_POWER_MSG_LENGTH );
klauss 132:05cd37f7e007 2168 if ( power_source_client_ret not_eq u8_POWER_MSG_LENGTH );
klauss 132:05cd37f7e007 2169 {
klauss 132:05cd37f7e007 2170 reconnect_power_source ();
klauss 132:05cd37f7e007 2171 miss_power_source_send_pkg ++;
klauss 132:05cd37f7e007 2172 if ( debug_reconnect ) vz_debug (
klauss 132:05cd37f7e007 2173 "Reconnect power_source_client_ret [ %d - %d ]",
klauss 132:05cd37f7e007 2174 power_source_client_ret, u8_POWER_MSG_LENGTH
klauss 132:05cd37f7e007 2175 );
klauss 132:05cd37f7e007 2176 }
klauss 132:05cd37f7e007 2177 vz_debug ( "Main power is BACK!" );
klauss 132:05cd37f7e007 2178 }
klauss 132:05cd37f7e007 2179
klauss 132:05cd37f7e007 2180 power_source_timer.start ();
klauss 132:05cd37f7e007 2181 }
klauss 132:05cd37f7e007 2182
klauss 132:05cd37f7e007 2183 void update_config_values ( void )
klauss 132:05cd37f7e007 2184 {
klauss 132:05cd37f7e007 2185 if ( cm -> min_ext_was_modified () or cm -> max_ext_was_modified () ) init_ranges ();
klauss 132:05cd37f7e007 2186
klauss 132:05cd37f7e007 2187 if ( cm -> header_ip_was_modified () or
klauss 132:05cd37f7e007 2188 cm -> net_mask_was_modified () or
klauss 132:05cd37f7e007 2189 cm -> gateway_was_modified () )
klauss 132:05cd37f7e007 2190 {
klauss 132:05cd37f7e007 2191 __reconnect ();
klauss 132:05cd37f7e007 2192 }
klauss 132:05cd37f7e007 2193
klauss 132:05cd37f7e007 2194 if ( cm -> header_ip_was_modified () or
klauss 132:05cd37f7e007 2195 cm -> shift_port_was_modified () or
klauss 132:05cd37f7e007 2196 cm -> server_ext_was_modified () or
klauss 132:05cd37f7e007 2197 cm -> server_port_was_modified () or
klauss 132:05cd37f7e007 2198 cm -> server_ip_was_modified ()
klauss 132:05cd37f7e007 2199 )
klauss 132:05cd37f7e007 2200 {
klauss 132:05cd37f7e007 2201 for ( register uint8_t i = 0; i < v_cb -> size (); i++ )
klauss 132:05cd37f7e007 2202 {
klauss 132:05cd37f7e007 2203 Call_Box * cb = ( Call_Box * ) v_cb -> get_element ( i );
klauss 132:05cd37f7e007 2204
klauss 132:05cd37f7e007 2205 if ( cb not_eq NULL ) {
klauss 132:05cd37f7e007 2206 cb -> update ();
klauss 132:05cd37f7e007 2207 }
klauss 132:05cd37f7e007 2208 }
klauss 128:3ae1c74773a8 2209 }
klauss 128:3ae1c74773a8 2210
klauss 132:05cd37f7e007 2211 if ( cm -> server_ip_was_modified () ) reconnect_power_source ();
klauss 132:05cd37f7e007 2212
klauss 132:05cd37f7e007 2213 if ( cm -> fw_server_ip_was_modified () or cm -> fw_server_port_was_modified () ) {
klauss 132:05cd37f7e007 2214 re_start_fw ();
klauss 132:05cd37f7e007 2215 }
klauss 132:05cd37f7e007 2216 }
klauss 132:05cd37f7e007 2217
klauss 132:05cd37f7e007 2218 char * build_wdt_string ( char * wake_msg, const size_t length )
klauss 132:05cd37f7e007 2219 {
klauss 132:05cd37f7e007 2220 if ( wake_msg == NULL ) return ( NULL );
klauss 132:05cd37f7e007 2221
klauss 135:2f4290590e51 2222 snprintf ( wake_msg, length,"wdt:%u,%u,%u,%c,%u,%d,%u,%u,%d,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u:",
klauss 132:05cd37f7e007 2223 uptime,
klauss 132:05cd37f7e007 2224 invite_counter,
klauss 132:05cd37f7e007 2225 external_wdt,
klauss 132:05cd37f7e007 2226 ( wdt.WatchdogCausedReset() ) ? '1' : '0',
klauss 132:05cd37f7e007 2227 cb_new_counter,
klauss 135:2f4290590e51 2228 v_cb -> size (),
klauss 132:05cd37f7e007 2229 ts->remain_timeslices(),
klauss 132:05cd37f7e007 2230 sip_socket_send_failure,
klauss 135:2f4290590e51 2231 v_call -> size (),
klauss 132:05cd37f7e007 2232 pkg_cksok,
klauss 132:05cd37f7e007 2233 pkg_ckserr,
klauss 132:05cd37f7e007 2234 pkg_zero,
klauss 132:05cd37f7e007 2235 out_of_range,
klauss 132:05cd37f7e007 2236 missed_pkg,
klauss 132:05cd37f7e007 2237 delayed_pkg_to_cb,
klauss 132:05cd37f7e007 2238 cpld_pkg_tx_counter,
klauss 132:05cd37f7e007 2239 cpld_pkg_rx_counter,
klauss 132:05cd37f7e007 2240 eth_wdt,
klauss 132:05cd37f7e007 2241 pkg_wdt,
klauss 132:05cd37f7e007 2242 miss_fw_send_pkg,
klauss 132:05cd37f7e007 2243 miss_prompt_udp_send_pkg,
klauss 132:05cd37f7e007 2244 miss_sip_registry_send_pkg,
klauss 132:05cd37f7e007 2245 miss_sip_invite_send_pkg,
klauss 132:05cd37f7e007 2246 miss_sip_bye_send_pkg,
klauss 132:05cd37f7e007 2247 miss_sip_ok_send_pkg,
klauss 132:05cd37f7e007 2248 miss_sip_rcv_bye_send_pkg,
klauss 132:05cd37f7e007 2249 miss_wdt_send_pkg,
klauss 132:05cd37f7e007 2250 miss_rtp_udp_send_pkg,
klauss 132:05cd37f7e007 2251 miss_prompt_udp_rcv_pkg,
klauss 132:05cd37f7e007 2252 miss_clock_send_pkg,
klauss 132:05cd37f7e007 2253 miss_sip_inc_pkg,
klauss 132:05cd37f7e007 2254 miss_power_source_send_pkg,
klauss 132:05cd37f7e007 2255 miss_bl_udp_send_pkg,
klauss 132:05cd37f7e007 2256 miss_rtp_udp_rcv_pkg
klauss 132:05cd37f7e007 2257 );
klauss 132:05cd37f7e007 2258
klauss 132:05cd37f7e007 2259 return ( wake_msg );
klauss 121:ee02790d00b7 2260 }