Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Fri Oct 03 20:14:59 2014 +0000
Revision:
42:480335bdde12
Parent:
40:990683572031
Child:
44:cc4996469404
tcp em andamento

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