![](/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:
- 2014-11-25
- Revision:
- 77:e8c0253b57bc
- Parent:
- 76:9f5f99dd895a
- Child:
- 78:1353744f01e1
File content as of revision 77:e8c0253b57bc:
/** * @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" #define __TIMEOUT__ 30 ///< O tempo que a Header demora para "pingar" o Call_Box para saber se esta tudo bem. #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. 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; 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->reconfigure_timeout() == 0x00 ){ * // faça alguma coisa ... * } * ... * @endcode */ uint8_t reconfigure_timeout( 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 ); }; #endif