Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
call.h
- Committer:
- klauss
- Date:
- 2014-11-24
- Revision:
- 74:81c47fff88a5
- Parent:
- 69:65665afbad5d
- Child:
- 78:1353744f01e1
File content as of revision 74:81c47fff88a5:
/**
* @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 <stdlib.h>
#include <stdint.h>
#include "mbed.h"
#include "EthernetInterface.h"
#include "object.h"
#include "vz_protocol.h"
#include "rtp.h"
#include "rtpbuf.h"
#include "debug.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
