Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

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 " );