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 19 13:36:33 2014 +0000
Revision:
72:895ca792c647
Parent:
70:714c33487aae
Child:
74:81c47fff88a5
send_to_cbx | send2callbox under development -- antes de modularizar melhor o src.

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