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:
68:b54993674190
Child:
70:714c33487aae
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 utils.h
klauss 69:65665afbad5d 3 * @Synopsis Funções de propósito geral são encontradas nesse arquivo.
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 */
klauss 69:65665afbad5d 8
klauss 0:4d17cd9c8f9d 9 #ifndef __UTILS_H__
klauss 0:4d17cd9c8f9d 10 #define __UTILS_H__
klauss 0:4d17cd9c8f9d 11
klauss 0:4d17cd9c8f9d 12 #include <iostream>
klauss 0:4d17cd9c8f9d 13 #include <string.h>
klauss 14:22a35f575502 14 #include "debug.h"
klauss 0:4d17cd9c8f9d 15 #include "mbed.h"
klauss 0:4d17cd9c8f9d 16 #include "EthernetInterface.h"
klauss 0:4d17cd9c8f9d 17 #include "vz_protocol.h"
klauss 0:4d17cd9c8f9d 18 #include "vector.h"
klauss 0:4d17cd9c8f9d 19 #include "sip.h"
klauss 0:4d17cd9c8f9d 20 #include "call.h"
klauss 0:4d17cd9c8f9d 21 #include "call_box.h"
klauss 0:4d17cd9c8f9d 22 #include "timeslice.h"
klauss 0:4d17cd9c8f9d 23 #include "parallelcpld.h"
klauss 31:bb5fb28a77df 24 #include "prompt.h"
klauss 48:195c97f12e8e 25 #include "configs.h"
klauss 0:4d17cd9c8f9d 26
klauss 63:0d95da692bb4 27 extern uint8_t cb_tx_buffer[ __CB_BUFFER_SIZE__ ];
klauss 69:65665afbad5d 28 ///< Armazena o ultimo pacote enviado para os CBx
klauss 63:0d95da692bb4 29
klauss 0:4d17cd9c8f9d 30 using namespace std;
klauss 0:4d17cd9c8f9d 31
klauss 0:4d17cd9c8f9d 32 extern DigitalOut led1;
klauss 0:4d17cd9c8f9d 33 extern DigitalOut led2;
klauss 0:4d17cd9c8f9d 34 extern DigitalOut led3;
klauss 0:4d17cd9c8f9d 35 extern DigitalOut led4;
klauss 48:195c97f12e8e 36 extern EthernetInterface eth;
klauss 68:b54993674190 37 extern UDPSocket t_sock;
klauss 68:b54993674190 38 extern Endpoint t_server;
klauss 14:22a35f575502 39 #define set_status(a,b) _set_status(a,b)
klauss 14:22a35f575502 40 #define _set_status(a,b){ \
klauss 31:bb5fb28a77df 41 if( a != b ) if( debug_sip )debug_msg("Anterior %d -- Atual %d", a, b ); \
klauss 14:22a35f575502 42 if( a != NULL || b != NULL ) a = b; \
klauss 31:bb5fb28a77df 43 else if( debug_sip ) debug_msg("Paramento sip null"); \
klauss 14:22a35f575502 44 }
klauss 0:4d17cd9c8f9d 45
klauss 69:65665afbad5d 46 /**
klauss 69:65665afbad5d 47 * @Synopsis Transpões os elementos de um vetor, invertendo a ordendo em que os mesmos aparecem.
klauss 69:65665afbad5d 48 *
klauss 69:65665afbad5d 49 * @param str[] Um ponteiro para o inicio da string que desejamos inverter os elementos de posição
klauss 69:65665afbad5d 50 * @param length O numero de elementos que queremos trocar.
klauss 69:65665afbad5d 51 *
klauss 69:65665afbad5d 52 * Exemplo:
klauss 69:65665afbad5d 53 * @code
klauss 69:65665afbad5d 54 * ...
klauss 69:65665afbad5d 55 * char str[ 256 ] = "This is a only test";
klauss 69:65665afbad5d 56 * reverse( str, strlen( str ) );
klauss 69:65665afbad5d 57 * ...
klauss 69:65665afbad5d 58 * @endcode
klauss 69:65665afbad5d 59 */
klauss 0:4d17cd9c8f9d 60 void reverse( char str[], int length );
klauss 69:65665afbad5d 61
klauss 69:65665afbad5d 62 /**
klauss 69:65665afbad5d 63 * @Synopsis Implementa a funcionalidade de, dado um numero em uma base, converte o mesmo para seu equivalente em string.
klauss 69:65665afbad5d 64 *
klauss 69:65665afbad5d 65 * @param num O numero que se deseja converter em string.
klauss 69:65665afbad5d 66 * @param str Um ponteiro para o inicio da região de memória onde será montado a string.
klauss 69:65665afbad5d 67 * @param base A base de conversão adotada.
klauss 69:65665afbad5d 68 *
klauss 69:65665afbad5d 69 * @return Um ponteiro para o primeiro elemento da string montada.
klauss 69:65665afbad5d 70 *
klauss 69:65665afbad5d 71 * Exemplo:
klauss 69:65665afbad5d 72 * @code
klauss 69:65665afbad5d 73 * ...
klauss 69:65665afbad5d 74 * int tmp = 119;
klauss 69:65665afbad5d 75 * char buffer[ 16 ];
klauss 69:65665afbad5d 76 * buffer = itoa( tmp, buffer, 10 );
klauss 69:65665afbad5d 77 * ...
klauss 69:65665afbad5d 78 * @endcode
klauss 69:65665afbad5d 79 */
klauss 0:4d17cd9c8f9d 80 char* itoa(int num, char* str, int base);
klauss 69:65665afbad5d 81
klauss 69:65665afbad5d 82 /**
klauss 69:65665afbad5d 83 * @Synopsis Função responsavel por apagar todos os leds em uso da Header.
klauss 69:65665afbad5d 84 *
klauss 69:65665afbad5d 85 * Exemplo:
klauss 69:65665afbad5d 86 * @code
klauss 69:65665afbad5d 87 * ...
klauss 69:65665afbad5d 88 * reset_leds();
klauss 69:65665afbad5d 89 * ...
klauss 69:65665afbad5d 90 * @endcode
klauss 69:65665afbad5d 91 */
klauss 0:4d17cd9c8f9d 92 void reset_leds( void );
klauss 69:65665afbad5d 93
klauss 69:65665afbad5d 94 /**
klauss 69:65665afbad5d 95 * @Synopsis Responsavel por inicializar as configurações iniciais de conexão eth
klauss 69:65665afbad5d 96 *
klauss 69:65665afbad5d 97 * @return 0 ( zero ) caso tenha uma execução bem sucedida, um numero negativo, caso contrário.
klauss 69:65665afbad5d 98 *
klauss 69:65665afbad5d 99 * Exemplo:
klauss 69:65665afbad5d 100 * @code
klauss 69:65665afbad5d 101 * ...
klauss 69:65665afbad5d 102 * int eth_status = __init_eth__();
klauss 69:65665afbad5d 103 * ...
klauss 69:65665afbad5d 104 * @endcode
klauss 69:65665afbad5d 105 */
klauss 48:195c97f12e8e 106 int __init_eth__( void );
klauss 0:4d17cd9c8f9d 107
klauss 69:65665afbad5d 108 /**
klauss 69:65665afbad5d 109 * @Synopsis Busca por um determinado Call_box no vetor de Call_box usando como chave de busca o ramal.
klauss 69:65665afbad5d 110 *
klauss 69:65665afbad5d 111 * @param v_cb O vetor contendo todos os Call_box conhecidos pela Header em determinado momento.
klauss 69:65665afbad5d 112 * @param ext O ramal pelo qual se irá buscar o CBx.
klauss 69:65665afbad5d 113 *
klauss 69:65665afbad5d 114 * @return NULL caso não tenha sido encontrado nenhum CBx com esse ramal; retorna um ponteiro para o Call_box que possui esse ramal,
klauss 69:65665afbad5d 115 * caso o mesmo tenha sido encontrado.
klauss 69:65665afbad5d 116 *
klauss 69:65665afbad5d 117 * Exemplo:
klauss 69:65665afbad5d 118 * @code
klauss 69:65665afbad5d 119 * ...
klauss 69:65665afbad5d 120 * Vector * v_cb = new Vector();
klauss 69:65665afbad5d 121 * //assumindo que esse vetor de Call_Box já foi populado.
klauss 69:65665afbad5d 122 * int ext = 5218;
klauss 69:65665afbad5d 123 * Call_Box * cb = __find_CB__( v_cb, ext );
klauss 69:65665afbad5d 124 * ...
klauss 69:65665afbad5d 125 * @endcode
klauss 69:65665afbad5d 126 */
klauss 0:4d17cd9c8f9d 127 Call_Box * __find_CB__( Vector * v_cb, int ext );
klauss 69:65665afbad5d 128
klauss 69:65665afbad5d 129 /**
klauss 69:65665afbad5d 130 * @Synopsis Busca por uma determinada ligação vz_call no vetor de v_calusando como chave de busca o ramal.
klauss 69:65665afbad5d 131 *
klauss 69:65665afbad5d 132 * @param v_call Um vetor contendo todas as vz_calls em andamento em um dado momento.
klauss 69:65665afbad5d 133 * @param ext O ramal pelo qual se irá buscar a vz_call.
klauss 69:65665afbad5d 134 *
klauss 69:65665afbad5d 135 * @return NULL, caso essa chamada não tenha sido encontrada; um ponteiro para esta chamada, caso a mesma tenha sido encontrada.
klauss 69:65665afbad5d 136 *
klauss 69:65665afbad5d 137 * Exemplo:
klauss 69:65665afbad5d 138 * @code
klauss 69:65665afbad5d 139 * ...
klauss 69:65665afbad5d 140 * Vector * v_call = new Vector();
klauss 69:65665afbad5d 141 * //assumindo que esse vetor de VZ_call já foi populado.
klauss 69:65665afbad5d 142 * int ext = 5218;
klauss 69:65665afbad5d 143 * VZ_call * call = __find_Call__( v_call, ext );
klauss 69:65665afbad5d 144 * ...
klauss 69:65665afbad5d 145 * @endcode
klauss 69:65665afbad5d 146 */
klauss 0:4d17cd9c8f9d 147 VZ_call * __find_Call__( Vector * v_call, int ext );
klauss 69:65665afbad5d 148
klauss 69:65665afbad5d 149 /**
klauss 69:65665afbad5d 150 * @Synopsis Função responsavel por "envelhecer" os registros na Header, na prática, é essa função que pergunta de tempo
klauss 69:65665afbad5d 151 * em tempo se o CBx ainda continua ativo; Essa função também é responsavel por remover o CBx do v_cb assim como deletar o elemento cb
klauss 69:65665afbad5d 152 * assossiado.
klauss 69:65665afbad5d 153 *
klauss 69:65665afbad5d 154 * @param v_cb Um vetor contendo todos os Call_box conhecidos pela Header em um determinado momento.
klauss 69:65665afbad5d 155 * @param data Usado para a criação do pacote de "ping" que a Header irá enviar para o CBx.
klauss 69:65665afbad5d 156 * @param write_buffer Local de memória onde efetivamente irá ser montado o pacote para envio ao CBx do pacote de "ping" ( Registry ).
klauss 69:65665afbad5d 157 *
klauss 69:65665afbad5d 158 * Exemplo:
klauss 69:65665afbad5d 159 * @code
klauss 69:65665afbad5d 160 * ...
klauss 69:65665afbad5d 161 * Vector * v_cb = new Vector();
klauss 69:65665afbad5d 162 * //assumindo que esse vetor de Call_Box já foi populado.
klauss 69:65665afbad5d 163 * uint8_t buffer[ 300 ];
klauss 69:65665afbad5d 164 * uint8_t write_buffer[ 300 ];
klauss 69:65665afbad5d 165 * registry_aging( v_cb, buffer, write_buffer );
klauss 69:65665afbad5d 166 * ...
klauss 69:65665afbad5d 167 * @endcode
klauss 69:65665afbad5d 168 */
klauss 0:4d17cd9c8f9d 169 void registry_aging( Vector * v_cb, uint8_t * data, uint8_t * write_buffer );
klauss 69:65665afbad5d 170
klauss 69:65665afbad5d 171 /**
klauss 69:65665afbad5d 172 * @Synopsis Responsavel por escutar a porta de conexão com o servidor, verificando se o mesmo mandou algum dado.
klauss 69:65665afbad5d 173 *
klauss 69:65665afbad5d 174 * @param v_cb Um vetor contendo todos os Call_box conhecidos pela Header em um determinado momento.
klauss 69:65665afbad5d 175 * @param v_call Um vetor contendo todas as vz_calls em andamento em um dado momento.
klauss 69:65665afbad5d 176 *
klauss 69:65665afbad5d 177 * @return 0 ( zero ) se tudo correu bem, um numero menor do que zero, caso algum problema tenha acontecido na execusão, e um numero
klauss 69:65665afbad5d 178 * maior que zero indicando o ramal que deve ser removido do vetor de ligações.
klauss 69:65665afbad5d 179 *
klauss 69:65665afbad5d 180 * Exemplo:
klauss 69:65665afbad5d 181 * @code
klauss 69:65665afbad5d 182 * ...
klauss 69:65665afbad5d 183 * Vector * v_cb = new Vector();
klauss 69:65665afbad5d 184 * Vector * v_call = new Vector();
klauss 69:65665afbad5d 185 * // assumindo que os vetores já foram populados.
klauss 69:65665afbad5d 186 * int ret = sip_manager( v_cb, v_call );
klauss 69:65665afbad5d 187 * if( ret > 0x00 ){
klauss 69:65665afbad5d 188 * // tratar esse request
klauss 69:65665afbad5d 189 * }
klauss 69:65665afbad5d 190 * ...
klauss 69:65665afbad5d 191 * @endcode
klauss 69:65665afbad5d 192 */
klauss 69:65665afbad5d 193 int sip_manager( Vector * v_cb, Vector * v_call );
klauss 69:65665afbad5d 194
klauss 69:65665afbad5d 195 /**
klauss 69:65665afbad5d 196 * @Synopsis Responsável por remover calls por timeout.
klauss 69:65665afbad5d 197 *
klauss 69:65665afbad5d 198 * @param v_call Um vetor contendo todas as vz_calls em andamento em um dado momento.
klauss 69:65665afbad5d 199 * @param v_cb Um vetor contendo todos os Call_box conhecidos pela Header em um determinado momento.
klauss 69:65665afbad5d 200 * @param data Usado para a criação do pacote de "ping" que a Header irá enviar para o CBx.
klauss 69:65665afbad5d 201 * @param write_buffer Local de memória onde efetivamente irá ser montado o pacote para envio ao CBx.
klauss 69:65665afbad5d 202 * @param ts O timeslice que será possivelmente devolvido.
klauss 69:65665afbad5d 203 *
klauss 69:65665afbad5d 204 * Exemplo:
klauss 69:65665afbad5d 205 * @code
klauss 69:65665afbad5d 206 * ...
klauss 69:65665afbad5d 207 * Vector * v_call = new Vector();
klauss 69:65665afbad5d 208 * Vector * v_cb = new Vector();
klauss 69:65665afbad5d 209 * // assumindo que os vetores já foram populados.
klauss 69:65665afbad5d 210 * uint8_t buffer[ 300 ];
klauss 69:65665afbad5d 211 * uint8_t write_buffer[ 300 ];
klauss 69:65665afbad5d 212 * Timeslice * ts = new Timeslice();
klauss 69:65665afbad5d 213 * ...
klauss 69:65665afbad5d 214 * call_manager( v_call, v_cb, buffer, write_buffer, ts );
klauss 69:65665afbad5d 215 * ...
klauss 69:65665afbad5d 216 * @endcode
klauss 69:65665afbad5d 217 */
klauss 0:4d17cd9c8f9d 218 void call_manager( Vector * v_call, Vector * v_cb, uint8_t * data, uint8_t * write_buffer, Timeslice * ts );
klauss 69:65665afbad5d 219
klauss 69:65665afbad5d 220 /**
klauss 69:65665afbad5d 221 * @Synopsis Responsavel por formatar e enviar o pacote de telemetria para o servidor de interesse.
klauss 69:65665afbad5d 222 *
klauss 69:65665afbad5d 223 * @param ext Ramal do CBx emissor do pacote de telemetria.
klauss 69:65665afbad5d 224 * @param port Porta do CBx emissor do pacote de telemetria.
klauss 69:65665afbad5d 225 * @param data Vetor contendo os dados de telemetria em si.
klauss 69:65665afbad5d 226 *
klauss 69:65665afbad5d 227 * Exemplo:
klauss 69:65665afbad5d 228 * @code
klauss 69:65665afbad5d 229 * ...
klauss 69:65665afbad5d 230 * ext = 5160;
klauss 69:65665afbad5d 231 * port = 5060;
klauss 69:65665afbad5d 232 * //assumindo que data_from_cb contém os dados vindos do Call_box.
klauss 69:65665afbad5d 233 * build_telemetry_report( ext, port, ( char * )data_from_cb );
klauss 69:65665afbad5d 234 * ...
klauss 69:65665afbad5d 235 * @endcode
klauss 69:65665afbad5d 236 */
klauss 0:4d17cd9c8f9d 237 void build_telemetry_report( int ext, int port, char * data );
klauss 69:65665afbad5d 238
klauss 69:65665afbad5d 239 /**
klauss 69:65665afbad5d 240 * @Synopsis Executa chamada para chamada de baixo nivel send2callboxes para efetivamente enviar os dados para o CBx.
klauss 69:65665afbad5d 241 *
klauss 69:65665afbad5d 242 * @param buffer O pacote VZ que será enviado para os CBx.
klauss 69:65665afbad5d 243 *
klauss 69:65665afbad5d 244 * Exemplo:
klauss 69:65665afbad5d 245 * @code
klauss 69:65665afbad5d 246 * ...
klauss 69:65665afbad5d 247 * //assumindo que o pacote já foi montado em pkg.
klauss 69:65665afbad5d 248 * __send_to_cb__( pkg );
klauss 69:65665afbad5d 249 * ...
klauss 69:65665afbad5d 250 * @endcode
klauss 69:65665afbad5d 251 */
klauss 0:4d17cd9c8f9d 252 void __send_to_cb__( uint8_t * buffer );
klauss 69:65665afbad5d 253
klauss 69:65665afbad5d 254 /**
klauss 69:65665afbad5d 255 * @Synopsis Função usada na ordenação dos CBx para exibição no comando "ls"
klauss 69:65665afbad5d 256 *
klauss 69:65665afbad5d 257 * @param a O primeiro ramal que se quer comparar.
klauss 69:65665afbad5d 258 * @param b O segundo ramal que se quer comparar.
klauss 69:65665afbad5d 259 *
klauss 69:65665afbad5d 260 * @return 0 ( zero ) se os valores forem iguais, maior que zero, se o primeiro valor ser maior que o segundo e retorna um numero
klauss 69:65665afbad5d 261 * negativo, caso o segundo valor seja maior que o primeiro.
klauss 69:65665afbad5d 262 *
klauss 69:65665afbad5d 263 * Exemplo:
klauss 69:65665afbad5d 264 * @code
klauss 69:65665afbad5d 265 * ...
klauss 69:65665afbad5d 266 * int a = 10;
klauss 69:65665afbad5d 267 * int b = 119;
klauss 69:65665afbad5d 268 * int result = ls_comp( ( const void * )&a, ( const void * )&b );
klauss 69:65665afbad5d 269 * ...
klauss 69:65665afbad5d 270 * @endcode
klauss 69:65665afbad5d 271 */
klauss 62:07e5bdc9f8f7 272 int ls_comp( const void * a, const void * b );
klauss 0:4d17cd9c8f9d 273
klauss 69:65665afbad5d 274 /**
klauss 69:65665afbad5d 275 * @Synopsis Efetivamente inicializa a conexão UDP com o server.
klauss 69:65665afbad5d 276 */
klauss 68:b54993674190 277 void init_telemetry_handler( void );
klauss 69:65665afbad5d 278
klauss 69:65665afbad5d 279
klauss 69:65665afbad5d 280 /**
klauss 69:65665afbad5d 281 * @Synopsis Fecha e abre novamente a conexão UDP com o server
klauss 69:65665afbad5d 282 */
klauss 68:b54993674190 283 void re_start_telemetry( void );
klauss 68:b54993674190 284
klauss 0:4d17cd9c8f9d 285 #endif