VZTECH / Mbed 2 deprecated main_src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers call_box.h Source File

call_box.h

Go to the documentation of this file.
00001 /**
00002  * @file call_box.h
00003  * @Synopsis Implementa as funções de gerenciamento do Call_Box 
00004  * @author Jhonatan Casale
00005  * @version 1
00006  * @date 2014-11-06
00007  * \class Call_Box
00008  */
00009 #ifndef __CALL_BOX_H__
00010 #define __CALL_BOX_H__
00011 
00012 #include <stdint.h>
00013 #include "object.h"
00014 #include "sip.h"
00015 %: include "config_manager.h"
00016 %: include "shared_variables.h"
00017 
00018 const int __RESQUEST_TIME__ = 3;
00019 
00020 const uint16_t MAX_INVITE_RETRY = 512 * 2;
00021 
00022 ///< O tempo que a Header demora para "pingar" o Call_Box para saber se esta tudo bem.
00023 const uint8_t __RANGE_TO_REGISTER__ = 150;
00024 ///< Doc. later
00025 
00026 const uint8_t RTP_REQUEST_PORT_TIMEOUT = 45;
00027 
00028 const short int REQUEST_REGISTRY = -1;
00029 const short int REQUEST_PEND = -2;
00030 const short int REQUEST_PING = -4;
00031 ///< Valor usado como referencia para registro do equipamento CBx.
00032 
00033 const uint8_t __STEP__ = 30;
00034 ///< Usado para aumentar o intervalo entre cada ping, fora de uso atualmente.
00035 
00036 const uint8_t cb_idle = 1;
00037 ///< Representa que o Call_Box esta disponivel
00038 
00039 const uint8_t cb_ringing = 2;
00040 ///< Representa o Call_Box no status, discando.
00041 
00042 const uint8_t cb_trying = 3;
00043 ///< Representa o Call_Box no status tentando concluir o pedido de ligação.
00044 
00045 const uint8_t cb_on_call = 4;
00046 ///< Representa que o Call_Box já esta em uma ligação.
00047 
00048 const uint8_t cb_busy = 5;
00049 ///< Representa que o Call_Box esta ocupado.
00050 
00051 const uint8_t cb_denied = 6;
00052 ///< Representa que o pedido de invite do Call_Box foi negado.
00053 
00054 const uint8_t cb_bootloader = 7;
00055 ///< Representa que o Call_Box esta em atualizacao de firmware  
00056 
00057 
00058 class Call_Box : public Object  {
00059     private :
00060         /**
00061           * @Synopsis Objeto Sip que será usado para tratativas com o servidor.
00062           *
00063           * \note Esse objeto é criado no construtor da classe Call_Box, com os mesmos parâmetros passados para o 
00064           * construtor da classe Call_Box.
00065           */
00066         Sip * sip;
00067     
00068         bool invite_response;
00069         bool bye_response;
00070         bool overflow;
00071         
00072         int ext;  // ramal
00073         int port; // porta
00074         int sip_socket_fd;
00075         int shift_port;
00076         
00077         /**
00078           * @Synopsis Representa o status do Call_Box.
00079           *
00080           * \note Este valor sempre é atualizado ( por convenção ) com o uso da macro set_status(a,b), definida em utils.h
00081           */
00082         uint8_t status;
00083         
00084         uint8_t overflow_times;
00085         uint8_t msg_id;
00086         uint8_t timeslice;
00087         uint8_t next_aging_type;
00088         uint8_t  invite_try_number;
00089         
00090         uint16_t invite_retry_count;
00091         uint16_t invite_counter;
00092         
00093         //FIXME remove timeout
00094         float timeout;
00095         
00096         Timer t;
00097         Timer rtp_timer; // usado pra controlar o timeout dos pedidos de porta rtp
00098         Timer invite_timer;
00099         
00100         Call_Box * pair;
00101     public :
00102                 /**
00103                  * @Synopsis Cria um objeto Call_Box
00104                  *
00105                  * @param ext Vincula o objeto ao ramal informado
00106                  * @param port Vincula o objeto a porto informada.
00107                  *
00108                  * Exemplo:
00109                  * @code
00110                  * ...
00111                  *  int ext = 5121;
00112                  *  int port = 5021;
00113                  *  Call_Box * cb = new Call_Box( ext, port );
00114                  * ...
00115                  * @endcode
00116                  */
00117         Call_Box ( const int ext, const int port );
00118 
00119                 /**
00120                  * @Synopsis Destroi o objeto Call_Box
00121                  *
00122                  * Exemplo:
00123                  * @code
00124                  * ...
00125                  *  delete( cb );
00126                  * ...
00127                  * @endcode
00128                  * \note Deleta o objeto Sip nesse processo.
00129                  */
00130         ~Call_Box ( void );
00131         
00132                 /**
00133                  * @Synopsis Informa o ramal vinculado ao objeto Call_Box.
00134                  *
00135                  * @return O numero do ramal contido atualmente no objeto Call_Box
00136                  *
00137                  * Exemplo:
00138                  * @code
00139                  * ...
00140                  *  int ext = cb->get_ext();
00141                  * ...
00142                  * @endcode
00143                  */
00144         int get_ext ( void );
00145 
00146                 /**
00147                  * @Synopsis Informa o numero da porta vinculada ao objeto Call_Box.
00148                  *
00149                  * @return O numero da porta contido atualmente no objeto Call_Box
00150                  *
00151                  * Exemplo:
00152                  * @code
00153                  * ...
00154                  *  int port = cb->get_port();
00155                  * ...
00156                  * @endcode
00157                  */
00158         int get_port ( void );
00159        
00160                 /**
00161                  * @Synopsis Informa o tempo decorrido.
00162                  * \note O timer de cada objeto é iniciado no momento da criação do objeto Call_Box.
00163                  *
00164                  * @return O tempo decorrido desde a ultima vez que o timer do objeto foi resetado.
00165                  *
00166                  * Exemplo:
00167                  * @code
00168                  * ...
00169                  *  float elapsed_time = cb->get_elapsed_time();
00170                  * ...
00171                  * @endcode
00172                  */
00173         uint16_t get_elapsed_time ( void );
00174 
00175                 /**
00176                  * @Synopsis Reseta o timer do objeto Call_Box.
00177                  *
00178                  * Exemplo:
00179                  * @code
00180                  * ...
00181                  *  cb->reset_elapsed_time();
00182                  * ...
00183                  * @endcode
00184                  */
00185         void reset_elapsed_time ( void );
00186 
00187                 /**
00188                  * @Synopsis Invoca o método de registro deste Call_Box ( via objeto Sip vinculado ).
00189                  *
00190                  * Exemplo:
00191                  * @code
00192                  * ...
00193                  *  cb->registry();
00194                  * ...
00195                  * @endcode
00196                  */
00197         int registry ( void );
00198 
00199                 /**
00200                  * @Synopsis Invoca o método de pedido de ligação.
00201                  *
00202                  * @return Um ponteiro para um objeto VZ_call quando o pedido foi aceito pelo server, NULL caso em que o pedido de invite foi 
00203                  * negado pelo server ou aconteceu timeout do invite.
00204                  *
00205                  * Exemplo:
00206                  * @code
00207                  * ...
00208                  *  VZ_call * call = cb->invite();
00209                  * ...
00210                  * @endcode
00211                  */
00212         VZ_call * invite ( void );
00213 
00214                 /**
00215                  * @Synopsis Valor inicial para preenchimento deste campo nos pacotes trocados entre Header/Call_Box.
00216                  *
00217                  * @param msg_id Seta o valor recebido como parâmetro na variável do objeto.
00218                  *
00219                  * Exemplo:
00220                  * @code
00221                  * ...
00222                  *  cb->set_msg_id( 0x12 );
00223                  * ...
00224                  * @endcode
00225                  */
00226         void set_msg_id ( const uint8_t msg_id );
00227 
00228                 /**
00229                  * @Synopsis Informa o numero atual de msg_id que será enviado na próxima mensagem desse Call_Box
00230                  *
00231                  * @return O valor atual de msg_id.
00232                  *
00233                  * Exemplo:
00234                  * @code
00235                  * ...
00236                  *  uint8_t msg_id = cb->get_msg_id();
00237                  * ...
00238                  * @endcode
00239                  */
00240         uint8_t get_msg_id ( void );
00241 
00242         
00243                 /**
00244                  * @Synopsis Armazena o valor de Timeslice atualmente em uso pelo Call_Box.
00245                  *
00246                  * @param timeslice O valor que corresponde ao Timeslice disponivel para comunição do Call_Box
00247                  *
00248                  * Exemplo:
00249                  * @code
00250                  * ...
00251                  *  Timeslice * ts = new Timeslice();
00252                  *  cb->set_timeslice( ts->get_timeslice() );
00253                  * ...
00254                  * @endcode
00255                  */
00256         void set_timeslice ( const uint8_t timeslice );
00257 
00258                 /**
00259                  * @Synopsis Informa o timeslice ocupado atualmente pelo Call_Box.
00260                  *
00261                  * @return O valor do timeslice em uso pelo Call_Box.
00262                  *
00263                  * Exemplo:
00264                  * @code
00265                  * ...
00266                  *  uint8_t ts = cb->get_timeslice();
00267                  * ...
00268                  * @endcode
00269                  */
00270         uint8_t get_timeslice ( void );
00271                 
00272                 /**
00273                  * @Synopsis Faz chamada ( via objeto Sip vinculado ) a função que irá escutar a porta SIP associada neste Call_Box.
00274                  *
00275                  * @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
00276                  * recebido, ou quando a execução foi bem sucedida e nenhuma mensagem que demanda tramamento foi recebida;  um numero 
00277                  * maior do que zero, caso tenha recebido um pacote do tipo "bye" do servidor; este numero corresponde ao ramal do Call_Box.
00278                  * 
00279                  * Exemplo:
00280                  * @code
00281                  * ...
00282                  *  int returned_value = cb->listen_SIP_server();
00283                  * ...
00284                  * @endcode
00285                  */
00286         int listen_SIP_server ( void );
00287 
00288                 /**
00289                  * @Synopsis Invoca ( via objeto Sip ) o método de envio do pacote de "bye" para o servidor.
00290                  *
00291                  * Exemplo:
00292                  * @code
00293                  * ...
00294                  *  cb->send_bye();
00295                  * ...
00296                  * @endcode
00297                  */
00298         void send_bye ( void );
00299 
00300                 /**
00301                  * @Synopsis Altera o valor do status do objeto Sip vinculado.
00302                  *
00303                  * @param status O novo valor de status que será associado ao objeto Sip vinculado ao Call_Box.
00304                  *
00305                  * Exemplo:
00306                  * @code
00307                  * ...
00308                  *  cb->set_sip_status( 0 );
00309                  * ...
00310                  * @endcode
00311                  */
00312         void set_sip_status ( const int status );
00313         
00314         /*------------------------------------------------------------------------------------------------*/
00315         bool get_invite_response ( void );
00316         
00317         bool time_to_retry ( void );
00318         
00319         bool is_rtp_timer_timeout ( void );
00320         
00321         bool get_overflow_flag ( void );
00322         
00323         
00324         uint8_t get_invite_try_number ( void );
00325         
00326         uint8_t msg_id_update ( void );
00327         
00328         uint8_t get_overflow_times ( void );
00329         
00330         uint16_t get_invite_retry_count ( void );
00331         
00332         
00333         int get_sip_status ( void );
00334         
00335         void set_sip_status ( const uint8_t sip_status );
00336         
00337         int get_status ( void );
00338         
00339         int get_sip_ext ( void );
00340         
00341         int get_sip_port ( void );
00342         
00343         int get_timer ( void );
00344         
00345         int get_rtp_port ( void );
00346         
00347         int print_yourself ( void );
00348         
00349         int get_sip_socket_fd ( void );
00350         
00351         int sip_udp_incomming_pkg ( void );
00352         
00353         int call_init ( const int timeslice );
00354         
00355         int call_end ( const bool send_bye_to_ast = true  );
00356         
00357         int call_confirmed ( void );
00358         
00359         int retry_send_invite_pkg_to_ast ( void );
00360         
00361         int sip_print_yourself ( void );
00362         
00363         
00364         void cb_set_status ( const uint8_t status );
00365         
00366         void set_invite_response_ok ( void );
00367         
00368         void set_invite_response_pending ( void );
00369         
00370         void set_bye_response_ok ( void );
00371         
00372         void reset_cb_status ( void );
00373         
00374         void invite_retry_count_reset ( void );
00375               
00376         void set_rtp_port ( const int new_rtp_port );
00377         
00378         void init_rtp_timer ( void );
00379         
00380         void reset_rtp_timer ( void );
00381         
00382         void call_config ( void );
00383         
00384         void update_time ( void );
00385         
00386         Sip * get_sip ( void );
00387         
00388         uint16_t get_invite_counter ( void );
00389             
00390         uint16_t update_invite_counter ( void );
00391         
00392         int update ( void );
00393         
00394         Call_Box * get_pair_cbx ( void );
00395         
00396         int set_pair_cbx ( Call_Box * new_cbx );
00397 };
00398 
00399 #endif