Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Wed Nov 12 13:25:54 2014 +0000
Revision:
69:65665afbad5d
Parent:
55:2f5e7374af9d
Child:
74:81c47fff88a5
versao em re-valida??o a priori, os dados de audio est?o se perdendo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 69:65665afbad5d 1 /**
klauss 69:65665afbad5d 2 * @file call_box.h
klauss 69:65665afbad5d 3 * @Synopsis Implementa as funções de gerenciamento do Call_Box
klauss 69:65665afbad5d 4 * @author Jhonatan Casale
klauss 69:65665afbad5d 5 * @version 1
klauss 69:65665afbad5d 6 * @date 2014-11-06
klauss 69:65665afbad5d 7 * \class Call_Box
klauss 69:65665afbad5d 8 */
klauss 0:4d17cd9c8f9d 9 #ifndef __CALL_BOX_H__
klauss 0:4d17cd9c8f9d 10 #define __CALL_BOX_H__
klauss 0:4d17cd9c8f9d 11
klauss 0:4d17cd9c8f9d 12 #include "mbed.h"
klauss 0:4d17cd9c8f9d 13 #include "object.h"
klauss 0:4d17cd9c8f9d 14 #include "sip.h"
klauss 0:4d17cd9c8f9d 15 #include "debug.h"
klauss 69:65665afbad5d 16 #define __TIMEOUT__ 30
klauss 69:65665afbad5d 17 ///< O tempo que a Header demora para "pingar" o Call_Box para saber se esta tudo bem.
klauss 55:2f5e7374af9d 18 #define __MAX_ATTEMPTS__ 5
klauss 69:65665afbad5d 19 ///< O numero maximo de vezes que a Header vai tentar pingar o Call_Box
klauss 69:65665afbad5d 20 #define __STEP__ 30
klauss 69:65665afbad5d 21 ///< Usado para aumentar o intervalo entre cada ping, fora de uso atualmente.
klauss 0:4d17cd9c8f9d 22 #define __MAX_TIMEOUT__ __STEP__ * __MAX_ATTEMPTS__
klauss 69:65665afbad5d 23 ///< Usado para limitar o tempo maximo de timeout do Call_Box sem responder o ping, fora de uso.
klauss 0:4d17cd9c8f9d 24
klauss 0:4d17cd9c8f9d 25 #define cb_idle 1
klauss 69:65665afbad5d 26 ///< Representa que o Call_Box esta disponivel
klauss 0:4d17cd9c8f9d 27 #define cb_ringing 2
klauss 69:65665afbad5d 28 ///< Representa o Call_Box no status, discando.
klauss 0:4d17cd9c8f9d 29 #define cb_trying 3
klauss 69:65665afbad5d 30 ///< Representa o Call_Box no status tentando concluir o pedido de ligação.
klauss 0:4d17cd9c8f9d 31 #define cb_on_call 4
klauss 69:65665afbad5d 32 ///< Representa que o Call_Box já esta em uma ligação.
klauss 0:4d17cd9c8f9d 33 #define cb_busy 5
klauss 69:65665afbad5d 34 ///< Representa que o Call_Box esta ocupado.
klauss 0:4d17cd9c8f9d 35
klauss 0:4d17cd9c8f9d 36 class Call_Box : public Object{
klauss 0:4d17cd9c8f9d 37 private :
klauss 0:4d17cd9c8f9d 38 int ext; // ramal
klauss 0:4d17cd9c8f9d 39 int port; // porta
klauss 0:4d17cd9c8f9d 40 Timer t;
klauss 0:4d17cd9c8f9d 41 uint8_t remaining_attempts;
klauss 0:4d17cd9c8f9d 42 float timeout;
klauss 0:4d17cd9c8f9d 43 uint8_t msg_id;
klauss 0:4d17cd9c8f9d 44 uint8_t timeslice;
klauss 0:4d17cd9c8f9d 45
klauss 0:4d17cd9c8f9d 46 public :
klauss 69:65665afbad5d 47 /**
klauss 69:65665afbad5d 48 * @Synopsis Objeto Sip que será usado para tratativas com o servidor.
klauss 69:65665afbad5d 49 *
klauss 69:65665afbad5d 50 * \note Esse objeto é criado no construtor da classe Call_Box, com os mesmos parâmetros passados para o
klauss 69:65665afbad5d 51 * construtor da classe Call_Box.
klauss 69:65665afbad5d 52 */
klauss 0:4d17cd9c8f9d 53 Sip * sip;
klauss 69:65665afbad5d 54
klauss 69:65665afbad5d 55 /**
klauss 69:65665afbad5d 56 * @Synopsis Cria um objeto Call_Box
klauss 69:65665afbad5d 57 *
klauss 69:65665afbad5d 58 * @param ext Vincula o objeto ao ramal informado
klauss 69:65665afbad5d 59 * @param port Vincula o objeto a porto informada.
klauss 69:65665afbad5d 60 *
klauss 69:65665afbad5d 61 * Exemplo:
klauss 69:65665afbad5d 62 * @code
klauss 69:65665afbad5d 63 * ...
klauss 69:65665afbad5d 64 * int ext = 5121;
klauss 69:65665afbad5d 65 * int port = 5021;
klauss 69:65665afbad5d 66 * Call_Box * cb = new Call_Box( ext, port );
klauss 69:65665afbad5d 67 * ...
klauss 69:65665afbad5d 68 * @endcode
klauss 69:65665afbad5d 69 */
klauss 0:4d17cd9c8f9d 70 Call_Box( int ext, int port );
klauss 69:65665afbad5d 71
klauss 69:65665afbad5d 72 /**
klauss 69:65665afbad5d 73 * @Synopsis Destroi o objeto Call_Box
klauss 69:65665afbad5d 74 *
klauss 69:65665afbad5d 75 * Exemplo:
klauss 69:65665afbad5d 76 * @code
klauss 69:65665afbad5d 77 * ...
klauss 69:65665afbad5d 78 * delete( cb );
klauss 69:65665afbad5d 79 * ...
klauss 69:65665afbad5d 80 * @endcode
klauss 69:65665afbad5d 81 * \note Deleta o objeto Sip nesse processo.
klauss 69:65665afbad5d 82 */
klauss 0:4d17cd9c8f9d 83 ~Call_Box( void );
klauss 0:4d17cd9c8f9d 84
klauss 69:65665afbad5d 85 /**
klauss 69:65665afbad5d 86 * @Synopsis Representa o status do Call_Box.
klauss 69:65665afbad5d 87 *
klauss 69:65665afbad5d 88 * \note Este valor sempre é atualizado ( por convenção ) com o uso da macro set_status(a,b), definida em utils.h
klauss 69:65665afbad5d 89 */
klauss 0:4d17cd9c8f9d 90 uint8_t status;
klauss 0:4d17cd9c8f9d 91
klauss 69:65665afbad5d 92 /**
klauss 69:65665afbad5d 93 * @Synopsis Informa o ramal vinculado ao objeto Call_Box.
klauss 69:65665afbad5d 94 *
klauss 69:65665afbad5d 95 * @return O numero do ramal contido atualmente no objeto Call_Box
klauss 69:65665afbad5d 96 *
klauss 69:65665afbad5d 97 * Exemplo:
klauss 69:65665afbad5d 98 * @code
klauss 69:65665afbad5d 99 * ...
klauss 69:65665afbad5d 100 * int ext = cb->get_ext();
klauss 69:65665afbad5d 101 * ...
klauss 69:65665afbad5d 102 * @endcode
klauss 69:65665afbad5d 103 */
klauss 0:4d17cd9c8f9d 104 int get_ext( void );
klauss 69:65665afbad5d 105
klauss 69:65665afbad5d 106 /**
klauss 69:65665afbad5d 107 * @Synopsis Informa o numero da porta vinculada ao objeto Call_Box.
klauss 69:65665afbad5d 108 *
klauss 69:65665afbad5d 109 * @return O numero da porta contido atualmente no objeto Call_Box
klauss 69:65665afbad5d 110 *
klauss 69:65665afbad5d 111 * Exemplo:
klauss 69:65665afbad5d 112 * @code
klauss 69:65665afbad5d 113 * ...
klauss 69:65665afbad5d 114 * int port = cb->get_port();
klauss 69:65665afbad5d 115 * ...
klauss 69:65665afbad5d 116 * @endcode
klauss 69:65665afbad5d 117 */
klauss 0:4d17cd9c8f9d 118 int get_port( void );
klauss 69:65665afbad5d 119
klauss 69:65665afbad5d 120 /**
klauss 69:65665afbad5d 121 * @Synopsis Informa o tempo decorrido.
klauss 69:65665afbad5d 122 * \note O timer de cada objeto é iniciado no momento da criação do objeto Call_Box.
klauss 69:65665afbad5d 123 *
klauss 69:65665afbad5d 124 * @return O tempo decorrido desde a ultima vez que o timer do objeto foi resetado.
klauss 69:65665afbad5d 125 *
klauss 69:65665afbad5d 126 * Exemplo:
klauss 69:65665afbad5d 127 * @code
klauss 69:65665afbad5d 128 * ...
klauss 69:65665afbad5d 129 * float elapsed_time = cb->get_elapsed_time();
klauss 69:65665afbad5d 130 * ...
klauss 69:65665afbad5d 131 * @endcode
klauss 69:65665afbad5d 132 */
klauss 0:4d17cd9c8f9d 133 float get_elapsed_time( void );
klauss 69:65665afbad5d 134
klauss 69:65665afbad5d 135 /**
klauss 69:65665afbad5d 136 * @Synopsis Informa se o Call_Box esta inativo acima do tempo previsto.
klauss 69:65665afbad5d 137 *
klauss 69:65665afbad5d 138 * @retval True - Caso o timer do objeto seja maior que o definido.
klauss 69:65665afbad5d 139 * @retval False - Caso o timer do objeto seja menor que o definido..
klauss 69:65665afbad5d 140 *
klauss 69:65665afbad5d 141 * Exemplo:
klauss 69:65665afbad5d 142 * @code
klauss 69:65665afbad5d 143 * ...
klauss 69:65665afbad5d 144 * printf(" %s ", ( cb->is_timeout() ) ? "Call_Box is outdated" : "Call_Box is okay" );
klauss 69:65665afbad5d 145 * ...
klauss 69:65665afbad5d 146 * @endcode
klauss 69:65665afbad5d 147 */
klauss 0:4d17cd9c8f9d 148 bool is_timeout( void );
klauss 69:65665afbad5d 149
klauss 69:65665afbad5d 150 /**
klauss 69:65665afbad5d 151 * @Synopsis Reconfigura o timeout de forma incremental, informando se ainda existe alguma tentativas de "ping" nesse Call_Box
klauss 69:65665afbad5d 152 *
klauss 69:65665afbad5d 153 * @return O numero de tentativas restantes de registro desse Call_Box. Retorno 0 significa que as tentativar acabaram.
klauss 69:65665afbad5d 154 *
klauss 69:65665afbad5d 155 * Exemplo:
klauss 69:65665afbad5d 156 * @code
klauss 69:65665afbad5d 157 * ...
klauss 69:65665afbad5d 158 * if( cb->reconfigure_timeout() == 0x00 ){
klauss 69:65665afbad5d 159 * // faça alguma coisa ...
klauss 69:65665afbad5d 160 * }
klauss 69:65665afbad5d 161 * ...
klauss 69:65665afbad5d 162 * @endcode
klauss 69:65665afbad5d 163 */
klauss 0:4d17cd9c8f9d 164 uint8_t reconfigure_timeout( void );
klauss 69:65665afbad5d 165
klauss 69:65665afbad5d 166 /**
klauss 69:65665afbad5d 167 * @Synopsis Reseta o timer do objeto Call_Box.
klauss 69:65665afbad5d 168 *
klauss 69:65665afbad5d 169 * Exemplo:
klauss 69:65665afbad5d 170 * @code
klauss 69:65665afbad5d 171 * ...
klauss 69:65665afbad5d 172 * cb->reset_elapsed_time();
klauss 69:65665afbad5d 173 * ...
klauss 69:65665afbad5d 174 * @endcode
klauss 69:65665afbad5d 175 */
klauss 0:4d17cd9c8f9d 176 void reset_elapsed_time( void );
klauss 69:65665afbad5d 177
klauss 69:65665afbad5d 178 /**
klauss 69:65665afbad5d 179 * @Synopsis Invoca o método de registro deste Call_Box ( via objeto Sip vinculado ).
klauss 69:65665afbad5d 180 *
klauss 69:65665afbad5d 181 * Exemplo:
klauss 69:65665afbad5d 182 * @code
klauss 69:65665afbad5d 183 * ...
klauss 69:65665afbad5d 184 * cb->registry();
klauss 69:65665afbad5d 185 * ...
klauss 69:65665afbad5d 186 * @endcode
klauss 69:65665afbad5d 187 */
klauss 0:4d17cd9c8f9d 188 void registry( void );
klauss 69:65665afbad5d 189
klauss 69:65665afbad5d 190 /**
klauss 69:65665afbad5d 191 * @Synopsis Invoca o método de pedido de ligação.
klauss 69:65665afbad5d 192 *
klauss 69:65665afbad5d 193 * @return Um ponteiro para um objeto VZ_call quando o pedido foi aceito pelo server, NULL caso em que o pedido de invite foi
klauss 69:65665afbad5d 194 * negado pelo server ou aconteceu timeout do invite.
klauss 69:65665afbad5d 195 *
klauss 69:65665afbad5d 196 * Exemplo:
klauss 69:65665afbad5d 197 * @code
klauss 69:65665afbad5d 198 * ...
klauss 69:65665afbad5d 199 * VZ_call * call = cb->invite();
klauss 69:65665afbad5d 200 * ...
klauss 69:65665afbad5d 201 * @endcode
klauss 69:65665afbad5d 202 */
klauss 0:4d17cd9c8f9d 203 VZ_call * invite( void );
klauss 69:65665afbad5d 204
klauss 69:65665afbad5d 205 /**
klauss 69:65665afbad5d 206 * @Synopsis Valor inicial para preenchimento deste campo nos pacotes trocados entre Header/Call_Box.
klauss 69:65665afbad5d 207 *
klauss 69:65665afbad5d 208 * @param msg_id Seta o valor recebido como parâmetro na variável do objeto.
klauss 69:65665afbad5d 209 *
klauss 69:65665afbad5d 210 * Exemplo:
klauss 69:65665afbad5d 211 * @code
klauss 69:65665afbad5d 212 * ...
klauss 69:65665afbad5d 213 * cb->set_msg_id( 0x12 );
klauss 69:65665afbad5d 214 * ...
klauss 69:65665afbad5d 215 * @endcode
klauss 69:65665afbad5d 216 */
klauss 0:4d17cd9c8f9d 217 void set_msg_id( uint8_t msg_id );
klauss 69:65665afbad5d 218
klauss 69:65665afbad5d 219 /**
klauss 69:65665afbad5d 220 * @Synopsis Informa o numero atual de msg_id que será enviado na próxima mensagem desse Call_Box
klauss 69:65665afbad5d 221 *
klauss 69:65665afbad5d 222 * @return O valor atual de msg_id.
klauss 69:65665afbad5d 223 *
klauss 69:65665afbad5d 224 * Exemplo:
klauss 69:65665afbad5d 225 * @code
klauss 69:65665afbad5d 226 * ...
klauss 69:65665afbad5d 227 * uint8_t msg_id = cb->get_msg_id();
klauss 69:65665afbad5d 228 * ...
klauss 69:65665afbad5d 229 * @endcode
klauss 69:65665afbad5d 230 */
klauss 0:4d17cd9c8f9d 231 uint8_t get_msg_id( void );
klauss 69:65665afbad5d 232
klauss 69:65665afbad5d 233
klauss 69:65665afbad5d 234 /**
klauss 69:65665afbad5d 235 * @Synopsis Armazena o valor de Timeslice atualmente em uso pelo Call_Box.
klauss 69:65665afbad5d 236 *
klauss 69:65665afbad5d 237 * @param timeslice O valor que corresponde ao Timeslice disponivel para comunição do Call_Box
klauss 69:65665afbad5d 238 *
klauss 69:65665afbad5d 239 * Exemplo:
klauss 69:65665afbad5d 240 * @code
klauss 69:65665afbad5d 241 * ...
klauss 69:65665afbad5d 242 * Timeslice * ts = new Timeslice();
klauss 69:65665afbad5d 243 * cb->set_timeslice( ts->get_timeslice() );
klauss 69:65665afbad5d 244 * ...
klauss 69:65665afbad5d 245 * @endcode
klauss 69:65665afbad5d 246 */
klauss 69:65665afbad5d 247 void set_timeslice( uint8_t timeslice );
klauss 69:65665afbad5d 248
klauss 69:65665afbad5d 249
klauss 69:65665afbad5d 250 /**
klauss 69:65665afbad5d 251 * @Synopsis Informa o timeslice ocupado atualmente pelo Call_Box.
klauss 69:65665afbad5d 252 *
klauss 69:65665afbad5d 253 * @return O valor do timeslice em uso pelo Call_Box.
klauss 69:65665afbad5d 254 *
klauss 69:65665afbad5d 255 * Exemplo:
klauss 69:65665afbad5d 256 * @code
klauss 69:65665afbad5d 257 * ...
klauss 69:65665afbad5d 258 * uint8_t ts = cb->get_timeslice();
klauss 69:65665afbad5d 259 * ...
klauss 69:65665afbad5d 260 * @endcode
klauss 69:65665afbad5d 261 */
klauss 0:4d17cd9c8f9d 262 uint8_t get_timeslice( void );
klauss 69:65665afbad5d 263
klauss 0:4d17cd9c8f9d 264 //void set_sip( Sip * sip );
klauss 69:65665afbad5d 265
klauss 69:65665afbad5d 266 /**
klauss 69:65665afbad5d 267 * @Synopsis Faz chamada ( via objeto Sip vinculado ) a função que irá escutar a porta SIP associada neste Call_Box.
klauss 69:65665afbad5d 268 *
klauss 69:65665afbad5d 269 * @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
klauss 69:65665afbad5d 270 * recebido, ou quando a execução foi bem sucedida e nenhuma mensagem que demanda tramamento foi recebida; um numero
klauss 69:65665afbad5d 271 * maior do que zero, caso tenha recebido um pacote do tipo "bye" do servidor; este numero corresponde ao ramal do Call_Box.
klauss 69:65665afbad5d 272 *
klauss 69:65665afbad5d 273 * Exemplo:
klauss 69:65665afbad5d 274 * @code
klauss 69:65665afbad5d 275 * ...
klauss 69:65665afbad5d 276 * int returned_value = cb->listen_SIP_server();
klauss 69:65665afbad5d 277 * ...
klauss 69:65665afbad5d 278 * @endcode
klauss 69:65665afbad5d 279 */
klauss 0:4d17cd9c8f9d 280 int listen_SIP_server( void );
klauss 69:65665afbad5d 281
klauss 69:65665afbad5d 282 /**
klauss 69:65665afbad5d 283 * @Synopsis Invoca ( no objeto Sip ) o método de pedido de "desregistro".
klauss 69:65665afbad5d 284 *
klauss 69:65665afbad5d 285 * Exemplo:
klauss 69:65665afbad5d 286 * @code
klauss 69:65665afbad5d 287 * ...
klauss 69:65665afbad5d 288 * cb->unregistry();
klauss 69:65665afbad5d 289 * ...
klauss 69:65665afbad5d 290 * @endcode
klauss 69:65665afbad5d 291 */
klauss 0:4d17cd9c8f9d 292 void unregistry( void );
klauss 69:65665afbad5d 293
klauss 69:65665afbad5d 294 /**
klauss 69:65665afbad5d 295 * @Synopsis Invoca ( via objeto Sip ) o método de envio do pacote de "bye" para o servidor.
klauss 69:65665afbad5d 296 *
klauss 69:65665afbad5d 297 * Exemplo:
klauss 69:65665afbad5d 298 * @code
klauss 69:65665afbad5d 299 * ...
klauss 69:65665afbad5d 300 * cb->send_bye();
klauss 69:65665afbad5d 301 * ...
klauss 69:65665afbad5d 302 * @endcode
klauss 69:65665afbad5d 303 */
klauss 0:4d17cd9c8f9d 304 void send_bye( void );
klauss 69:65665afbad5d 305
klauss 69:65665afbad5d 306 /**
klauss 69:65665afbad5d 307 * @Synopsis Destroi o objeto Sip vinculado ao Call_Box, criando e vinculando outro em seguida.
klauss 69:65665afbad5d 308 *
klauss 69:65665afbad5d 309 * Exemplo:
klauss 69:65665afbad5d 310 * @code
klauss 69:65665afbad5d 311 * ...
klauss 69:65665afbad5d 312 * cb->reset_sip();
klauss 69:65665afbad5d 313 * ...
klauss 69:65665afbad5d 314 * @endcode
klauss 69:65665afbad5d 315 */
klauss 1:a1758104fa1d 316 void reset_sip( void );
klauss 69:65665afbad5d 317
klauss 69:65665afbad5d 318 /**
klauss 69:65665afbad5d 319 * @Synopsis Altera o valor do status do objeto Sip vinculado.
klauss 69:65665afbad5d 320 *
klauss 69:65665afbad5d 321 * @param status O novo valor de status que será associado ao objeto Sip vinculado ao Call_Box.
klauss 69:65665afbad5d 322 *
klauss 69:65665afbad5d 323 * Exemplo:
klauss 69:65665afbad5d 324 * @code
klauss 69:65665afbad5d 325 * ...
klauss 69:65665afbad5d 326 * cb->set_sip_status( 0 );
klauss 69:65665afbad5d 327 * ...
klauss 69:65665afbad5d 328 * @endcode
klauss 69:65665afbad5d 329 */
klauss 14:22a35f575502 330 void set_sip_status( int status );
klauss 69:65665afbad5d 331
klauss 69:65665afbad5d 332 /**
klauss 69:65665afbad5d 333 * @Synopsis Inicia ( ou re-inicia ) o Timer do objeto Call_Box.
klauss 69:65665afbad5d 334 *
klauss 69:65665afbad5d 335 * Exemplo:
klauss 69:65665afbad5d 336 * @code
klauss 69:65665afbad5d 337 * ...
klauss 69:65665afbad5d 338 * cb->re_start_timer();
klauss 69:65665afbad5d 339 * ...
klauss 69:65665afbad5d 340 * @endcode
klauss 69:65665afbad5d 341 */
klauss 69:65665afbad5d 342 void re_start_timer( void );
klauss 0:4d17cd9c8f9d 343 };
klauss 0:4d17cd9c8f9d 344 #endif