![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
Modularizando o src
Dependencies: EALib EthernetInterface_vz mbed-rtos mbed
Fork of header_main_colinas_V0-20-09-14 by
call.h@104:62646ef786a3, 2015-02-25 (annotated)
- Committer:
- klauss
- Date:
- Wed Feb 25 18:44:11 2015 +0000
- Revision:
- 104:62646ef786a3
- Parent:
- 92:92df17f538a8
- Child:
- 105:a930035b6556
- Remo??o do implementado para bootloader cbx.; - Remo??o do implementado para telemetria.; - Remo??o do implementado ( comentado ) em file_system_manager.cpp; - BUGFIX perda de conex?o serial quando recebido um comando via eth;
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:4d17cd9c8f9d | 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 | 0:4d17cd9c8f9d | 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 | 92:92df17f538a8 | 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 | 69:65665afbad5d | 48 | /** |
klauss | 69:65665afbad5d | 49 | * @Synopsis Cria um objeto da Classe VZ_call. |
klauss | 69:65665afbad5d | 50 | * |
klauss | 69:65665afbad5d | 51 | * @param cb_ext O ramal do CBx que solicitou a ligação. |
klauss | 69:65665afbad5d | 52 | * @param cb_port A porta RTP do CBx que solicitou a ligação. |
klauss | 69:65665afbad5d | 53 | * @param rtp_server_ext O ramal do servidor. |
klauss | 69:65665afbad5d | 54 | * @param rtp_server_port A porta RTP do servidor. |
klauss | 69:65665afbad5d | 55 | * |
klauss | 69:65665afbad5d | 56 | * Exemplo: |
klauss | 69:65665afbad5d | 57 | * @code |
klauss | 69:65665afbad5d | 58 | * ... |
klauss | 69:65665afbad5d | 59 | * VZ_call * call = new VZ_call( 5010, 11841, 913, 12902 ); |
klauss | 69:65665afbad5d | 60 | * ... |
klauss | 69:65665afbad5d | 61 | * @endcode |
klauss | 69:65665afbad5d | 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 | 69:65665afbad5d | 65 | /** |
klauss | 69:65665afbad5d | 66 | * @Synopsis Destroi o objeto da classe. |
klauss | 69:65665afbad5d | 67 | * |
klauss | 69:65665afbad5d | 68 | * Exemplo: |
klauss | 69:65665afbad5d | 69 | * @code |
klauss | 69:65665afbad5d | 70 | * ... |
klauss | 69:65665afbad5d | 71 | * delete( call ); |
klauss | 69:65665afbad5d | 72 | * ... |
klauss | 69:65665afbad5d | 73 | * @endcode |
klauss | 69:65665afbad5d | 74 | */ |
klauss | 0:4d17cd9c8f9d | 75 | ~VZ_call(); |
klauss | 69:65665afbad5d | 76 | |
klauss | 69:65665afbad5d | 77 | /** |
klauss | 69:65665afbad5d | 78 | * @Synopsis Obtém o ramal do CBx. |
klauss | 69:65665afbad5d | 79 | * |
klauss | 69:65665afbad5d | 80 | * @return Um inteiro que representa o ramal do CBx que solicitou a ligação. |
klauss | 69:65665afbad5d | 81 | * |
klauss | 69:65665afbad5d | 82 | * Exemplo: |
klauss | 69:65665afbad5d | 83 | * @code |
klauss | 69:65665afbad5d | 84 | * ... |
klauss | 69:65665afbad5d | 85 | * int cb_ext = call->get_cb_ext(); |
klauss | 69:65665afbad5d | 86 | * ... |
klauss | 69:65665afbad5d | 87 | * @endcode |
klauss | 69:65665afbad5d | 88 | */ |
klauss | 0:4d17cd9c8f9d | 89 | int get_cb_ext(); |
klauss | 69:65665afbad5d | 90 | |
klauss | 69:65665afbad5d | 91 | /** |
klauss | 69:65665afbad5d | 92 | * @Synopsis Obtém a porta RTP do CBx que solicitou a ligação. |
klauss | 69:65665afbad5d | 93 | * |
klauss | 69:65665afbad5d | 94 | * @return Um inteiro que representa a porta do CBx. |
klauss | 69:65665afbad5d | 95 | * |
klauss | 69:65665afbad5d | 96 | * Exemplo: |
klauss | 69:65665afbad5d | 97 | * @code |
klauss | 69:65665afbad5d | 98 | * ... |
klauss | 69:65665afbad5d | 99 | * int cb_port = call->get_cb_ext(); |
klauss | 69:65665afbad5d | 100 | * ... |
klauss | 69:65665afbad5d | 101 | * @endcode |
klauss | 69:65665afbad5d | 102 | */ |
klauss | 0:4d17cd9c8f9d | 103 | int get_cb_port(); |
klauss | 69:65665afbad5d | 104 | |
klauss | 69:65665afbad5d | 105 | /** |
klauss | 69:65665afbad5d | 106 | * @Synopsis Informa o ramal do servidor RTP. |
klauss | 69:65665afbad5d | 107 | * |
klauss | 69:65665afbad5d | 108 | * @return O numero do ramal do servidor RTP. |
klauss | 69:65665afbad5d | 109 | * |
klauss | 69:65665afbad5d | 110 | * Exemplo: |
klauss | 69:65665afbad5d | 111 | * @code |
klauss | 69:65665afbad5d | 112 | * ... |
klauss | 69:65665afbad5d | 113 | * int rtp_server_ext = call->get_rtp_server_ext(); |
klauss | 69:65665afbad5d | 114 | * ... |
klauss | 69:65665afbad5d | 115 | * @endcode |
klauss | 69:65665afbad5d | 116 | */ |
klauss | 0:4d17cd9c8f9d | 117 | int get_rtp_server_ext(); |
klauss | 69:65665afbad5d | 118 | |
klauss | 69:65665afbad5d | 119 | /** |
klauss | 69:65665afbad5d | 120 | * @Synopsis Informa o numero da porta do servidor RTP. |
klauss | 69:65665afbad5d | 121 | * |
klauss | 69:65665afbad5d | 122 | * @return O numero da porta usada na comunicação com o servidor RTP. |
klauss | 69:65665afbad5d | 123 | * |
klauss | 69:65665afbad5d | 124 | * Exemplo: |
klauss | 69:65665afbad5d | 125 | * @code |
klauss | 69:65665afbad5d | 126 | * ... |
klauss | 69:65665afbad5d | 127 | * int rtp_server_port = call->get_rtp_server_port(); |
klauss | 69:65665afbad5d | 128 | * ... |
klauss | 69:65665afbad5d | 129 | * @endcode |
klauss | 69:65665afbad5d | 130 | */ |
klauss | 0:4d17cd9c8f9d | 131 | int get_rtp_server_port(); |
klauss | 69:65665afbad5d | 132 | |
klauss | 69:65665afbad5d | 133 | /** |
klauss | 69:65665afbad5d | 134 | * @Synopsis Coleta dados de audio vindos do servidor |
klauss | 69:65665afbad5d | 135 | * |
klauss | 69:65665afbad5d | 136 | * @param length Um ponteiro para posição de memória que recebera quantos bytes foram lidos no pacote recebido. |
klauss | 69:65665afbad5d | 137 | * |
klauss | 69:65665afbad5d | 138 | * @return Um ponteiro para o pacote disponivel para processamento. |
klauss | 69:65665afbad5d | 139 | * |
klauss | 69:65665afbad5d | 140 | * Exemplo: |
klauss | 69:65665afbad5d | 141 | * @code |
klauss | 69:65665afbad5d | 142 | * ... |
klauss | 69:65665afbad5d | 143 | * int length = 0; |
klauss | 69:65665afbad5d | 144 | * char * eth_msg = call->get_eth_message( &length ); |
klauss | 69:65665afbad5d | 145 | * ... |
klauss | 69:65665afbad5d | 146 | * @endcode |
klauss | 69:65665afbad5d | 147 | */ |
klauss | 0:4d17cd9c8f9d | 148 | char * get_eth_message( int * length ); |
klauss | 69:65665afbad5d | 149 | |
klauss | 69:65665afbad5d | 150 | /** |
klauss | 69:65665afbad5d | 151 | * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do server para o CBx. |
klauss | 69:65665afbad5d | 152 | * |
klauss | 69:65665afbad5d | 153 | * @return Um ponteiro para o inicio deste buffer. |
klauss | 69:65665afbad5d | 154 | * |
klauss | 69:65665afbad5d | 155 | * Exemplo: |
klauss | 69:65665afbad5d | 156 | * @code |
klauss | 69:65665afbad5d | 157 | * ... |
klauss | 69:65665afbad5d | 158 | * char * buffer = call->get_server2cb_buffer(); |
klauss | 69:65665afbad5d | 159 | * ... |
klauss | 69:65665afbad5d | 160 | * @endcode |
klauss | 69:65665afbad5d | 161 | */ |
klauss | 0:4d17cd9c8f9d | 162 | char * get_server2cb_buffer(); |
klauss | 69:65665afbad5d | 163 | |
klauss | 69:65665afbad5d | 164 | /** |
klauss | 69:65665afbad5d | 165 | * @Synopsis Retorna uma referência para o buffer da classe, responsavel por armazenar os dados do CBx para o server. |
klauss | 69:65665afbad5d | 166 | * |
klauss | 69:65665afbad5d | 167 | * @return Um ponteiro para o inicio deste buffer. |
klauss | 69:65665afbad5d | 168 | * |
klauss | 69:65665afbad5d | 169 | * Exemplo: |
klauss | 69:65665afbad5d | 170 | * @code |
klauss | 69:65665afbad5d | 171 | * ... |
klauss | 69:65665afbad5d | 172 | * uint8_t * buffer = call->get_cb2server_buffer(); |
klauss | 69:65665afbad5d | 173 | * ... |
klauss | 69:65665afbad5d | 174 | * @endcode |
klauss | 69:65665afbad5d | 175 | */ |
klauss | 0:4d17cd9c8f9d | 176 | uint8_t * get_cb2server_buffer(); |
klauss | 69:65665afbad5d | 177 | |
klauss | 69:65665afbad5d | 178 | /** |
klauss | 69:65665afbad5d | 179 | * @Synopsis Retorna o buffer desta classe. |
klauss | 69:65665afbad5d | 180 | * |
klauss | 69:65665afbad5d | 181 | * @return Um ponteiro para o primeiro elemento do buffer desta classe. |
klauss | 69:65665afbad5d | 182 | * |
klauss | 69:65665afbad5d | 183 | * Exemplo: |
klauss | 69:65665afbad5d | 184 | * @code |
klauss | 69:65665afbad5d | 185 | * ... |
klauss | 69:65665afbad5d | 186 | * uint8_t * buffer = call->get_buffer(); |
klauss | 69:65665afbad5d | 187 | * ... |
klauss | 69:65665afbad5d | 188 | * @endcode |
klauss | 69:65665afbad5d | 189 | */ |
klauss | 0:4d17cd9c8f9d | 190 | uint8_t * get_buffer(); |
klauss | 0:4d17cd9c8f9d | 191 | |
klauss | 69:65665afbad5d | 192 | /** |
klauss | 69:65665afbad5d | 193 | * @Synopsis Deveria encapsular o buffer da classe e montar um pacote formatado para envio aos CBx. Porém, fora de uso. |
klauss | 69:65665afbad5d | 194 | * |
klauss | 69:65665afbad5d | 195 | * @return Um ponteiro para o inicio do pacote montado no protocolo VZ. |
klauss | 69:65665afbad5d | 196 | * |
klauss | 69:65665afbad5d | 197 | * \note Função não implementada. |
klauss | 69:65665afbad5d | 198 | * |
klauss | 69:65665afbad5d | 199 | * Exemplo: |
klauss | 69:65665afbad5d | 200 | * @code |
klauss | 69:65665afbad5d | 201 | * ... |
klauss | 69:65665afbad5d | 202 | * uint8_t * cb_package = call->build_cb_package(); |
klauss | 69:65665afbad5d | 203 | * ... |
klauss | 69:65665afbad5d | 204 | * @endcode |
klauss | 69:65665afbad5d | 205 | */ |
klauss | 0:4d17cd9c8f9d | 206 | uint8_t * build_cb_package( void ); |
klauss | 69:65665afbad5d | 207 | |
klauss | 69:65665afbad5d | 208 | /** |
klauss | 69:65665afbad5d | 209 | * @Synopsis Responsavel por efetivamente montar o pacote que será enviado via rede. |
klauss | 69:65665afbad5d | 210 | * |
klauss | 69:65665afbad5d | 211 | * @param buffer Um ponteiro para o inicio dos dados recebidos do CBx que será encapsulado. |
klauss | 69:65665afbad5d | 212 | * |
klauss | 69:65665afbad5d | 213 | * @return Um ponteiro para o inicio do pacote pronto para o envio. |
klauss | 69:65665afbad5d | 214 | * |
klauss | 69:65665afbad5d | 215 | * Exemplo: |
klauss | 69:65665afbad5d | 216 | * @code |
klauss | 69:65665afbad5d | 217 | * ... |
klauss | 69:65665afbad5d | 218 | * char str_to_server[ 1024 ]; |
klauss | 69:65665afbad5d | 219 | * // assumindo que em data_from_cb consta armazenados os dados vindos dos Call_Box |
klauss | 69:65665afbad5d | 220 | * strcpy( str_to_server, build_eth_package( data_from_cb ) ); |
klauss | 69:65665afbad5d | 221 | * ... |
klauss | 69:65665afbad5d | 222 | * @endcode |
klauss | 69:65665afbad5d | 223 | */ |
klauss | 0:4d17cd9c8f9d | 224 | char * build_eth_package( uint8_t * ); |
klauss | 69:65665afbad5d | 225 | |
klauss | 69:65665afbad5d | 226 | /** |
klauss | 69:65665afbad5d | 227 | * @Synopsis Responsavel por enviar efetivamente os dados via eth |
klauss | 69:65665afbad5d | 228 | * |
klauss | 69:65665afbad5d | 229 | * @param buffer Um ponteiro para o inicio dos dados que serão enviados. |
klauss | 69:65665afbad5d | 230 | * |
klauss | 69:65665afbad5d | 231 | * @return O numero de bytes efetivamente enviados. |
klauss | 69:65665afbad5d | 232 | * |
klauss | 69:65665afbad5d | 233 | * Exemplo: |
klauss | 69:65665afbad5d | 234 | * @code |
klauss | 69:65665afbad5d | 235 | * ... |
klauss | 69:65665afbad5d | 236 | * char * pkg = call->build_eth_package( data_from_cb ); |
klauss | 69:65665afbad5d | 237 | * //assumindo que os dados vindos do Call_Box estão armazenados em data_from_cb |
klauss | 69:65665afbad5d | 238 | * int sent = call->send_message( pkg ); |
klauss | 69:65665afbad5d | 239 | * ... |
klauss | 69:65665afbad5d | 240 | * @endcode |
klauss | 69:65665afbad5d | 241 | */ |
klauss | 0:4d17cd9c8f9d | 242 | int send_message( char * ); |
klauss | 69:65665afbad5d | 243 | |
klauss | 69:65665afbad5d | 244 | /** |
klauss | 69:65665afbad5d | 245 | * @Synopsis Verifica se esta ligação não esta ultrapassando o tempo permitido. |
klauss | 69:65665afbad5d | 246 | * |
klauss | 69:65665afbad5d | 247 | * @retval True - se o tempo sem trocar dados nesta ligação for maior que __CALL_MAX_IDLE_TIME__. |
klauss | 69:65665afbad5d | 248 | * @retval False - Caso duração de ligação ainda dentro do tempo esperado. |
klauss | 69:65665afbad5d | 249 | * |
klauss | 69:65665afbad5d | 250 | * Exemplo: |
klauss | 69:65665afbad5d | 251 | * @code |
klauss | 69:65665afbad5d | 252 | * ... |
klauss | 69:65665afbad5d | 253 | * 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 | 254 | * ... |
klauss | 69:65665afbad5d | 255 | * @endcode |
klauss | 69:65665afbad5d | 256 | */ |
klauss | 0:4d17cd9c8f9d | 257 | bool is_timeout( void ); |
klauss | 69:65665afbad5d | 258 | |
klauss | 69:65665afbad5d | 259 | /** |
klauss | 69:65665afbad5d | 260 | * @Synopsis Verifica se o tempo de ligação é menor que o tempo máximo permitido. |
klauss | 69:65665afbad5d | 261 | * |
klauss | 69:65665afbad5d | 262 | * @retval True - Caso o tempo da ligação tenha passado do limite definido em __MAX_CALL_TIME__. |
klauss | 69:65665afbad5d | 263 | * @retval False - caso em que o tempo da ligação atual for menor que o máximo permitido.. |
klauss | 69:65665afbad5d | 264 | * |
klauss | 69:65665afbad5d | 265 | * Exemplo: |
klauss | 69:65665afbad5d | 266 | * @code |
klauss | 69:65665afbad5d | 267 | * ... |
klauss | 69:65665afbad5d | 268 | * printf( "Call já deveria ter acabado ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" ); |
klauss | 69:65665afbad5d | 269 | * ... |
klauss | 69:65665afbad5d | 270 | * @endcode |
klauss | 69:65665afbad5d | 271 | */ |
klauss | 0:4d17cd9c8f9d | 272 | bool is_timetofinish( void ); |
klauss | 92:92df17f538a8 | 273 | |
klauss | 92:92df17f538a8 | 274 | void cbx_pkg_idle_timer_reset( void ); |
klauss | 92:92df17f538a8 | 275 | bool cbx_pkg_is_idle( void ); |
klauss | 92:92df17f538a8 | 276 | void init_cbx_pkg_idle_timer( void ); |
klauss | 92:92df17f538a8 | 277 | int get_elapsed_time( void ); |
klauss | 104:62646ef786a3 | 278 | void reconnect( void ); |
klauss | 0:4d17cd9c8f9d | 279 | }; |
klauss | 0:4d17cd9c8f9d | 280 | #endif |