![](/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
eth.h@39:89e023ea5968, 2014-10-02 (annotated)
- 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?
User | Revision | Line number | New 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 |