![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
Diff: prompt.cpp
- Revision:
- 60:b4ec6beb3be3
- Parent:
- 59:e1e300880d2d
- Child:
- 61:06e77dff6f00
--- a/prompt.cpp Thu Oct 23 21:12:22 2014 +0000 +++ b/prompt.cpp Fri Oct 24 15:52:12 2014 +0000 @@ -31,6 +31,7 @@ bool reset_cks = false; bool debug_telemetry = false; bool main_test = false; +bool flood_silence = false; uint8_t test_debug = 1; #define PVERSION 4 // Sempre atualizar a versao do prompt @@ -40,6 +41,7 @@ char last_cmd[ DEBUGBUFSIZE ]; char tmp_cmd[ DEBUGBUFSIZE ] = "help"; char last_debug_buf[ DEBUGBUFSIZE ] = "help"; + FILE *fip, *fmask, *fgate, *fport, *fsip, *fsport, *fext, *fserext, *fudpport, *ftcpport, *ftip, *ftport; uint8_t debug_prompt = 0; uint8_t bufptr = 0; @@ -449,21 +451,21 @@ //FIXME verificar se deveria colocar tudo para %s fprintf( fip, "%s\n\r", "" ); - fprintf( fport, "%i\n\r", "" ); - fprintf( fext, "%i\n\r", "" ); + fprintf( fport, "%i\n\r", 0 ); + fprintf( fext, "%i\n\r", 0 ); fprintf( fsip, "%s\n\r", "" ); - fprintf( fserext, "%i\n\r","" ); - fprintf( fsport, "%i\n\r","" ); + fprintf( fserext, "%i\n\r", 0 ); + fprintf( fsport, "%i\n\r", 0 ); fprintf( fmask, "%s\n\r","" ); fprintf( fgate, "%s\n\r", "" ); - fprintf( fudpport, "%i\n\r","" ); - fprintf( ftcpport, "%i\n\r","" ); + fprintf( fudpport, "%i\n\r", 0 ); + fprintf( ftcpport, "%i\n\r", 0 ); fprintf( ftip, "%s\n\r","" ); - fprintf( ftport, "%i\n\r","" ); + fprintf( ftport, "%i\n\r",0 ); files('c'); @@ -510,8 +512,12 @@ volatile char b = 0; static uint8_t bufret = 0; static Timer flood_timeout; + static Timer flood_silence_timer; + static uint8_t id_msg = 0x10; + static int start_ext, end_ext, ext_count; bool miss_match = true; char eth_buffer[ __PROMPT_ETH_BUFFER_SIZE__ ]; + uint8_t write_buffer[ __CB_BUFFER_SIZE__ ]; if( flood_timeout.read() > 60 ){ pflood = 0; @@ -603,13 +609,54 @@ } pc.printf( "\n\r%s\n\r", msg_from_cb ); } + + if( flood_silence ){ + if( flood_silence_timer.read_ms() > 250 ){ + char cmd[ 16 ] = "flood off"; + int str_end = strlen( cmd ); + cmd[ str_end ] = 0x0D; + cmd[ str_end + 1 ] = 0x00; + + int port = convert_ext_to_port( ext_count ); + __send_to_cb__( __build_cb_package__( ext_count, port, __PROMPT__, cmd, id_msg++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + pc.printf("\r\nSilence sent to ext=%d port=%d", ext_count, port ); + + if( tcp_session ){ + snprintf( eth_buffer, __PROMPT_ETH_BUFFER_SIZE__, "\r\nSilence sent to ext=%d port=%d", ext_count, port ); + //eth_buffer[ strlen( eth_buffer ) - 1 ] = '\0'; + + tcp_client.send_all( eth_buffer, strlen( eth_buffer ) ); + }else if( udp_request ){ + snprintf( eth_buffer, __PROMPT_ETH_BUFFER_SIZE__, "\r\nSilence sent to ext=%d port=%d", ext_count, port ); + //eth_buffer[ strlen( eth_buffer ) - 1 ] = '\0'; + + udp_server.sendTo( udp_client, eth_buffer, strlen( eth_buffer ) ); + } + flood_silence_timer.reset(); + + if( ++ext_count > end_ext ){ + flood_silence = false; + flood_silence_timer.stop(); + flood_silence_timer.reset(); + + pc.printf("\r\n> " ); + if( tcp_session ){ + snprintf( eth_buffer, __PROMPT_ETH_BUFFER_SIZE__, "\r\n> " ); + tcp_client.send_all( eth_buffer, strlen( eth_buffer ) ); + }else if( udp_request ){ + snprintf( eth_buffer, __PROMPT_ETH_BUFFER_SIZE__, "\r\n> " ); + udp_server.sendTo( udp_client, eth_buffer, strlen( eth_buffer ) ); + } + } + } + } // Prompt commands here if ( bufret == 1 ) { static unsigned int promptcb_last_ext = 0; static unsigned int promptcb_last_port = 0; static char promptcb_last_cmd[ 300 ]; - + strcpy( tmp_cmd, debug_buf ); if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "." ) ){ miss_match = false; @@ -648,7 +695,7 @@ pflood = 0; tflood.stop(); flood_timeout.reset(); - sprintf( debug_buf, "pcb %i flood off", ext ); + sprintf( debug_buf, "pcb %i flood off", ext ); } //tratamento dos enters @@ -792,8 +839,8 @@ cb_status = true; } - else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "flood ",6 ) ){ - if (xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "on",2 ) ){ + else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "flood ", 6 ) ){ + if (xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "on", 2 ) ){ miss_match = false; pc.printf("\n\rFlood ON\n\r"); if( from_eth ){ @@ -806,7 +853,7 @@ pflood = 1; flood_timeout.start(); } - if (xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "off",3 )) { + if (xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "off", 3 )) { miss_match = false; pc.printf("\n\rFlood OFF\n\r"); if( from_eth ){ @@ -817,22 +864,43 @@ tflood.stop(); flood_timeout.reset(); } - //FIXME -- - if (xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "disable",3 )) { - miss_match = false; - // implementar uma logica que recebe start ext e end ext e manda flood off pra eles - pc.printf("\n\rFlood OFF\n\r"); - if( from_eth ){ - snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "Flood Off\n\r" ); - debug_buf[ strlen( debug_buf ) - 1 ] = '\0'; + }else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "silence ", 8 ) ){ + miss_match = false; + char *ref, *split; + + strcpy( promptcb_last_cmd, debug_buf ); + + ref = debug_buf; + + split = strtok( debug_buf + 8, " " ); + start_ext = atoi( split ); + + split += strlen( split ) + 1; + + end_ext = atoi( split ); + + debug_buf = ref; + + if( start_ext < end_ext && ( end_ext - start_ext ) < 50 ){ + if( start_ext % 2 ) start_ext--; + if( !( end_ext % 2 ) ) end_ext++; + + ext_count = start_ext; + flood_silence_timer.start(); + }else{ + pc.printf("\n\rUsage Error :: silence start_ext end_ext | start_ext must be greater than end_ext\n\rObs : ( end_ext - start_ext ) < 50 "); + + snprintf( eth_buffer, __PROMPT_ETH_BUFFER_SIZE__, "\n\rUsage Error :: silence start_ext end_ext | start_ext must be greater than end_ext\n\rObs : ( end_ext - start_ext ) < 50 " ); + if( tcp_session ){ + tcp_client.send_all( eth_buffer, strlen( eth_buffer ) ); + }else if( udp_request ){ + udp_server.sendTo( udp_client, eth_buffer, strlen( eth_buffer ) ); } - pflood = 0; - tflood.stop(); - flood_timeout.reset(); } + flood_silence = true; } - else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "debug ",6 )) { + else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "debug ",6 ) ){ if( xmemmatch( (uint8_t*)(debug_buf+6), (uint8_t*) "on",2 )) { miss_match = false; pc.printf("\n\rDebug ON\n\r"); @@ -940,8 +1008,6 @@ //FIXME colocar a parte eth de novo else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "pcb ", 4 )) { miss_match = false; - static uint8_t id_msg = 0x10; - uint8_t write_buffer[ 300 ]; int ext,port; char *split, *ref, *cmd; @@ -1009,8 +1075,6 @@ else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "_pcb",4 )) { miss_match = false; - static int id_msg = 0x30; - uint8_t write_buffer[ 300 ]; debug_buf[ bufptr++ ] = 0x0D; debug_buf[ bufptr++ ] = 0x00; @@ -1335,8 +1399,6 @@ else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "callme ", 7 )){ miss_match = false; - static uint8_t id_msg = 0x10; - uint8_t write_buffer[ 300 ]; int ext,port; char cmd[ 16 ]; strcpy( cmd, "call init " );