Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

call.h

Committer:
klauss
Date:
2014-11-12
Revision:
69:65665afbad5d
Parent:
0:4d17cd9c8f9d
Child:
74:81c47fff88a5

File content as of revision 69:65665afbad5d:

/**
 * @file call.h
 * @Synopsis Implementa as funcionalidades de uma ligação, incluindo troca de dados de audio em ambos os lados. 
 * @author Jhonatan Casale
 * @version 1
 * @date 2014-11-05
 * \class VZ_call
 */
#ifndef __CALL_H__
#define __CALL_H__

#include "rtp.h"
#include "rtpbuf.h"
#include "mbed.h"
#include "EthernetInterface.h"
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "object.h"
#include "vz_protocol.h"

extern DigitalOut led1;

#define __CALL_MAX_IDLE_TIME__ 5 
///< Define o tempo máximo sem receber dados em alguma chamada.

#define __MAX_CALL_TIME__ 180
///< Define o tempo máximo ( em segundos ) de uma ligação.

class VZ_call : public Object{
    private :
        Timer t;
        Timer finish;
        int cb_ext;
        int cb_port;
        uint8_t cb2server[ 320 ];
        char server2cb[ 320 ];
        uint8_t buffer[ 320 ];
        UDPSocket rtp_sock;
        int rtp_server_ext;
        int rtp_server_port;
        Endpoint rtp_server;
        RTP * rtp;
        rtpbuf_t rtpbuf;
    public :
                /**
                 * @Synopsis Cria um objeto da Classe VZ_call.
                 *
                 * @param cb_ext O ramal do CBx que solicitou a ligação.
                 * @param cb_port A porta RTP do CBx que solicitou a ligação.
                 * @param rtp_server_ext O ramal do servidor.
                 * @param rtp_server_port A porta RTP do servidor.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  VZ_call * call = new VZ_call( 5010, 11841, 913, 12902 );
                 * ...
                 * @endcode
                 */
        VZ_call( int cb_ext, int cb_port, int rtp_server_ext, int rtp_server_port );

                /**
                 * @Synopsis Destroi o objeto da classe.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  delete( call );
                 * ...
                 * @endcode
                 */
        ~VZ_call();

                /**
                 * @Synopsis Obtém o ramal do CBx.
                 *
                 * @return Um inteiro que representa o ramal do CBx que solicitou a ligação.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int cb_ext = call->get_cb_ext();
                 * ...
                 * @endcode
                 */
        int get_cb_ext();

                /**
                 * @Synopsis Obtém a porta RTP do CBx que solicitou a ligação.
                 *
                 * @return Um inteiro que representa a porta do CBx. 
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int cb_port = call->get_cb_ext();
                 * ...
                 * @endcode
                 */
        int get_cb_port();

                /**
                 * @Synopsis Informa o ramal do servidor RTP.
                 *
                 * @return O numero do ramal do servidor RTP.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int rtp_server_ext = call->get_rtp_server_ext();
                 * ...
                 * @endcode
                 */
        int get_rtp_server_ext();

                /**
                 * @Synopsis Informa o numero da porta do servidor RTP.
                 *
                 * @return O numero da porta usada na comunicação com o servidor RTP.
                 * 
                 * Exemplo:
                 * @code
                 * ...
                 *  int rtp_server_port = call->get_rtp_server_port();
                 * ...
                 * @endcode
                 */
        int get_rtp_server_port();

                /**
                 * @Synopsis Coleta dados de audio vindos do servidor
                 *
                 * @param length Um ponteiro para posição de memória que recebera quantos bytes foram lidos no pacote recebido.
                 *
                 * @return Um ponteiro para o pacote disponivel para processamento.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  int length = 0;                                                                 
                 *  char * eth_msg = call->get_eth_message( &length ); 
                 * ...
                 * @endcode
                 */
        char * get_eth_message( int * length );

                /**
                 * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do server para o CBx.
                 *
                 * @return Um ponteiro para o inicio deste buffer.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  char * buffer = call->get_server2cb_buffer();
                 * ...
                 * @endcode
                 */
        char * get_server2cb_buffer();

                /**
                 * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do CBx para o server.
                 *
                 * @return Um ponteiro para o inicio deste buffer.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  uint8_t * buffer = call->get_cb2server_buffer();
                 * ...
                 * @endcode
                 */
        uint8_t * get_cb2server_buffer();

                /**
                 * @Synopsis Retorna o buffer desta classe.
                 *
                 * @return Um ponteiro para o primeiro elemento do buffer desta classe.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  uint8_t * buffer = call->get_buffer();
                 * ...
                 * @endcode
                 */
        uint8_t * get_buffer();
            
                /**
                 * @Synopsis Deveria encapsular o buffer da classe e montar um pacote formatado para envio aos CBx. Porém, fora de uso.
                 *
                 * @return Um ponteiro para o inicio do pacote montado no protocolo VZ.
                 *
                 * \note Função não implementada.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  uint8_t * cb_package = call->build_cb_package();
                 * ...
                 * @endcode
                 */
        uint8_t * build_cb_package( void );

                /**
                 * @Synopsis Responsavel por efetivamente montar o pacote que será enviado via rede.
                 *
                 * @param buffer Um ponteiro para o inicio dos dados recebidos do CBx que será encapsulado.
                 *
                 * @return Um ponteiro para o inicio do pacote pronto para o envio.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  char str_to_server[ 1024 ];
                 *  // assumindo que em data_from_cb consta armazenados os dados vindos dos Call_Box
                 *  strcpy( str_to_server, build_eth_package( data_from_cb ) );
                 * ...
                 * @endcode
                 */
        char * build_eth_package( uint8_t * );

                /**
                 * @Synopsis Responsavel por enviar efetivamente os dados via eth
                 *
                 * @param buffer Um ponteiro para o inicio dos dados que serão enviados.
                 *
                 * @return O numero de bytes efetivamente enviados.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  char * pkg = call->build_eth_package( data_from_cb );
                 *  //assumindo que os dados vindos do Call_Box estão armazenados em data_from_cb
                 *  int sent = call->send_message( pkg ); 
                 * ...
                 * @endcode
                 */
        int send_message( char * );

                /**
                 * @Synopsis Verifica se esta ligação não esta ultrapassando o tempo permitido.
                 *
                 * @retval True - se o tempo sem trocar dados nesta ligação for maior que __CALL_MAX_IDLE_TIME__.
                 * @retval False - Caso duração de ligação ainda dentro do tempo esperado.
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  printf( "Call não esta recendo dados a mais tempo do que deveria ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" );
                 * ...
                 * @endcode
                 */
        bool is_timeout( void );

                /**
                 * @Synopsis Verifica se o tempo de ligação é menor que o tempo máximo permitido.
                 *
                 * @retval True - Caso o tempo da ligação tenha passado do limite definido em __MAX_CALL_TIME__.
                 * @retval False - caso em que o tempo da ligação atual for menor que o máximo permitido..
                 *
                 * Exemplo:
                 * @code
                 * ...
                 *  printf( "Call já deveria ter acabado ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" );
                 * ...
                 * @endcode
                 */
        bool is_timetofinish( void );
};
#endif