![](/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
utils.h@72:895ca792c647, 2014-11-19 (annotated)
- 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?
User | Revision | Line number | New 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 |