Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Thu Oct 02 12:38:42 2014 +0000
Revision:
39:89e023ea5968
Parent:
38:af5ecd6997ab
Child:
40:990683572031
melhor estruturacao da classe eth

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 33:735fd60e96d8 1 #ifndef __ETH_H__
klauss 33:735fd60e96d8 2 #define __ETH_H__
klauss 33:735fd60e96d8 3
klauss 33:735fd60e96d8 4 #include "debug.h"
klauss 34:f19d9735428e 5 #include "vz_protocol.h"
klauss 33:735fd60e96d8 6
klauss 34:f19d9735428e 7 #define udp_idle 0x00
klauss 34:f19d9735428e 8 #define udp_waiting_start_pkg 0x01
klauss 34:f19d9735428e 9 #define udp_listen 0x02
klauss 34:f19d9735428e 10
klauss 39:89e023ea5968 11 class vz_eth{
klauss 39:89e023ea5968 12 private :
klauss 39:89e023ea5968 13 UDPSocket udp_server;
klauss 39:89e023ea5968 14 Endpoint udp_client;
klauss 39:89e023ea5968 15 public :
klauss 39:89e023ea5968 16 vz_eth();
klauss 39:89e023ea5968 17 int is_start_pkg( uint8_t * data );
klauss 39:89e023ea5968 18 int is_stop_pkg( uint8_t * data );
klauss 39:89e023ea5968 19 int is_time_to_stop( uint8_t * data );
klauss 39:89e023ea5968 20 char * listen_eth_udp( char * buffer, int *length );
klauss 39:89e023ea5968 21 };
klauss 39:89e023ea5968 22 /*
klauss 33:735fd60e96d8 23 char * listen_eth_udp( char * buffer, int *length ){
klauss 34:f19d9735428e 24 static UDPSocket server;
klauss 35:96885a7931f0 25 server.set_blocking( false, 2 );
klauss 33:735fd60e96d8 26 server.bind( UDP_PORT_LISTENER );
klauss 33:735fd60e96d8 27 Endpoint client;
klauss 35:96885a7931f0 28 // OBS sizeof( buffer ) == 4 ????
klauss 39:89e023ea5968 29 //length = server.receiveFrom( client, buffer, sizeof( buffer ) );
klauss 35:96885a7931f0 30 *length = server.receiveFrom( client, buffer, __UDP_ETH_BUFFER_SIZE__ );
klauss 35:96885a7931f0 31
klauss 39:89e023ea5968 32 if( *length > 0 ){
klauss 33:735fd60e96d8 33 buffer[ *length ] = '\0';
klauss 35:96885a7931f0 34 buffer[ strlen( buffer ) - 1 ] = '\0';
klauss 34:f19d9735428e 35
klauss 39:89e023ea5968 36 //debug_msg("%s", buffer );
klauss 39:89e023ea5968 37 //buffer = prompt_process( buffer );
klauss 36:728498a78e1e 38
klauss 39:89e023ea5968 39 debug_msg("Received UDP Pkg :: %s", buffer );
klauss 39:89e023ea5968 40 return( buffer );
klauss 39:89e023ea5968 41 //int sent = server.sendTo( client, buffer, strlen( buffer ) );
klauss 39:89e023ea5968 42 //debug_msg("Sent %d bytes", sent );
klauss 35:96885a7931f0 43
klauss 39:89e023ea5968 44 }else return( NULL );
klauss 34:f19d9735428e 45 data = __parse_vz_pkg__( &ext, &port, &type, (uint8_t *)buffer );
klauss 34:f19d9735428e 46
klauss 34:f19d9735428e 47 if( !data ){
klauss 34:f19d9735428e 48 debug_msg("UDP pks parse failed");
klauss 34:f19d9735428e 49 server.sendTo( client, buffer, sizeof( buffer ) );
klauss 34:f19d9735428e 50 return( NULL );
klauss 34:f19d9735428e 51 }
klauss 34:f19d9735428e 52
klauss 34:f19d9735428e 53 if( status == udp_idle ){
klauss 34:f19d9735428e 54 data[ 0 ] |= BIT7;
klauss 34:f19d9735428e 55 strcpy( (char *)&data[ 1 ], "Received listen request" );
klauss 34:f19d9735428e 56 server.sendTo( client, buffer, sizeof( buffer ) );
klauss 34:f19d9735428e 57 status = udp_waiting_start_pkg;
klauss 34:f19d9735428e 58 }
klauss 34:f19d9735428e 59
klauss 34:f19d9735428e 60 if( status == udp_waiting_start_pkg ){
klauss 34:f19d9735428e 61 static int count = 0;
klauss 34:f19d9735428e 62 if( is_start_pkg( data ) == 1 )
klauss 34:f19d9735428e 63 if( count++ == __START_PKG_COUNT__ ) status = udp_listen;
klauss 33:735fd60e96d8 64
klauss 34:f19d9735428e 65 else{
klauss 34:f19d9735428e 66 count = 0;
klauss 34:f19d9735428e 67 status = udp_idle;
klauss 34:f19d9735428e 68 }
klauss 34:f19d9735428e 69 }
klauss 34:f19d9735428e 70
klauss 34:f19d9735428e 71 if( status == udp_listen ){
klauss 34:f19d9735428e 72 debug_msg( "Received start pkgs" ); // mandar msg pro server
klauss 34:f19d9735428e 73 if( t.read() < 60 ){
klauss 33:735fd60e96d8 74 server.set_blocking( true, 10 );
klauss 33:735fd60e96d8 75 t.reset();
klauss 34:f19d9735428e 76 do{
klauss 34:f19d9735428e 77 wdt.kick();
klauss 33:735fd60e96d8 78 *length = server.receiveFrom( client, buffer, sizeof( buffer ) );
klauss 34:f19d9735428e 79 data = __parse_vz_pkg__( &ext, &port, &type, (uint8_t *)buffer );
klauss 34:f19d9735428e 80 if( data ){
klauss 34:f19d9735428e 81 if( !( is_start_pkg( data ) ) ) break;
klauss 34:f19d9735428e 82 }else{
klauss 34:f19d9735428e 83 debug_msg("UDP pks parse failed");
klauss 34:f19d9735428e 84 // reenvia pkg dizendo que podemos comecar com a transacao de dados
klauss 34:f19d9735428e 85 }
klauss 34:f19d9735428e 86 }while( t.read() < 60 );
klauss 33:735fd60e96d8 87
klauss 34:f19d9735428e 88 if( t.read() < 60 ){
klauss 33:735fd60e96d8 89 //tratar o primeiro pkg depois dos zeros aqui
klauss 34:f19d9735428e 90 //a ideia é ir recebendo e colocando no arquivo "se for pra header" ou mandar
klauss 34:f19d9735428e 91 //pro cb depois,
klauss 34:f19d9735428e 92 if( !( ext || port ) ){ // pkg pra header
klauss 34:f19d9735428e 93 debug_msg("criando arquivo");
klauss 34:f19d9735428e 94 }else{
klauss 34:f19d9735428e 95 debug_msg("Mandando pkg pro cb");
klauss 34:f19d9735428e 96 }
klauss 34:f19d9735428e 97 //FIXME mudar essa condicao de parada
klauss 34:f19d9735428e 98 while( !( is_time_to_stop( data ) == 1 ) ){
klauss 33:735fd60e96d8 99 wdt.kick();
klauss 33:735fd60e96d8 100 *length = server.receiveFrom( client, buffer, sizeof( buffer ) );
klauss 34:f19d9735428e 101 if( ( data[ 0 ] - seq_num ) != 1 ){
klauss 34:f19d9735428e 102 //perdi algum pacote
klauss 34:f19d9735428e 103 //solicitar re-envio mandando o ultimo seq_num recebido talvez ...
klauss 34:f19d9735428e 104 continue;
klauss 34:f19d9735428e 105 }else{
klauss 34:f19d9735428e 106 debug_msg("+(%d,%d)-%s+", ext, port, data );
klauss 33:735fd60e96d8 107 }
klauss 33:735fd60e96d8 108 }
klauss 33:735fd60e96d8 109 //pensar em como validar os pacotes recebidos, cks ... e o que mais ?
klauss 33:735fd60e96d8 110 //se validado os pkgs, dar reset com os dados no arquivo bla, caso contrario, ignorar ...
klauss 33:735fd60e96d8 111 if( valid_reboot ) NVIC_SystemReset();
klauss 33:735fd60e96d8 112
klauss 33:735fd60e96d8 113 else{
klauss 33:735fd60e96d8 114 server.set_blocking( false, 1 );
klauss 33:735fd60e96d8 115 t.stop();
klauss 33:735fd60e96d8 116 t.reset();
klauss 33:735fd60e96d8 117 debug_msg("Nao Resetando ... ");
klauss 33:735fd60e96d8 118 }
klauss 33:735fd60e96d8 119 }
klauss 33:735fd60e96d8 120 }
klauss 33:735fd60e96d8 121 }else return( buffer );
klauss 33:735fd60e96d8 122 }else return( NULL );
klauss 33:735fd60e96d8 123 return( NULL );
klauss 33:735fd60e96d8 124 }
klauss 39:89e023ea5968 125 */
klauss 33:735fd60e96d8 126
klauss 33:735fd60e96d8 127 #endif