VZTECH / Mbed 2 deprecated main_src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Files at this revision

API Documentation at this revision

Comitter:
klauss
Date:
Tue Oct 28 11:32:06 2014 +0000
Parent:
61:06e77dff6f00
Child:
63:0d95da692bb4
Commit message:
rx | ls implementados, validando novamente a funcao status

Changed in this revision

call_box.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
prompt.cpp Show annotated file Show diff for this revision Revisions of this file
prompt.h Show annotated file Show diff for this revision Revisions of this file
utils.cpp Show annotated file Show diff for this revision Revisions of this file
utils.h Show annotated file Show diff for this revision Revisions of this file
--- a/call_box.cpp	Fri Oct 24 16:38:47 2014 +0000
+++ b/call_box.cpp	Tue Oct 28 11:32:06 2014 +0000
@@ -40,7 +40,8 @@
     //static int count = 1;
     //if( timeout != __MAX_TIMEOUT__ ) timeout = __STEP__  * count++;
     t.reset();
-    return( remaining_attempts-- );
+    //return( remaining_attempts-- );
+    return( 1 );
 }
 
 void Call_Box::registry( void ){
--- a/main.cpp	Fri Oct 24 16:38:47 2014 +0000
+++ b/main.cpp	Tue Oct 28 11:32:06 2014 +0000
@@ -46,6 +46,9 @@
     /* ponteiro que aponta para os dados vindo do CPLD */
     uint8_t * buffer_from_cb_ptr = ( uint8_t * )RXBuffer;
     
+    /* Armazena o ultimo pacote recebido dos CBx */
+    uint8_t cb_rx_buffer[ __CB_BUFFER_SIZE__ ];
+    
     /* referencia para os dados contidos no pacote, sem o header */
     uint8_t * data = NULL;
     
@@ -87,13 +90,60 @@
     udp_timer.start();
     send_msg("Ready");
     uint8_t before = t.read();
+    static uint8_t count = 0;
     while( true ){
         //FIXME colocar uma condicao aqui
         prompt_process( NULL );
         wdt.kick();
+        
+        if( rx ){
+            char str[ 1024 ];
+            strcpy( str, "RX ::  " );
+            for( register uint16_t i = 0; i < __CB_BUFFER_SIZE__; i++ ){
+                char tmp[ 16 ];
+                strcat( str, itoa( cb_rx_buffer[ i ], tmp, 16 ) );
+                if( ( i != 0 ) && !( i % 15 ) ) strcat( str, "\n\r " );
+                
+                else strcat( str, " " );
+            }
+            send_msg( "%s", str );
+            rx = false;    
+        }
+        
+        if( list ){
+            send_msg("Registred %d CBx", v_cb->size() );
+            if( v_cb->size() == 0 ){
+                send_msg("{-/-}");
+            }else if( v_cb->size() == 1 ){
+                Call_Box * cb = ( Call_Box * )v_cb->get_element( 0 );
+                send_msg(" %d ", cb->get_ext() );    
+            }else{
+                char str[ 1024 ];
+                int ext_list[ 128 ];
+                Call_Box * cb = NULL;
+                register int i = 0;
+                for( ; i < v_cb->size(); i++ ){
+                    cb = ( Call_Box * )v_cb->get_element( i );
+                    ext_list[ i ] = cb->get_ext();
+                }
+                
+                qsort( ext_list, v_cb->size(), sizeof( int ), ls_comp );
+        
+                char aux[ 16 ];
+                strcpy( str, "\r\n " );
+                for( i = 0; i < v_cb->size() - 1; i++ ){
+                    sprintf( aux, "%i, ", ext_list[ i ] );
+                    strcat( str, aux );
+                    if( ( i != 0 ) && !( ( i + 1 ) % 8 ) ) strcat( str, "\r\n " );
+                }
+                sprintf( aux, "%i ", ext_list[ i ] );
+                strcat( str, aux );
+                send_msg( "%s", str );
+            }
+            list = false;    
+        }
+        
         if (pcks_s == 1){
-            //pc.printf("\n\r PKG_CSK OK: %d", pkg_cksok);
-            //pc.printf("\n\r PKG_CSK ERR: %d\n\r", pkg_ckserr); 
             send_msg("PKG_CSK OK: %d :: PKG_CSK ERR: %d", pkg_cksok, pkg_ckserr );
             pcks_s =0;
         }
@@ -122,22 +172,20 @@
                 send_msg("{-/-}");
             }else if( v_cb->size() == 1 ){
                 Call_Box * cb = ( Call_Box * )v_cb->get_element( 0 );
-                send_msg("{ %d }", cb->get_ext() );    
+                send_msg(" %i ", cb->get_ext() );    
             }else{
                 register uint8_t i;
                 char aux[ 16 ];
                 Call_Box * cb = NULL;
-                strcpy( str, "{ " );
                 for( i = 0; i < v_cb->size() - 1; i++ ){
                     cb = ( Call_Box * )v_cb->get_element( i );
-                    sprintf( aux, "%5d, ", cb->get_ext() );
+                    sprintf( aux, "%i, ", cb->get_ext() );
                     strcat( str, aux );
-                    if( ( i != 0 ) && !( i % 10 ) ) strcat( str, "\n\r  " );
+                    if( ( i != 0 ) && !( ( i + 1 ) % 8 ) ) strcat( str, "\n\r " );
                 }
                 cb = ( Call_Box * )v_cb->get_element( i );
-                sprintf( aux, "%5d ", cb->get_ext() );
+                sprintf( aux, "%i ", cb->get_ext() );
                 strcat( str, aux );
-                strcat( str, " }" );
                 send_msg( "%s", str );
             }
         }
@@ -145,6 +193,7 @@
         if( pflood == 1 ) flood();               
         
         if( status != __WAITING__ ){
+            xmemcpy( cb_rx_buffer, buffer_from_cb_ptr, __CB_BUFFER_SIZE__ );
             __read_cb_buffer__( buffer, buffer_from_cb_ptr );     
             status = __WAITING__;
         
@@ -182,9 +231,8 @@
             }
 
             if( t.read() > 5 ){
-                static uint8_t count = 0;
-                static int test_ext = 65531;
-                static int test_port = 65531;
+                static int test_ext = 5010;
+                static int test_port = 5010;
                 //send_msg("from_eth = %s - tcp_session = %s", ( from_eth ) ? "true" : "false", ( tcp_session ) ? "true" : "false" );
                 if( debug_alive ){
                     send_msg("Registred %d CBx", v_cb->size() );
@@ -220,12 +268,12 @@
                         }
                     }
                 }
-                //if( count == 4 ){
-                    //debug_msg("Colocar simulacoes de cbx aqui");
-                    //main_test = true;
-                //}
                 
                 if( main_test ){
+                    data = buffer;
+                    ext = test_ext++ + ( ( test_ext % 2  ) ? 100 : 50 );
+                    port = test_port++;
+                    type = __REGISTRY__;
                 }
                 
                 /*
@@ -403,17 +451,18 @@
                     tcp_client.send_all( tmp, strlen( tmp ) );
                 }
                 */
-                for( register int i = 0; i < __CB_BUFFER_SIZE__; i++ ){
+                for( register int i = 0; i < 32; i++ ){
                     pc.printf("%3i ", data[ i ] );
+                    if( i == 15 ) pc.printf( "\r\n" );
                 }
-                //FIXMEj isso nao vai funcionar em udp, mudar pra send_msg
-                pc.printf("\n\r");
+                pc.printf("\n\r> ");
                 
                 if( tcp_session ){
                     char aux[ __CB_BUFFER_SIZE__ + 3 ];
                     strncpy( aux, (char * )data, __CB_BUFFER_SIZE__ );
                     strcat( aux, "\n\r\0" );
                     tcp_client.send_all( ( char *)data, strlen( (char * )data ) );
+                    tcp_client.send_all( "\r\n> ", strlen( "\r\n> " ) );
                 }
                 }break;
             case __AUDIO__ : {
--- a/prompt.cpp	Fri Oct 24 16:38:47 2014 +0000
+++ b/prompt.cpp	Tue Oct 28 11:32:06 2014 +0000
@@ -32,9 +32,11 @@
 bool debug_telemetry = false;
 bool main_test = false;
 bool flood_silence = false;
+bool list = false;
+bool rx = false;
 
 uint8_t test_debug = 1;
-#define PVERSION 4          // Sempre atualizar a versao do prompt
+#define PVERSION 5          // Sempre atualizar a versao do prompt
 
 char __debug_buf__[ DEBUGBUFSIZE ];
 char * debug_buf = __debug_buf__;
@@ -47,14 +49,14 @@
 uint8_t bufptr = 0;
 uint8_t last_bufptr = 0;
  
-uint8_t xmemmatch(const uint8_t * s1, const uint8_t * s2, uint16_t size) {      // presente da lib.h pode retirar da versao final
+uint8_t xmemmatch(const uint8_t * s1, const uint8_t * s2, uint16_t size) {      
   while (size--) {
     if (*s1++ != *s2++) return 0; /* does not match */
   }
   return 1; /* matches */
 }
 
-uint8_t xstrmatch(const uint8_t * s1, const uint8_t * s2) {                     // presente na lib.h pode retirar da versao final
+uint8_t xstrmatch(const uint8_t * s1, const uint8_t * s2) {
   while (*s1) {
     if (*s1++ != *s2++) return 0; /* does not match */
   }
@@ -64,7 +66,7 @@
     return 0; /* does not match */
 }
 
-void xmemcpy(uint8_t * dest, const uint8_t * src, uint16_t size) {              // presente na lib.h pode retirar da versao final
+void xmemcpy(uint8_t * dest, const uint8_t * src, uint16_t size){
   while (size--) *dest++ = *src++;
 }
 
@@ -270,10 +272,10 @@
         strcpy( last_cmd, tmp_cmd );
         debug_buf[ 0 ] = 0;
         bufptr = 0;
-        if( tcp_session ) tcp_client.send_all( "\n\r>" , strlen( "\n\r>" ) );
+        if( tcp_session ) tcp_client.send_all( "\n\r> " , strlen( "\n\r> " ) );
         
         else if( udp_request ){
-            udp_server.sendTo( udp_client, "\n\r>", strlen( "\n\r>" ) );
+            udp_server.sendTo( udp_client, "\n\r> ", strlen( "\n\r> " ) );
         }
     }
     
@@ -557,7 +559,7 @@
                 if( ( n == 1 ) && eth_buffer[ 0 ] == 0x0A ) strcpy( eth_buffer, "\r" );
                 
                 //if( eth_buffer[ 0 ] == '\r' || eth_buffer[ 1 ] == '\n' || eth_buffer[ 2 ] == 'r' || eth_buffer[ 2 ] == '\n'   ) strcpy( eth_buffer, "\r" );
-                
+
                 bufptr = strlen( eth_buffer );
                 debug_buf = eth_buffer;
                 from_eth = true;
@@ -710,23 +712,24 @@
             pc.printf("\n\r");
             files('s');
         }
+        
+        if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "rx" ) ){
+            miss_match = false;
+            rx = true;
+        }
+        
         else if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "format" ) ){
             miss_match = false;
             pc.printf("\n\rFormatando o sistema de arquivos... espere o sistema reiniciar\n\r");
+                        
             if( from_eth ){
-                snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "Formatando o sistema de arquivos... espere o sistema reiniciar\n\r");
-                debug_buf[ strlen( debug_buf ) - 1 ] = '\0';
-                if( tcp_session ){ 
-                    tcp_client.send_all( debug_buf, strlen( debug_buf ) );
-                    tcp_client.close();
-                }else if( udp_request ){
-                    udp_server.sendTo( udp_client, debug_buf, strlen( debug_buf ) );
-                }
+                snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "Not Allowed\n\r");
+            }else{
+                files('e');
+                files('w');
+                __disable_irq();
+                NVIC_SystemReset();
             }
-            files('e');
-            files('w');
-            __disable_irq();
-            NVIC_SystemReset();
         }
 
         else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "ipset ", 6 )) {
@@ -822,9 +825,14 @@
             }
         }
         
+        else if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "ls" ) ){
+            miss_match = false;
+            list = true;
+        }
+        
         else if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "tt" ) ){
             miss_match = false;
-            main_test = true;
+            main_test = !main_test;
         }
         
         else if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "reset_cks" ) ){
@@ -1025,12 +1033,9 @@
             int ext,port;
             char *split, *ref, *cmd;
             
-            pc.printf("\n\r%s\n\r", debug_buf );
+            ref = debug_buf;
             
-            ref = debug_buf;
-            //debug_buf[ bufptr++ ] = 0x0D;
             debug_buf[ strlen( debug_buf ) ] = 0x0D;
-            //debug_buf[ bufptr++ ] = 0x00;
             debug_buf[ strlen( debug_buf ) + 1 ] = 0x00;
             
             split = strtok( debug_buf + 4, " " );
@@ -1042,49 +1047,29 @@
             
             promptcb_last_ext = ext;
             promptcb_last_port = port;
+            
+            int tmp = strlen( cmd );
+            cmd[ tmp ] = 0x0D;
+            cmd[ tmp + 1 ] = 0x00;
             strcpy( promptcb_last_cmd, cmd );
             
             pc.printf("\r\next=%d port=%d\r\ncmd=%s\r\n", ext, port, cmd );
             __send_to_cb__( __build_cb_package__( ext, port, __PROMPT__, cmd, id_msg++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
             pc.printf("\n\rComando enviado\n\r");
             
-            for( register int i = 0; i < 32; i++ )
-                pc.printf("%0x ", write_buffer[ i ] );
-            pc.printf("\n\r");
-            
             if( from_eth ){
-                snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "\r\next=%d port=%d\r\ncmd=%s\r\n\n\rComando enviado\n\r", ext, port, cmd );
-                //debug_buf[ strlen( debug_buf ) - 1 ] = '\0';
+                char eth_msg[ 512 ];
+                snprintf( eth_msg, 512 - 1, "\r\next=%d port=%d\r\ncmd=%s\r\n\n\rComando enviado\n\r", ext, port, cmd );
+                if( tcp_session ){ 
+                    tcp_client.send_all( eth_msg, strlen( eth_msg ) );
+                }else if( udp_request ){
+                    udp_server.sendTo( udp_client, eth_msg, strlen( eth_msg ) );
+                }
             }
             
             debug_buf = ref;
-            //bufptr = 0;
-            //debug_buf[ 0 ] = 0;
-            
-            /*
-
-            unsigned int ext,port;
-            int ant1,ant2;
-
-            debug_buf[ bufptr++ ] = 0x0D;
-            debug_buf[ bufptr++ ] = 0x00;
-            
-            ant1 = str2uint( ( debug_buf + 4 ), &ext );
-            ant2 = str2uint( ( ( debug_buf + 4 ) + ant1 + 1 ), &port );
-
-            promptcb_last_ext = ext;
-            promptcb_last_port = port;
-            
-            pc.printf("\r\next=%d port=%d\r\ncmd=%s\r\n", ext, port, debug_buf + 4 + ant1 + 2 + ant2 );
-            __send_to_cb__( __build_cb_package__( ext, port, __PROMPT__, debug_buf + 4 + ant1 + 2 + ant2, id_msg++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
-            pc.printf("\n\rComando enviado\n\r");
-            
-            for( register int i = 0; i < 300; i++ ){
-                pc.printf("%x ", write_buffer[ i ] );
-                if( i % 23 == 0 ) pc.printf("\n\r");
-            }
-            pc.printf("\n\r");
-            */
+            bufptr = 0;
+            debug_buf[ 0 ] = 0;
         }
         
         else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "_pcb",4 )) {
@@ -1096,21 +1081,7 @@
             __send_to_cb__( __build_cb_package__( promptcb_last_ext, promptcb_last_port, __PROMPT__, debug_buf + 4, id_msg++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
             pc.printf("\n\rComando enviado\n\r");
         }
-        /*
-        if( xstrmatch( (uint8_t*)debug_buf, (uint8_t*) "flood kill ", 11 ) ){
-            miss_match = false;
-            
-            split = strtok( debug_buf + 11, " " );
-            int ext_init = atoi( split );
-            split = strtok( NULL, " " );
-            int ext_end = atoi( split );
-            pc.printf("\n\r MUUUUUUUuuuuUUUUUU - I'm not a dog!!!! \n\r");
-            if( from_eth ){
-                snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "MUUUUUUUuuuuUUUUUU - I'm not a dog!!!!\n\r");
-                debug_buf[ strlen( debug_buf ) - 1 ] = '\0';
-            }
-        }
-        */
+
         else if( xmemmatch( (uint8_t*)debug_buf, (uint8_t*) "cks",3 )) {
             miss_match = false;
             pcks_s = 1;
@@ -1233,6 +1204,8 @@
                 }
             }
             pc.printf("format                          - formata o sistema de arquivos\n\r");
+            //desabilitado via eth
+            /*
             if( from_eth ){
                 snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "format                          - formata o sistema de arquivos\n\r" );
                 if( tcp_session ) tcp_client.send_all( debug_buf, strlen( debug_buf ) );
@@ -1241,6 +1214,7 @@
                     udp_server.sendTo( udp_client, debug_buf, strlen( debug_buf ) );
                 }
             }
+            */
             pc.printf("reset                           - resta o sistema\n\r");
             if( from_eth ){
                 snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "reset                           - resta o sistema\n\r" );
@@ -1331,9 +1305,9 @@
                     udp_server.sendTo( udp_client, debug_buf, strlen( debug_buf ) );
                 }
             }
-            pc.printf("telemetry_iport                 - Configura a port do servidor de telemetria\n\r");
+            pc.printf("telemetry_port                  - Configura a port do servidor de telemetria\n\r");
             if( from_eth ){
-                snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "telemetry_iport                 - Configura a port do servidor de telemetria\n\r" );
+                snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "telemetry_port                  - Configura a port do servidor de telemetria\n\r" );
                 if( tcp_session ) tcp_client.send_all( debug_buf, strlen( debug_buf ) );
                 
                 else if( udp_request ){
@@ -1397,9 +1371,18 @@
                     udp_server.sendTo( udp_client, debug_buf, strlen( debug_buf ) );
                 }
             }
-            pc.printf("flood [on|off]                  - simula envio de pacotes de audio\n\r");
+            pc.printf("{ flood [ on | off ] | [+|-] }  - simula envio de pacotes de audio\n\r");
             if( from_eth ){
-                snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "flood [on|off]                  - simula envio de pacotes de audio\n\r");
+                snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "{ flood [ on | off ] | [+|-] }  - simula envio de pacotes de audio\n\r");
+                if( tcp_session ) tcp_client.send_all( debug_buf, strlen( debug_buf ) );
+                
+                else if( udp_request ){
+                    udp_server.sendTo( udp_client, debug_buf, strlen( debug_buf ) );
+                }
+            }
+            pc.printf("++ ext                          - Header flood on, ext flood on\n\r");
+            if( from_eth ){
+                snprintf( debug_buf,__PROMPT_ETH_BUFFER_SIZE__, "++ ext                          - Header flood on, ext flood on\n\r");
                 if( tcp_session ) tcp_client.send_all( debug_buf, strlen( debug_buf ) );
                 
                 else if( udp_request ){
@@ -1417,24 +1400,36 @@
             char cmd[ 16 ];
             strcpy( cmd, "call init " );
             
-            debug_buf[ bufptr++ ] = 0x0D;
-            debug_buf[ bufptr++ ] = 0x00;
-            
             ext = atoi( debug_buf + 7 );
             port = convert_ext_to_port( ext );
             
-            strcat( cmd, ( ext % 2 ) ? "B\n\r" : "A\n\r" );
+            if( ext % 2 ){
+                ext--;
+                strcat( cmd, "B\r\r" );
+            }else{
+                strcat( cmd, "A\r\r" );
+            }
             
             promptcb_last_ext = ext;
             promptcb_last_port = port;
             
+            int tmp = strlen( cmd );
+            cmd[ tmp ] = 0x0D;
+            cmd[ tmp + 1 ] = 0x00;
+            strcpy( promptcb_last_cmd, cmd );
+            
             pc.printf("\r\next=%d port=%d\r\ncmd=%s\r\n", ext, port, cmd );
             __send_to_cb__( __build_cb_package__( ext, port, __PROMPT__, cmd, id_msg++, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) );
-            pc.printf("Comando enviado\n\r");
+            pc.printf("\n\rComando enviado\n\r");
             
             if( from_eth ){
-                snprintf( debug_buf, __PROMPT_ETH_BUFFER_SIZE__, "\r\next=%d port=%d\r\ncmd=%s\r\n\n\rComando enviado\n\r", ext, port, cmd );
-                debug_buf[ strlen( debug_buf ) - 1 ] = '\0';
+                char eth_msg[ 512 ];
+                snprintf( eth_msg, 512 - 1, "\r\next=%d port=%d\r\ncmd=%s\r\n\n\rComando enviado\n\r", ext, port, cmd );
+                if( tcp_session ){ 
+                    tcp_client.send_all( eth_msg, strlen( eth_msg ) );
+                }else if( udp_request ){
+                    udp_server.sendTo( udp_client, eth_msg, strlen( eth_msg ) );
+                }
             }
             
             bufptr = 0;
--- a/prompt.h	Fri Oct 24 16:38:47 2014 +0000
+++ b/prompt.h	Tue Oct 28 11:32:06 2014 +0000
@@ -81,6 +81,8 @@
 extern bool reset_cks;
 extern bool debug_telemetry;
 extern bool main_test;
+extern bool list;
+extern bool rx;
 
 int convert_ext_to_port( int );
 
--- a/utils.cpp	Fri Oct 24 16:38:47 2014 +0000
+++ b/utils.cpp	Tue Oct 28 11:32:06 2014 +0000
@@ -271,4 +271,6 @@
 void __send_to_cb__( uint8_t * buffer ){
     xmemcpy( TXBuffer, buffer, DATA_SIZE );
     send2callboxes();
-}
\ No newline at end of file
+}
+
+int ls_comp( const void * a, const void * b ){ return( *( int * )a - *( int * )b ); }
\ No newline at end of file
--- a/utils.h	Fri Oct 24 16:38:47 2014 +0000
+++ b/utils.h	Tue Oct 28 11:32:06 2014 +0000
@@ -44,5 +44,6 @@
 void call_manager( Vector * v_call, Vector * v_cb, uint8_t * data, uint8_t * write_buffer, Timeslice * ts );
 void build_telemetry_report( int ext, int port, char * data );
 void __send_to_cb__( uint8_t * buffer );
+int ls_comp( const void * a, const void * b );
 
 #endif
\ No newline at end of file