VZTECH / Mbed 2 deprecated main_src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers call.h Source File

call.h

Go to the documentation of this file.
00001 /**
00002  * @file call.h
00003  * @Synopsis Implementa as funcionalidades de uma ligação, incluindo troca de dados de audio em ambos os lados. 
00004  * @author Jhonatan Casale
00005  * @version 1
00006  * @date 2014-11-05
00007  * \class VZ_call
00008  */
00009  
00010 #ifndef __CALL_H__
00011 #define __CALL_H__
00012 
00013 #include "shared_variables.h"
00014 #include "object.h"
00015 #include "rtp.h"
00016 #include "debug.h"
00017 #include "rtpbuf.h"
00018 %: include "config_manager.h"
00019 
00020 const uint8_t __CALL_MAX_IDLE_TIME__ = 5;
00021 ///< Define o tempo máximo sem receber dados em alguma chamada.
00022 
00023 const uint8_t __MAX_CALL_TIME__ = 180;
00024 ///< Define o tempo máximo ( em segundos ) de uma ligação.
00025 
00026 const uint8_t CBX_PKG_IDLE_MAX_TIME = 10;
00027 
00028 class VZ_call : public Object {
00029     private :
00030         Timer t;
00031         Timer finish;
00032         Timer cbx_pkg_idle_timer;
00033         int cb_ext;
00034         int cb_port;
00035         uint8_t cb2server[ 320 ];
00036         char server2cb[ 320 ];
00037         uint8_t buffer[ 320 ];
00038         UDPSocket rtp_sock;
00039         int rtp_server_ext;
00040         int rtp_server_port;
00041         Endpoint rtp_server;
00042         RTP * rtp;
00043         rtpbuf_t rtpbuf;
00044     public :
00045     /**
00046      * @Synopsis Cria um objeto da Classe VZ_call.
00047      *
00048      * @param cb_ext O ramal do CBx que solicitou a ligação.
00049      * @param cb_port A porta RTP do CBx que solicitou a ligação.
00050      * @param rtp_server_ext O ramal do servidor.
00051      * @param rtp_server_port A porta RTP do servidor.
00052      *
00053      * Exemplo:
00054      * @code
00055      * ...
00056      *  VZ_call * call = new VZ_call( 5010, 11841, 913, 12902 );
00057      * ...
00058      * @endcode
00059      */
00060         VZ_call( int cb_ext, int cb_port, int rtp_server_ext, int rtp_server_port );
00061 
00062     /**
00063      * @Synopsis Destroi o objeto da classe.
00064      *
00065      * Exemplo:
00066      * @code
00067      * ...
00068      *  delete( call );
00069      * ...
00070      * @endcode
00071      */
00072         ~VZ_call();
00073 
00074     /**
00075      * @Synopsis Obtém o ramal do CBx.
00076      *
00077      * @return Um inteiro que representa o ramal do CBx que solicitou a ligação.
00078      *
00079      * Exemplo:
00080      * @code
00081      * ...
00082      *  int cb_ext = call->get_cb_ext();
00083      * ...
00084      * @endcode
00085      */
00086         int get_cb_ext();
00087 
00088     /**
00089      * @Synopsis Obtém a porta RTP do CBx que solicitou a ligação.
00090      *
00091      * @return Um inteiro que representa a porta do CBx. 
00092      *
00093      * Exemplo:
00094      * @code
00095      * ...
00096      *  int cb_port = call->get_cb_ext();
00097      * ...
00098      * @endcode
00099      */
00100         int get_cb_port();
00101 
00102     /**
00103      * @Synopsis Informa o ramal do servidor RTP.
00104      *
00105      * @return O numero do ramal do servidor RTP.
00106      *
00107      * Exemplo:
00108      * @code
00109      * ...
00110      *  int rtp_server_ext = call->get_rtp_server_ext();
00111      * ...
00112      * @endcode
00113      */
00114         int get_rtp_server_ext();
00115 
00116     /**
00117      * @Synopsis Informa o numero da porta do servidor RTP.
00118      *
00119      * @return O numero da porta usada na comunicação com o servidor RTP.
00120      * 
00121      * Exemplo:
00122      * @code
00123      * ...
00124      *  int rtp_server_port = call->get_rtp_server_port();
00125      * ...
00126      * @endcode
00127      */
00128         int get_rtp_server_port();
00129 
00130     /**
00131      * @Synopsis Coleta dados de audio vindos do servidor
00132      *
00133      * @param length Um ponteiro para posição de memória que recebera quantos bytes foram lidos no pacote recebido.
00134      *
00135      * @return Um ponteiro para o pacote disponivel para processamento.
00136      *
00137      * Exemplo:
00138      * @code
00139      * ...
00140      *  int length = 0;                                                                 
00141      *  char * eth_msg = call->get_eth_message( &length ); 
00142      * ...
00143      * @endcode
00144      */
00145         char * get_eth_message( int * length );
00146             
00147     /**
00148      * @Synopsis Responsavel por efetivamente montar o pacote que será enviado via rede.
00149      *
00150      * @param buffer Um ponteiro para o inicio dos dados recebidos do CBx que será encapsulado.
00151      *
00152      * @return Um ponteiro para o inicio do pacote pronto para o envio.
00153      *
00154      * Exemplo:
00155      * @code
00156      * ...
00157      *  char str_to_server[ 1024 ];
00158      *  // assumindo que em data_from_cb consta armazenados os dados vindos dos Call_Box
00159      *  strcpy( str_to_server, build_eth_package( data_from_cb ) );
00160      * ...
00161      * @endcode
00162      */
00163         char * build_eth_package( uint8_t * );
00164 
00165     /**
00166      * @Synopsis Responsavel por enviar efetivamente os dados via eth
00167      *
00168      * @param buffer Um ponteiro para o inicio dos dados que serão enviados.
00169      *
00170      * @return O numero de bytes efetivamente enviados.
00171      *
00172      * Exemplo:
00173      * @code
00174      * ...
00175      *  char * pkg = call->build_eth_package( data_from_cb );
00176      *  //assumindo que os dados vindos do Call_Box estão armazenados em data_from_cb
00177      *  int sent = call->send_message( pkg ); 
00178      * ...
00179      * @endcode
00180      */
00181         int send_message( char * );
00182 
00183     /**
00184      * @Synopsis Verifica se o tempo de ligação é menor que o tempo máximo permitido.
00185      *
00186      * @retval True - Caso o tempo da ligação tenha passado do limite definido em __MAX_CALL_TIME__.
00187      * @retval False - caso em que o tempo da ligação atual for menor que o máximo permitido..
00188      *
00189      * Exemplo:
00190      * @code
00191      * ...
00192      *  printf( "Call já deveria ter acabado ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" );
00193      * ...
00194      * @endcode
00195      */
00196         bool is_timetofinish ( void );
00197         
00198         
00199         bool cbx_pkg_is_idle ( void );
00200         
00201         uint16_t get_elapsed_time ( void );
00202         
00203         void cbx_pkg_idle_timer_reset ( void );
00204         void reconnect ( void );
00205         void * check_rtp ( void );
00206         void init_cbx_pkg_idle_timer ( void );
00207         
00208         int rtp_print_yourself ( void );
00209         int print_yourself ( void );
00210 };
00211 #endif