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_box.h
- Committer:
- klauss
- Date:
- 2015-04-16
- Revision:
- 113:db67ae00550e
- Parent:
- 112:6ae726539ab9
- Child:
- 114:472502b31a12
File content as of revision 113:db67ae00550e:
/**
* @file call_box.h
* @Synopsis Implementa as funções de gerenciamento do Call_Box
* @author Jhonatan Casale
* @version 1
* @date 2014-11-06
* \class Call_Box
*/
#ifndef __CALL_BOX_H__
#define __CALL_BOX_H__
#include "mbed.h"
#include "object.h"
#include "sip.h"
#include "debug.h"
#include "shared_variables.h"
#define __RESQUEST_TIME__ 3
#define MAX_INVITE_RETRY 1000
#define RTP_REQUEST_PORT_TIMEOUT 45 // 600 // seconds
#define __TIMEOUT__ 250
///< O tempo que a Header demora para "pingar" o Call_Box para saber se esta tudo bem.
#define __RANGE_TO_REGISTER__ 150
///< Doc. later
#define __TIME_TO_REGISTER__ __TIMEOUT__ - __RANGE_TO_REGISTER__
#define __CYCLES__ __TIME_TO_REGISTER__ / __RESQUEST_TIME__ // 200 // 3 ~ 66
#define REQUEST_REGISTRY -1
#define REQUEST_PEND -2
#define REQUEST_PING -4
///< Valor usado como referencia para registro do equipamento CBx.
#define __MAX_ATTEMPTS__ 5
///< O numero maximo de vezes que a Header vai tentar pingar o Call_Box
#define __STEP__ 30
///< Usado para aumentar o intervalo entre cada ping, fora de uso atualmente.
#define __MAX_TIMEOUT__ __STEP__ * __MAX_ATTEMPTS__
///< Usado para limitar o tempo maximo de timeout do Call_Box sem responder o ping, fora de uso.
#define cb_idle 1
///< Representa que o Call_Box esta disponivel
#define cb_ringing 2
///< Representa o Call_Box no status, discando.
#define cb_trying 3
///< Representa o Call_Box no status tentando concluir o pedido de ligação.
#define cb_on_call 4
///< Representa que o Call_Box já esta em uma ligação.
#define cb_busy 5
///< Representa que o Call_Box esta ocupado.
#define cb_denied 6
///< Representa que o pedido de invite do Call_Box foi negado.
class Call_Box : public Object{
private :
int ext; // ramal
int port; // porta
Timer t;
uint8_t remaining_attempts;
float timeout;
uint8_t msg_id;
uint8_t timeslice;
uint8_t next_aging_type;
bool invite_response;
uint16_t invite_retry_count;
bool bye_response;
Timer seconds;
Timer rtp_timer; // usado pra controlar o timeout dos pedidos de porta rtp
int sip_socket_fd;
int shift_port;
public :
/**
* @Synopsis Objeto Sip que será usado para tratativas com o servidor.
*
* \note Esse objeto é criado no construtor da classe Call_Box, com os mesmos parâmetros passados para o
* construtor da classe Call_Box.
*/
Sip * sip;
/**
* @Synopsis Cria um objeto Call_Box
*
* @param ext Vincula o objeto ao ramal informado
* @param port Vincula o objeto a porto informada.
*
* Exemplo:
* @code
* ...
* int ext = 5121;
* int port = 5021;
* Call_Box * cb = new Call_Box( ext, port );
* ...
* @endcode
*/
Call_Box( int ext, int port );
/**
* @Synopsis Destroi o objeto Call_Box
*
* Exemplo:
* @code
* ...
* delete( cb );
* ...
* @endcode
* \note Deleta o objeto Sip nesse processo.
*/
~Call_Box( void );
/**
* @Synopsis Representa o status do Call_Box.
*
* \note Este valor sempre é atualizado ( por convenção ) com o uso da macro set_status(a,b), definida em utils.h
*/
uint8_t status;
/**
* @Synopsis Informa o ramal vinculado ao objeto Call_Box.
*
* @return O numero do ramal contido atualmente no objeto Call_Box
*
* Exemplo:
* @code
* ...
* int ext = cb->get_ext();
* ...
* @endcode
*/
int get_ext( void );
/**
* @Synopsis Informa o numero da porta vinculada ao objeto Call_Box.
*
* @return O numero da porta contido atualmente no objeto Call_Box
*
* Exemplo:
* @code
* ...
* int port = cb->get_port();
* ...
* @endcode
*/
int get_port( void );
/**
* @Synopsis Informa o tempo decorrido.
* \note O timer de cada objeto é iniciado no momento da criação do objeto Call_Box.
*
* @return O tempo decorrido desde a ultima vez que o timer do objeto foi resetado.
*
* Exemplo:
* @code
* ...
* float elapsed_time = cb->get_elapsed_time();
* ...
* @endcode
*/
float get_elapsed_time( void );
/**
* @Synopsis Informa se o Call_Box esta inativo acima do tempo previsto.
*
* @retval True - Caso o timer do objeto seja maior que o definido.
* @retval False - Caso o timer do objeto seja menor que o definido..
*
* Exemplo:
* @code
* ...
* printf(" %s ", ( cb->is_timeout() ) ? "Call_Box is outdated" : "Call_Box is okay" );
* ...
* @endcode
*/
bool is_timeout( void );
/**
* @Synopsis Reconfigura o timeout de forma incremental, informando se ainda existe alguma tentativas de "ping" nesse Call_Box
*
* @return O numero de tentativas restantes de registro desse Call_Box. Retorno 0 significa que as tentativar acabaram.
*
* Exemplo:
* @code
* ...
* if( cb->has_next_try() == 0x00 ){
* // faça alguma coisa ...
* }
* ...
* @endcode
*/
bool has_next_try( void );
/**
* @Synopsis Reseta o timer do objeto Call_Box.
*
* Exemplo:
* @code
* ...
* cb->reset_elapsed_time();
* ...
* @endcode
*/
void reset_elapsed_time( void );
/**
* @Synopsis Invoca o método de registro deste Call_Box ( via objeto Sip vinculado ).
*
* Exemplo:
* @code
* ...
* cb->registry();
* ...
* @endcode
*/
void registry( void );
/**
* @Synopsis Invoca o método de pedido de ligação.
*
* @return Um ponteiro para um objeto VZ_call quando o pedido foi aceito pelo server, NULL caso em que o pedido de invite foi
* negado pelo server ou aconteceu timeout do invite.
*
* Exemplo:
* @code
* ...
* VZ_call * call = cb->invite();
* ...
* @endcode
*/
VZ_call * invite( void );
/**
* @Synopsis Valor inicial para preenchimento deste campo nos pacotes trocados entre Header/Call_Box.
*
* @param msg_id Seta o valor recebido como parâmetro na variável do objeto.
*
* Exemplo:
* @code
* ...
* cb->set_msg_id( 0x12 );
* ...
* @endcode
*/
void set_msg_id( uint8_t msg_id );
/**
* @Synopsis Informa o numero atual de msg_id que será enviado na próxima mensagem desse Call_Box
*
* @return O valor atual de msg_id.
*
* Exemplo:
* @code
* ...
* uint8_t msg_id = cb->get_msg_id();
* ...
* @endcode
*/
uint8_t get_msg_id( void );
/**
* @Synopsis Armazena o valor de Timeslice atualmente em uso pelo Call_Box.
*
* @param timeslice O valor que corresponde ao Timeslice disponivel para comunição do Call_Box
*
* Exemplo:
* @code
* ...
* Timeslice * ts = new Timeslice();
* cb->set_timeslice( ts->get_timeslice() );
* ...
* @endcode
*/
void set_timeslice( uint8_t timeslice );
/**
* @Synopsis Informa o timeslice ocupado atualmente pelo Call_Box.
*
* @return O valor do timeslice em uso pelo Call_Box.
*
* Exemplo:
* @code
* ...
* uint8_t ts = cb->get_timeslice();
* ...
* @endcode
*/
uint8_t get_timeslice( void );
//void set_sip( Sip * sip );
/**
* @Synopsis Faz chamada ( via objeto Sip vinculado ) a função que irá escutar a porta SIP associada neste Call_Box.
*
* @return Um valor menor que zero se a execução falhar, igual a zero se a execução for bem sucedida e nenhum dado foi
* recebido, ou quando a execução foi bem sucedida e nenhuma mensagem que demanda tramamento foi recebida; um numero
* maior do que zero, caso tenha recebido um pacote do tipo "bye" do servidor; este numero corresponde ao ramal do Call_Box.
*
* Exemplo:
* @code
* ...
* int returned_value = cb->listen_SIP_server();
* ...
* @endcode
*/
int listen_SIP_server( void );
/**
* @Synopsis Invoca ( no objeto Sip ) o método de pedido de "desregistro".
*
* Exemplo:
* @code
* ...
* cb->unregistry();
* ...
* @endcode
*/
void unregistry( void );
/**
* @Synopsis Invoca ( via objeto Sip ) o método de envio do pacote de "bye" para o servidor.
*
* Exemplo:
* @code
* ...
* cb->send_bye();
* ...
* @endcode
*/
void send_bye( void );
/**
* @Synopsis Destroi o objeto Sip vinculado ao Call_Box, criando e vinculando outro em seguida.
*
* Exemplo:
* @code
* ...
* cb->reset_sip();
* ...
* @endcode
*/
void reset_sip( void );
/**
* @Synopsis Altera o valor do status do objeto Sip vinculado.
*
* @param status O novo valor de status que será associado ao objeto Sip vinculado ao Call_Box.
*
* Exemplo:
* @code
* ...
* cb->set_sip_status( 0 );
* ...
* @endcode
*/
void set_sip_status( int status );
/**
* @Synopsis Inicia ( ou re-inicia ) o Timer do objeto Call_Box.
*
* Exemplo:
* @code
* ...
* cb->re_start_timer();
* ...
* @endcode
*/
void re_start_timer( void );
int get_sip_status( void );
int set_sip_status( uint8_t sip_status );
int get_status( void );
void cb_set_status( uint8_t status );
int8_t get_next_aging_type( void );
//void set_first_invite_response_ok( void );
//void set_first_invite_response_pending( void );
//bool get_first_invite_response( void );
void set_invite_response_ok( void );
void set_invite_response_pending( void );
bool get_invite_response( void );
void set_bye_response_ok( void );
void set_bye_response_pending( void );
bool get_bye_response( void );
int get_sip_socket_fd( void );
int sip_udp_incomming_pkg( void );
void reset_cb_status( void );
void invite_retry_count_reset( void );
uint8_t get_invite_retry_count( void );
int get_sip_ext( void );
int get_sip_port( void );
int get_timer( void );
int get_rtp_port ( void );
void set_rtp_port ( int );
int print_yourself ( void );
void init_rtp_timer ( void );
void reset_rtp_timer ( void );
bool is_rtp_timer_timeout ( void );
int get_rtp_timer ( void );
};
#endif
