Modularizando o src

Dependencies:   EALib EthernetInterface_vz mbed-rtos mbed

Fork of header_main_colinas_V0-20-09-14 by VZTECH

Committer:
klauss
Date:
Thu Apr 23 21:53:28 2015 +0000
Revision:
117:e9facba9db27
Parent:
116:39a41ebb675c
Child:
119:ee6a53069455
merge dos fw contendo as funcionalidade de bootloader e o fw que estava em campo na ultima vistoria

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