Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Mon Nov 24 16:43:16 2014 +0000
Revision:
74:81c47fff88a5
Parent:
69:65665afbad5d
Child:
78:1353744f01e1
validando organiza??o de arquivos | ainda em desenvolvimento.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
klauss 69:65665afbad5d 1 /**
klauss 69:65665afbad5d 2 * @file call.h
klauss 69:65665afbad5d 3 * @Synopsis Implementa as funcionalidades de uma ligação, incluindo troca de dados de audio em ambos os lados.
klauss 69:65665afbad5d 4 * @author Jhonatan Casale
klauss 69:65665afbad5d 5 * @version 1
klauss 69:65665afbad5d 6 * @date 2014-11-05
klauss 69:65665afbad5d 7 * \class VZ_call
klauss 69:65665afbad5d 8 */
klauss 0:4d17cd9c8f9d 9 #ifndef __CALL_H__
klauss 0:4d17cd9c8f9d 10 #define __CALL_H__
klauss 0:4d17cd9c8f9d 11
klauss 74:81c47fff88a5 12 #include <stdlib.h>
klauss 74:81c47fff88a5 13 #include <stdint.h>
klauss 0:4d17cd9c8f9d 14 #include "mbed.h"
klauss 0:4d17cd9c8f9d 15 #include "EthernetInterface.h"
klauss 0:4d17cd9c8f9d 16 #include "object.h"
klauss 0:4d17cd9c8f9d 17 #include "vz_protocol.h"
klauss 74:81c47fff88a5 18 #include "rtp.h"
klauss 74:81c47fff88a5 19 #include "rtpbuf.h"
klauss 74:81c47fff88a5 20 #include "debug.h"
klauss 0:4d17cd9c8f9d 21
klauss 0:4d17cd9c8f9d 22 extern DigitalOut led1;
klauss 0:4d17cd9c8f9d 23
klauss 0:4d17cd9c8f9d 24 #define __CALL_MAX_IDLE_TIME__ 5
klauss 69:65665afbad5d 25 ///< Define o tempo máximo sem receber dados em alguma chamada.
klauss 69:65665afbad5d 26
klauss 0:4d17cd9c8f9d 27 #define __MAX_CALL_TIME__ 180
klauss 69:65665afbad5d 28 ///< Define o tempo máximo ( em segundos ) de uma ligação.
klauss 0:4d17cd9c8f9d 29
klauss 0:4d17cd9c8f9d 30 class VZ_call : public Object{
klauss 0:4d17cd9c8f9d 31 private :
klauss 0:4d17cd9c8f9d 32 Timer t;
klauss 0:4d17cd9c8f9d 33 Timer finish;
klauss 0:4d17cd9c8f9d 34 int cb_ext;
klauss 0:4d17cd9c8f9d 35 int cb_port;
klauss 0:4d17cd9c8f9d 36 uint8_t cb2server[ 320 ];
klauss 0:4d17cd9c8f9d 37 char server2cb[ 320 ];
klauss 0:4d17cd9c8f9d 38 uint8_t buffer[ 320 ];
klauss 0:4d17cd9c8f9d 39 UDPSocket rtp_sock;
klauss 0:4d17cd9c8f9d 40 int rtp_server_ext;
klauss 0:4d17cd9c8f9d 41 int rtp_server_port;
klauss 0:4d17cd9c8f9d 42 Endpoint rtp_server;
klauss 0:4d17cd9c8f9d 43 RTP * rtp;
klauss 0:4d17cd9c8f9d 44 rtpbuf_t rtpbuf;
klauss 0:4d17cd9c8f9d 45 public :
klauss 69:65665afbad5d 46 /**
klauss 69:65665afbad5d 47 * @Synopsis Cria um objeto da Classe VZ_call.
klauss 69:65665afbad5d 48 *
klauss 69:65665afbad5d 49 * @param cb_ext O ramal do CBx que solicitou a ligação.
klauss 69:65665afbad5d 50 * @param cb_port A porta RTP do CBx que solicitou a ligação.
klauss 69:65665afbad5d 51 * @param rtp_server_ext O ramal do servidor.
klauss 69:65665afbad5d 52 * @param rtp_server_port A porta RTP do servidor.
klauss 69:65665afbad5d 53 *
klauss 69:65665afbad5d 54 * Exemplo:
klauss 69:65665afbad5d 55 * @code
klauss 69:65665afbad5d 56 * ...
klauss 69:65665afbad5d 57 * VZ_call * call = new VZ_call( 5010, 11841, 913, 12902 );
klauss 69:65665afbad5d 58 * ...
klauss 69:65665afbad5d 59 * @endcode
klauss 69:65665afbad5d 60 */
klauss 0:4d17cd9c8f9d 61 VZ_call( int cb_ext, int cb_port, int rtp_server_ext, int rtp_server_port );
klauss 69:65665afbad5d 62
klauss 69:65665afbad5d 63 /**
klauss 69:65665afbad5d 64 * @Synopsis Destroi o objeto da classe.
klauss 69:65665afbad5d 65 *
klauss 69:65665afbad5d 66 * Exemplo:
klauss 69:65665afbad5d 67 * @code
klauss 69:65665afbad5d 68 * ...
klauss 69:65665afbad5d 69 * delete( call );
klauss 69:65665afbad5d 70 * ...
klauss 69:65665afbad5d 71 * @endcode
klauss 69:65665afbad5d 72 */
klauss 0:4d17cd9c8f9d 73 ~VZ_call();
klauss 69:65665afbad5d 74
klauss 69:65665afbad5d 75 /**
klauss 69:65665afbad5d 76 * @Synopsis Obtém o ramal do CBx.
klauss 69:65665afbad5d 77 *
klauss 69:65665afbad5d 78 * @return Um inteiro que representa o ramal do CBx que solicitou a ligação.
klauss 69:65665afbad5d 79 *
klauss 69:65665afbad5d 80 * Exemplo:
klauss 69:65665afbad5d 81 * @code
klauss 69:65665afbad5d 82 * ...
klauss 69:65665afbad5d 83 * int cb_ext = call->get_cb_ext();
klauss 69:65665afbad5d 84 * ...
klauss 69:65665afbad5d 85 * @endcode
klauss 69:65665afbad5d 86 */
klauss 0:4d17cd9c8f9d 87 int get_cb_ext();
klauss 69:65665afbad5d 88
klauss 69:65665afbad5d 89 /**
klauss 69:65665afbad5d 90 * @Synopsis Obtém a porta RTP do CBx que solicitou a ligação.
klauss 69:65665afbad5d 91 *
klauss 69:65665afbad5d 92 * @return Um inteiro que representa a porta do CBx.
klauss 69:65665afbad5d 93 *
klauss 69:65665afbad5d 94 * Exemplo:
klauss 69:65665afbad5d 95 * @code
klauss 69:65665afbad5d 96 * ...
klauss 69:65665afbad5d 97 * int cb_port = call->get_cb_ext();
klauss 69:65665afbad5d 98 * ...
klauss 69:65665afbad5d 99 * @endcode
klauss 69:65665afbad5d 100 */
klauss 0:4d17cd9c8f9d 101 int get_cb_port();
klauss 69:65665afbad5d 102
klauss 69:65665afbad5d 103 /**
klauss 69:65665afbad5d 104 * @Synopsis Informa o ramal do servidor RTP.
klauss 69:65665afbad5d 105 *
klauss 69:65665afbad5d 106 * @return O numero do ramal do servidor RTP.
klauss 69:65665afbad5d 107 *
klauss 69:65665afbad5d 108 * Exemplo:
klauss 69:65665afbad5d 109 * @code
klauss 69:65665afbad5d 110 * ...
klauss 69:65665afbad5d 111 * int rtp_server_ext = call->get_rtp_server_ext();
klauss 69:65665afbad5d 112 * ...
klauss 69:65665afbad5d 113 * @endcode
klauss 69:65665afbad5d 114 */
klauss 0:4d17cd9c8f9d 115 int get_rtp_server_ext();
klauss 69:65665afbad5d 116
klauss 69:65665afbad5d 117 /**
klauss 69:65665afbad5d 118 * @Synopsis Informa o numero da porta do servidor RTP.
klauss 69:65665afbad5d 119 *
klauss 69:65665afbad5d 120 * @return O numero da porta usada na comunicação com o servidor RTP.
klauss 69:65665afbad5d 121 *
klauss 69:65665afbad5d 122 * Exemplo:
klauss 69:65665afbad5d 123 * @code
klauss 69:65665afbad5d 124 * ...
klauss 69:65665afbad5d 125 * int rtp_server_port = call->get_rtp_server_port();
klauss 69:65665afbad5d 126 * ...
klauss 69:65665afbad5d 127 * @endcode
klauss 69:65665afbad5d 128 */
klauss 0:4d17cd9c8f9d 129 int get_rtp_server_port();
klauss 69:65665afbad5d 130
klauss 69:65665afbad5d 131 /**
klauss 69:65665afbad5d 132 * @Synopsis Coleta dados de audio vindos do servidor
klauss 69:65665afbad5d 133 *
klauss 69:65665afbad5d 134 * @param length Um ponteiro para posição de memória que recebera quantos bytes foram lidos no pacote recebido.
klauss 69:65665afbad5d 135 *
klauss 69:65665afbad5d 136 * @return Um ponteiro para o pacote disponivel para processamento.
klauss 69:65665afbad5d 137 *
klauss 69:65665afbad5d 138 * Exemplo:
klauss 69:65665afbad5d 139 * @code
klauss 69:65665afbad5d 140 * ...
klauss 69:65665afbad5d 141 * int length = 0;
klauss 69:65665afbad5d 142 * char * eth_msg = call->get_eth_message( &length );
klauss 69:65665afbad5d 143 * ...
klauss 69:65665afbad5d 144 * @endcode
klauss 69:65665afbad5d 145 */
klauss 0:4d17cd9c8f9d 146 char * get_eth_message( int * length );
klauss 69:65665afbad5d 147
klauss 69:65665afbad5d 148 /**
klauss 69:65665afbad5d 149 * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do server para o CBx.
klauss 69:65665afbad5d 150 *
klauss 69:65665afbad5d 151 * @return Um ponteiro para o inicio deste buffer.
klauss 69:65665afbad5d 152 *
klauss 69:65665afbad5d 153 * Exemplo:
klauss 69:65665afbad5d 154 * @code
klauss 69:65665afbad5d 155 * ...
klauss 69:65665afbad5d 156 * char * buffer = call->get_server2cb_buffer();
klauss 69:65665afbad5d 157 * ...
klauss 69:65665afbad5d 158 * @endcode
klauss 69:65665afbad5d 159 */
klauss 0:4d17cd9c8f9d 160 char * get_server2cb_buffer();
klauss 69:65665afbad5d 161
klauss 69:65665afbad5d 162 /**
klauss 69:65665afbad5d 163 * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do CBx para o server.
klauss 69:65665afbad5d 164 *
klauss 69:65665afbad5d 165 * @return Um ponteiro para o inicio deste buffer.
klauss 69:65665afbad5d 166 *
klauss 69:65665afbad5d 167 * Exemplo:
klauss 69:65665afbad5d 168 * @code
klauss 69:65665afbad5d 169 * ...
klauss 69:65665afbad5d 170 * uint8_t * buffer = call->get_cb2server_buffer();
klauss 69:65665afbad5d 171 * ...
klauss 69:65665afbad5d 172 * @endcode
klauss 69:65665afbad5d 173 */
klauss 0:4d17cd9c8f9d 174 uint8_t * get_cb2server_buffer();
klauss 69:65665afbad5d 175
klauss 69:65665afbad5d 176 /**
klauss 69:65665afbad5d 177 * @Synopsis Retorna o buffer desta classe.
klauss 69:65665afbad5d 178 *
klauss 69:65665afbad5d 179 * @return Um ponteiro para o primeiro elemento do buffer desta classe.
klauss 69:65665afbad5d 180 *
klauss 69:65665afbad5d 181 * Exemplo:
klauss 69:65665afbad5d 182 * @code
klauss 69:65665afbad5d 183 * ...
klauss 69:65665afbad5d 184 * uint8_t * buffer = call->get_buffer();
klauss 69:65665afbad5d 185 * ...
klauss 69:65665afbad5d 186 * @endcode
klauss 69:65665afbad5d 187 */
klauss 0:4d17cd9c8f9d 188 uint8_t * get_buffer();
klauss 0:4d17cd9c8f9d 189
klauss 69:65665afbad5d 190 /**
klauss 69:65665afbad5d 191 * @Synopsis Deveria encapsular o buffer da classe e montar um pacote formatado para envio aos CBx. Porém, fora de uso.
klauss 69:65665afbad5d 192 *
klauss 69:65665afbad5d 193 * @return Um ponteiro para o inicio do pacote montado no protocolo VZ.
klauss 69:65665afbad5d 194 *
klauss 69:65665afbad5d 195 * \note Função não implementada.
klauss 69:65665afbad5d 196 *
klauss 69:65665afbad5d 197 * Exemplo:
klauss 69:65665afbad5d 198 * @code
klauss 69:65665afbad5d 199 * ...
klauss 69:65665afbad5d 200 * uint8_t * cb_package = call->build_cb_package();
klauss 69:65665afbad5d 201 * ...
klauss 69:65665afbad5d 202 * @endcode
klauss 69:65665afbad5d 203 */
klauss 0:4d17cd9c8f9d 204 uint8_t * build_cb_package( void );
klauss 69:65665afbad5d 205
klauss 69:65665afbad5d 206 /**
klauss 69:65665afbad5d 207 * @Synopsis Responsavel por efetivamente montar o pacote que será enviado via rede.
klauss 69:65665afbad5d 208 *
klauss 69:65665afbad5d 209 * @param buffer Um ponteiro para o inicio dos dados recebidos do CBx que será encapsulado.
klauss 69:65665afbad5d 210 *
klauss 69:65665afbad5d 211 * @return Um ponteiro para o inicio do pacote pronto para o envio.
klauss 69:65665afbad5d 212 *
klauss 69:65665afbad5d 213 * Exemplo:
klauss 69:65665afbad5d 214 * @code
klauss 69:65665afbad5d 215 * ...
klauss 69:65665afbad5d 216 * char str_to_server[ 1024 ];
klauss 69:65665afbad5d 217 * // assumindo que em data_from_cb consta armazenados os dados vindos dos Call_Box
klauss 69:65665afbad5d 218 * strcpy( str_to_server, build_eth_package( data_from_cb ) );
klauss 69:65665afbad5d 219 * ...
klauss 69:65665afbad5d 220 * @endcode
klauss 69:65665afbad5d 221 */
klauss 0:4d17cd9c8f9d 222 char * build_eth_package( uint8_t * );
klauss 69:65665afbad5d 223
klauss 69:65665afbad5d 224 /**
klauss 69:65665afbad5d 225 * @Synopsis Responsavel por enviar efetivamente os dados via eth
klauss 69:65665afbad5d 226 *
klauss 69:65665afbad5d 227 * @param buffer Um ponteiro para o inicio dos dados que serão enviados.
klauss 69:65665afbad5d 228 *
klauss 69:65665afbad5d 229 * @return O numero de bytes efetivamente enviados.
klauss 69:65665afbad5d 230 *
klauss 69:65665afbad5d 231 * Exemplo:
klauss 69:65665afbad5d 232 * @code
klauss 69:65665afbad5d 233 * ...
klauss 69:65665afbad5d 234 * char * pkg = call->build_eth_package( data_from_cb );
klauss 69:65665afbad5d 235 * //assumindo que os dados vindos do Call_Box estão armazenados em data_from_cb
klauss 69:65665afbad5d 236 * int sent = call->send_message( pkg );
klauss 69:65665afbad5d 237 * ...
klauss 69:65665afbad5d 238 * @endcode
klauss 69:65665afbad5d 239 */
klauss 0:4d17cd9c8f9d 240 int send_message( char * );
klauss 69:65665afbad5d 241
klauss 69:65665afbad5d 242 /**
klauss 69:65665afbad5d 243 * @Synopsis Verifica se esta ligação não esta ultrapassando o tempo permitido.
klauss 69:65665afbad5d 244 *
klauss 69:65665afbad5d 245 * @retval True - se o tempo sem trocar dados nesta ligação for maior que __CALL_MAX_IDLE_TIME__.
klauss 69:65665afbad5d 246 * @retval False - Caso duração de ligação ainda dentro do tempo esperado.
klauss 69:65665afbad5d 247 *
klauss 69:65665afbad5d 248 * Exemplo:
klauss 69:65665afbad5d 249 * @code
klauss 69:65665afbad5d 250 * ...
klauss 69:65665afbad5d 251 * printf( "Call não esta recendo dados a mais tempo do que deveria ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" );
klauss 69:65665afbad5d 252 * ...
klauss 69:65665afbad5d 253 * @endcode
klauss 69:65665afbad5d 254 */
klauss 0:4d17cd9c8f9d 255 bool is_timeout( void );
klauss 69:65665afbad5d 256
klauss 69:65665afbad5d 257 /**
klauss 69:65665afbad5d 258 * @Synopsis Verifica se o tempo de ligação é menor que o tempo máximo permitido.
klauss 69:65665afbad5d 259 *
klauss 69:65665afbad5d 260 * @retval True - Caso o tempo da ligação tenha passado do limite definido em __MAX_CALL_TIME__.
klauss 69:65665afbad5d 261 * @retval False - caso em que o tempo da ligação atual for menor que o máximo permitido..
klauss 69:65665afbad5d 262 *
klauss 69:65665afbad5d 263 * Exemplo:
klauss 69:65665afbad5d 264 * @code
klauss 69:65665afbad5d 265 * ...
klauss 69:65665afbad5d 266 * printf( "Call já deveria ter acabado ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" );
klauss 69:65665afbad5d 267 * ...
klauss 69:65665afbad5d 268 * @endcode
klauss 69:65665afbad5d 269 */
klauss 0:4d17cd9c8f9d 270 bool is_timetofinish( void );
klauss 0:4d17cd9c8f9d 271 };
klauss 0:4d17cd9c8f9d 272 #endif