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
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
Generated on Tue Jul 12 2022 16:25:01 by
