![](/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@137:32dd35a6dbc9, 2015-11-24 (annotated)
- Committer:
- klauss
- Date:
- Tue Nov 24 14:06:22 2015 +0000
- Revision:
- 137:32dd35a6dbc9
- Parent:
- 135:2f4290590e51
core source of the .bin (09/21/2015) in the field
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 | 121:ee02790d00b7 | 9 | |
klauss | 0:4d17cd9c8f9d | 10 | #ifndef __CALL_H__ |
klauss | 0:4d17cd9c8f9d | 11 | #define __CALL_H__ |
klauss | 0:4d17cd9c8f9d | 12 | |
klauss | 121:ee02790d00b7 | 13 | #include "shared_variables.h" |
klauss | 0:4d17cd9c8f9d | 14 | #include "object.h" |
klauss | 74:81c47fff88a5 | 15 | #include "rtp.h" |
klauss | 121:ee02790d00b7 | 16 | #include "debug.h" |
klauss | 74:81c47fff88a5 | 17 | #include "rtpbuf.h" |
klauss | 132:05cd37f7e007 | 18 | %: include "config_manager.h" |
klauss | 0:4d17cd9c8f9d | 19 | |
klauss | 119:ee6a53069455 | 20 | const uint8_t __CALL_MAX_IDLE_TIME__ = 5; |
klauss | 69:65665afbad5d | 21 | ///< Define o tempo máximo sem receber dados em alguma chamada. |
klauss | 69:65665afbad5d | 22 | |
klauss | 119:ee6a53069455 | 23 | const uint8_t __MAX_CALL_TIME__ = 180; |
klauss | 69:65665afbad5d | 24 | ///< Define o tempo máximo ( em segundos ) de uma ligação. |
klauss | 0:4d17cd9c8f9d | 25 | |
klauss | 119:ee6a53069455 | 26 | const uint8_t CBX_PKG_IDLE_MAX_TIME = 10; |
klauss | 92:92df17f538a8 | 27 | |
klauss | 0:4d17cd9c8f9d | 28 | class VZ_call : public Object{ |
klauss | 0:4d17cd9c8f9d | 29 | private : |
klauss | 0:4d17cd9c8f9d | 30 | Timer t; |
klauss | 0:4d17cd9c8f9d | 31 | Timer finish; |
klauss | 92:92df17f538a8 | 32 | Timer cbx_pkg_idle_timer; |
klauss | 0:4d17cd9c8f9d | 33 | int cb_ext; |
klauss | 0:4d17cd9c8f9d | 34 | int cb_port; |
klauss | 0:4d17cd9c8f9d | 35 | uint8_t cb2server[ 320 ]; |
klauss | 0:4d17cd9c8f9d | 36 | char server2cb[ 320 ]; |
klauss | 0:4d17cd9c8f9d | 37 | uint8_t buffer[ 320 ]; |
klauss | 0:4d17cd9c8f9d | 38 | UDPSocket rtp_sock; |
klauss | 0:4d17cd9c8f9d | 39 | int rtp_server_ext; |
klauss | 0:4d17cd9c8f9d | 40 | int rtp_server_port; |
klauss | 0:4d17cd9c8f9d | 41 | Endpoint rtp_server; |
klauss | 0:4d17cd9c8f9d | 42 | RTP * rtp; |
klauss | 0:4d17cd9c8f9d | 43 | rtpbuf_t rtpbuf; |
klauss | 0:4d17cd9c8f9d | 44 | public : |
klauss | 119:ee6a53069455 | 45 | /** |
klauss | 119:ee6a53069455 | 46 | * @Synopsis Cria um objeto da Classe VZ_call. |
klauss | 119:ee6a53069455 | 47 | * |
klauss | 119:ee6a53069455 | 48 | * @param cb_ext O ramal do CBx que solicitou a ligação. |
klauss | 119:ee6a53069455 | 49 | * @param cb_port A porta RTP do CBx que solicitou a ligação. |
klauss | 119:ee6a53069455 | 50 | * @param rtp_server_ext O ramal do servidor. |
klauss | 119:ee6a53069455 | 51 | * @param rtp_server_port A porta RTP do servidor. |
klauss | 119:ee6a53069455 | 52 | * |
klauss | 119:ee6a53069455 | 53 | * Exemplo: |
klauss | 119:ee6a53069455 | 54 | * @code |
klauss | 119:ee6a53069455 | 55 | * ... |
klauss | 119:ee6a53069455 | 56 | * VZ_call * call = new VZ_call( 5010, 11841, 913, 12902 ); |
klauss | 119:ee6a53069455 | 57 | * ... |
klauss | 119:ee6a53069455 | 58 | * @endcode |
klauss | 119:ee6a53069455 | 59 | */ |
klauss | 0:4d17cd9c8f9d | 60 | VZ_call( int cb_ext, int cb_port, int rtp_server_ext, int rtp_server_port ); |
klauss | 69:65665afbad5d | 61 | |
klauss | 119:ee6a53069455 | 62 | /** |
klauss | 119:ee6a53069455 | 63 | * @Synopsis Destroi o objeto da classe. |
klauss | 119:ee6a53069455 | 64 | * |
klauss | 119:ee6a53069455 | 65 | * Exemplo: |
klauss | 119:ee6a53069455 | 66 | * @code |
klauss | 119:ee6a53069455 | 67 | * ... |
klauss | 119:ee6a53069455 | 68 | * delete( call ); |
klauss | 119:ee6a53069455 | 69 | * ... |
klauss | 119:ee6a53069455 | 70 | * @endcode |
klauss | 119:ee6a53069455 | 71 | */ |
klauss | 0:4d17cd9c8f9d | 72 | ~VZ_call(); |
klauss | 69:65665afbad5d | 73 | |
klauss | 119:ee6a53069455 | 74 | /** |
klauss | 119:ee6a53069455 | 75 | * @Synopsis Obtém o ramal do CBx. |
klauss | 119:ee6a53069455 | 76 | * |
klauss | 119:ee6a53069455 | 77 | * @return Um inteiro que representa o ramal do CBx que solicitou a ligação. |
klauss | 119:ee6a53069455 | 78 | * |
klauss | 119:ee6a53069455 | 79 | * Exemplo: |
klauss | 119:ee6a53069455 | 80 | * @code |
klauss | 119:ee6a53069455 | 81 | * ... |
klauss | 119:ee6a53069455 | 82 | * int cb_ext = call->get_cb_ext(); |
klauss | 119:ee6a53069455 | 83 | * ... |
klauss | 119:ee6a53069455 | 84 | * @endcode |
klauss | 119:ee6a53069455 | 85 | */ |
klauss | 0:4d17cd9c8f9d | 86 | int get_cb_ext(); |
klauss | 69:65665afbad5d | 87 | |
klauss | 119:ee6a53069455 | 88 | /** |
klauss | 119:ee6a53069455 | 89 | * @Synopsis Obtém a porta RTP do CBx que solicitou a ligação. |
klauss | 119:ee6a53069455 | 90 | * |
klauss | 119:ee6a53069455 | 91 | * @return Um inteiro que representa a porta do CBx. |
klauss | 119:ee6a53069455 | 92 | * |
klauss | 119:ee6a53069455 | 93 | * Exemplo: |
klauss | 119:ee6a53069455 | 94 | * @code |
klauss | 119:ee6a53069455 | 95 | * ... |
klauss | 119:ee6a53069455 | 96 | * int cb_port = call->get_cb_ext(); |
klauss | 119:ee6a53069455 | 97 | * ... |
klauss | 119:ee6a53069455 | 98 | * @endcode |
klauss | 119:ee6a53069455 | 99 | */ |
klauss | 0:4d17cd9c8f9d | 100 | int get_cb_port(); |
klauss | 69:65665afbad5d | 101 | |
klauss | 119:ee6a53069455 | 102 | /** |
klauss | 119:ee6a53069455 | 103 | * @Synopsis Informa o ramal do servidor RTP. |
klauss | 119:ee6a53069455 | 104 | * |
klauss | 119:ee6a53069455 | 105 | * @return O numero do ramal do servidor RTP. |
klauss | 119:ee6a53069455 | 106 | * |
klauss | 119:ee6a53069455 | 107 | * Exemplo: |
klauss | 119:ee6a53069455 | 108 | * @code |
klauss | 119:ee6a53069455 | 109 | * ... |
klauss | 119:ee6a53069455 | 110 | * int rtp_server_ext = call->get_rtp_server_ext(); |
klauss | 119:ee6a53069455 | 111 | * ... |
klauss | 119:ee6a53069455 | 112 | * @endcode |
klauss | 119:ee6a53069455 | 113 | */ |
klauss | 0:4d17cd9c8f9d | 114 | int get_rtp_server_ext(); |
klauss | 69:65665afbad5d | 115 | |
klauss | 119:ee6a53069455 | 116 | /** |
klauss | 119:ee6a53069455 | 117 | * @Synopsis Informa o numero da porta do servidor RTP. |
klauss | 119:ee6a53069455 | 118 | * |
klauss | 119:ee6a53069455 | 119 | * @return O numero da porta usada na comunicação com o servidor RTP. |
klauss | 119:ee6a53069455 | 120 | * |
klauss | 119:ee6a53069455 | 121 | * Exemplo: |
klauss | 119:ee6a53069455 | 122 | * @code |
klauss | 119:ee6a53069455 | 123 | * ... |
klauss | 119:ee6a53069455 | 124 | * int rtp_server_port = call->get_rtp_server_port(); |
klauss | 119:ee6a53069455 | 125 | * ... |
klauss | 119:ee6a53069455 | 126 | * @endcode |
klauss | 119:ee6a53069455 | 127 | */ |
klauss | 0:4d17cd9c8f9d | 128 | int get_rtp_server_port(); |
klauss | 69:65665afbad5d | 129 | |
klauss | 119:ee6a53069455 | 130 | /** |
klauss | 119:ee6a53069455 | 131 | * @Synopsis Coleta dados de audio vindos do servidor |
klauss | 119:ee6a53069455 | 132 | * |
klauss | 119:ee6a53069455 | 133 | * @param length Um ponteiro para posição de memória que recebera quantos bytes foram lidos no pacote recebido. |
klauss | 119:ee6a53069455 | 134 | * |
klauss | 119:ee6a53069455 | 135 | * @return Um ponteiro para o pacote disponivel para processamento. |
klauss | 119:ee6a53069455 | 136 | * |
klauss | 119:ee6a53069455 | 137 | * Exemplo: |
klauss | 119:ee6a53069455 | 138 | * @code |
klauss | 119:ee6a53069455 | 139 | * ... |
klauss | 119:ee6a53069455 | 140 | * int length = 0; |
klauss | 119:ee6a53069455 | 141 | * char * eth_msg = call->get_eth_message( &length ); |
klauss | 119:ee6a53069455 | 142 | * ... |
klauss | 119:ee6a53069455 | 143 | * @endcode |
klauss | 119:ee6a53069455 | 144 | */ |
klauss | 0:4d17cd9c8f9d | 145 | char * get_eth_message( int * length ); |
klauss | 0:4d17cd9c8f9d | 146 | |
klauss | 119:ee6a53069455 | 147 | /** |
klauss | 119:ee6a53069455 | 148 | * @Synopsis Responsavel por efetivamente montar o pacote que será enviado via rede. |
klauss | 119:ee6a53069455 | 149 | * |
klauss | 119:ee6a53069455 | 150 | * @param buffer Um ponteiro para o inicio dos dados recebidos do CBx que será encapsulado. |
klauss | 119:ee6a53069455 | 151 | * |
klauss | 119:ee6a53069455 | 152 | * @return Um ponteiro para o inicio do pacote pronto para o envio. |
klauss | 119:ee6a53069455 | 153 | * |
klauss | 119:ee6a53069455 | 154 | * Exemplo: |
klauss | 119:ee6a53069455 | 155 | * @code |
klauss | 119:ee6a53069455 | 156 | * ... |
klauss | 119:ee6a53069455 | 157 | * char str_to_server[ 1024 ]; |
klauss | 119:ee6a53069455 | 158 | * // assumindo que em data_from_cb consta armazenados os dados vindos dos Call_Box |
klauss | 119:ee6a53069455 | 159 | * strcpy( str_to_server, build_eth_package( data_from_cb ) ); |
klauss | 119:ee6a53069455 | 160 | * ... |
klauss | 119:ee6a53069455 | 161 | * @endcode |
klauss | 119:ee6a53069455 | 162 | */ |
klauss | 0:4d17cd9c8f9d | 163 | char * build_eth_package( uint8_t * ); |
klauss | 69:65665afbad5d | 164 | |
klauss | 119:ee6a53069455 | 165 | /** |
klauss | 119:ee6a53069455 | 166 | * @Synopsis Responsavel por enviar efetivamente os dados via eth |
klauss | 119:ee6a53069455 | 167 | * |
klauss | 119:ee6a53069455 | 168 | * @param buffer Um ponteiro para o inicio dos dados que serão enviados. |
klauss | 119:ee6a53069455 | 169 | * |
klauss | 119:ee6a53069455 | 170 | * @return O numero de bytes efetivamente enviados. |
klauss | 119:ee6a53069455 | 171 | * |
klauss | 119:ee6a53069455 | 172 | * Exemplo: |
klauss | 119:ee6a53069455 | 173 | * @code |
klauss | 119:ee6a53069455 | 174 | * ... |
klauss | 119:ee6a53069455 | 175 | * char * pkg = call->build_eth_package( data_from_cb ); |
klauss | 119:ee6a53069455 | 176 | * //assumindo que os dados vindos do Call_Box estão armazenados em data_from_cb |
klauss | 119:ee6a53069455 | 177 | * int sent = call->send_message( pkg ); |
klauss | 119:ee6a53069455 | 178 | * ... |
klauss | 119:ee6a53069455 | 179 | * @endcode |
klauss | 119:ee6a53069455 | 180 | */ |
klauss | 0:4d17cd9c8f9d | 181 | int send_message( char * ); |
klauss | 69:65665afbad5d | 182 | |
klauss | 119:ee6a53069455 | 183 | /** |
klauss | 119:ee6a53069455 | 184 | * @Synopsis Verifica se o tempo de ligação é menor que o tempo máximo permitido. |
klauss | 119:ee6a53069455 | 185 | * |
klauss | 119:ee6a53069455 | 186 | * @retval True - Caso o tempo da ligação tenha passado do limite definido em __MAX_CALL_TIME__. |
klauss | 119:ee6a53069455 | 187 | * @retval False - caso em que o tempo da ligação atual for menor que o máximo permitido.. |
klauss | 119:ee6a53069455 | 188 | * |
klauss | 119:ee6a53069455 | 189 | * Exemplo: |
klauss | 119:ee6a53069455 | 190 | * @code |
klauss | 119:ee6a53069455 | 191 | * ... |
klauss | 119:ee6a53069455 | 192 | * printf( "Call já deveria ter acabado ? %s \n\r", ( call->is_timeout() ) ? "Sim" : "Não" ); |
klauss | 119:ee6a53069455 | 193 | * ... |
klauss | 119:ee6a53069455 | 194 | * @endcode |
klauss | 119:ee6a53069455 | 195 | */ |
klauss | 119:ee6a53069455 | 196 | bool is_timetofinish ( void ); |
klauss | 92:92df17f538a8 | 197 | |
klauss | 119:ee6a53069455 | 198 | |
klauss | 119:ee6a53069455 | 199 | bool cbx_pkg_is_idle ( void ); |
klauss | 119:ee6a53069455 | 200 | |
klauss | 119:ee6a53069455 | 201 | uint16_t get_elapsed_time ( void ); |
klauss | 119:ee6a53069455 | 202 | |
klauss | 119:ee6a53069455 | 203 | void cbx_pkg_idle_timer_reset ( void ); |
klauss | 119:ee6a53069455 | 204 | void reconnect ( void ); |
klauss | 119:ee6a53069455 | 205 | void * check_rtp ( void ); |
klauss | 119:ee6a53069455 | 206 | void init_cbx_pkg_idle_timer ( void ); |
klauss | 119:ee6a53069455 | 207 | |
klauss | 119:ee6a53069455 | 208 | int rtp_print_yourself ( void ); |
klauss | 117:e9facba9db27 | 209 | int print_yourself ( void ); |
klauss | 0:4d17cd9c8f9d | 210 | }; |
klauss | 0:4d17cd9c8f9d | 211 | #endif |