![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Modularizando o src
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