Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: EthernetInterface NTPClient mbed-rtos_old mbed
Fork of header_main_public by
utils.cpp
00001 #include "utils.h" 00002 00003 void reverse( char str[], int length ){ 00004 int start = 0; 00005 int end = length -1; 00006 while (start < end){ 00007 swap(*(str+start), *(str+end)); 00008 start++; 00009 end--; 00010 } 00011 } 00012 char* itoa(int num, char* str, int base){ 00013 int i = 0; 00014 bool isNegative = false; 00015 00016 if( num == 0 ){ 00017 str[i++] = '0'; 00018 str[i] = '\0'; 00019 return str; 00020 } 00021 if( num < 0 && base == 10 ){ 00022 isNegative = true; 00023 num = -num; 00024 } 00025 while( num != 0 ){ 00026 int rem = num % base; 00027 str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0'; 00028 num = num/base; 00029 } 00030 if( isNegative ) 00031 str[i++] = '-'; 00032 00033 str[i] = '\0'; // Append string terminator 00034 00035 reverse( str, i ); 00036 return( str ); 00037 } 00038 00039 void reset_leds( void ){ 00040 led1 = led2 = 1; 00041 led3 = led4 = 0; 00042 } 00043 00044 int __init_eth__( EthernetInterface * eth ){ 00045 //eth->init( __MY_IP__, "255.255.255.0", "192.168.120.1" ); 00046 eth->init( "192.168.2.200", "255.255.255.0", "192.168.2.254" ); 00047 00048 /* 00049 #ifdef debug_colinas 00050 #define __MY_IP__ "192.168.2.200" 00051 #define __MY_GT__ "192.168.2.254" 00052 #endif 00053 #ifndef debug_colinas 00054 #define __MY_IP__ "192.168.120.169" 00055 #define __MY_GT__ "192.168.120.1" 00056 #endif 00057 00058 #define __MY_MK__ "255.255.255.0" 00059 */ 00060 return eth->connect(); 00061 // pensar em o que acontece e como sinalizar que nao consegui conectar na web 00062 // aparente so da time out, so que algo vai travar quando eu tentar usar a conexao 00063 } 00064 00065 Call_Box * __find_CB__( Vector * v_cb, int ext ){ 00066 Call_Box * cb = NULL; 00067 for( register int i = 0; i < v_cb->size(); i++ ){ 00068 cb = ( Call_Box * )v_cb->get_element( i ); 00069 if( cb->get_ext() == ext ) return( cb ); 00070 } 00071 return( NULL ); 00072 } 00073 00074 VZ_call * __find_Call__( Vector * v_call, int ext ){ 00075 VZ_call * call = NULL; 00076 for( register int i = 0; i < v_call->size(); i++ ){ 00077 call = ( VZ_call * )v_call->get_element( i ); 00078 if( call->get_cb_ext() == ext ) return( call ); 00079 } 00080 return( NULL ); 00081 } 00082 00083 void registry_aging( Vector * v_cb, uint8_t * data, uint8_t * write_buffer ){ 00084 Call_Box * cb = NULL; 00085 if( v_cb && data && write_buffer ){ 00086 for( register int i = 0; i < v_cb->size(); i++ ){ 00087 cb = (Call_Box * )v_cb->get_element( i ); 00088 if( cb->is_timeout() ){ 00089 if( cb->reconfigure_timeout() == 0x00 ){ 00090 // debug_msg("( ext %d removed", cb->get_ext() ); 00091 //cb->unregistry(); 00092 //v_cb->remove_element( i ); 00093 //delete( cb ); 00094 break; 00095 }else{ 00096 // debug_msg("Ping on %d", cb->get_ext() ); 00097 00098 cb->set_msg_id( ( ( cb->get_msg_id() ) + 1 ) & ( BIT7 ^ 0xff ) ); 00099 00100 debug_msg(""); 00101 00102 __send_to_cb__( __build_cb_package__( cb->get_ext(), cb->get_port(), __REGISTRY__, 00103 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 00104 00105 debug_msg(""); 00106 00107 cb->registry(); 00108 00109 debug_msg(""); 00110 } 00111 } 00112 } 00113 } 00114 /* 00115 Call_Box * cb = NULL; 00116 if( v_cb && data && write_buffer ){ 00117 bool remove_slave = false; 00118 int slave = 0x00; 00119 int tam = v_cb->size(); 00120 for( register int i = 0; i < v_cb->size(); i++ ){ 00121 cb = (Call_Box * )v_cb->get_element( i ); 00122 if( cb->get_ext() % 2 ) continue; 00123 if( cb->is_timeout() ){ 00124 if( cb->reconfigure_timeout() == 0x00 ){ 00125 debug_msg("( ext %d removed", cb->get_ext() ); 00126 cb->unregistry(); 00127 slave = cb->get_ext() + 1; 00128 remove_slave = true; 00129 v_cb->remove_element( i ); 00130 delete( cb ); 00131 break; 00132 }else{ 00133 cb->set_msg_id( ( ( cb->get_msg_id() ) + 1 ) & ( BIT7 ^ 0xff ) ); 00134 __send_to_cb__( __build_cb_package__( cb->get_ext(), cb->get_port(), __REGISTRY__, 00135 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 00136 cb->registry(); 00137 } 00138 } 00139 } 00140 if( remove_slave ){ 00141 for( register int i = 0; i < v_cb->size(); i++ ){ 00142 cb = (Call_Box * )v_cb->get_element( i ); 00143 if( cb->get_ext() == slave ){ 00144 debug_msg("( ext %d removed", cb->get_ext() ); 00145 cb->unregistry(); 00146 v_cb->remove_element( i ); 00147 delete( cb ); 00148 } 00149 } 00150 } 00151 if( tam != v_cb->size() ) debug_msg("%d ---> %d", tam, v_cb->size() ); 00152 } 00153 */ 00154 //debug_msg(""); 00155 } 00156 00157 int sip_manager( Vector * v_cb, Vector * v_call, uint8_t * write_buffer ){ 00158 static int index = 0; 00159 //debug_msg(""); 00160 if( v_cb && write_buffer ){ 00161 if( v_cb->size() > 0 ){ 00162 //debug_msg(""); 00163 if( index >= v_cb->size() ) index = 0; 00164 }else return 0; 00165 Call_Box * cb = (Call_Box * )v_cb->get_element( index ); 00166 /* Retorna 00167 = 0 :: ok 00168 < 0 :: tive problemas 00169 > 0 :: devo remover essa call do vetor de calls 00170 */ 00171 int returned_value = 0; 00172 00173 if( cb->status == cb_on_call || cb->status == cb_idle ){ 00174 //debug_msg(""); 00175 returned_value = cb->listen_SIP_server(); 00176 } 00177 index++; 00178 return( returned_value ); 00179 } 00180 led1 = !led1; 00181 return( -1 ); 00182 } 00183 00184 /* remove calls por timeout */ 00185 void call_manager( Vector * v_call, Vector * v_cb, uint8_t * data, uint8_t * write_buffer, Timeslice * ts ){ 00186 for( register int i = 0; i < v_call->size(); i++ ){ 00187 VZ_call * call = ( VZ_call * )v_call->get_element( i ); 00188 if( call->is_timeout() || call->is_timetofinish() ){ 00189 v_call->remove_element( i ); 00190 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() ); 00191 if( cb ){ 00192 cb->status = cb_idle; 00193 ts->return_timeslice( cb->get_timeslice() ); 00194 cb->set_timeslice( 0x00 ); 00195 data[ __TIMESLICE_PLACE__ ] = 0x00; 00196 cb->set_msg_id( ( ( cb->get_msg_id() ) + 1 ) & ( BIT7 ^ 0xff ) ); 00197 __send_to_cb__( __build_cb_package__( cb->get_ext(), cb->get_port(), __CB_BYE__, 00198 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 00199 cb->send_bye(); 00200 set_status( cb->sip->status, sip_idle ); 00201 } 00202 delete( call ); 00203 } 00204 } 00205 } 00206 00207 void build_telemetry_report( int ext, int port, char * data ){ 00208 // construir o pacote de telemetria aqui 00209 // decidir se isso sera escrito em disco e de tempos em tempos enviado para o servidor ... 00210 // ou se sera enviado toda vez que determinado cb se registrar ... 00211 } 00212 00213 void __send_to_cb__( uint8_t * buffer ){ 00214 xmemcpy( TXBuffer, buffer, DATA_SIZE ); 00215 send2callboxes(); 00216 }
Generated on Sat Jul 16 2022 08:57:54 by
1.7.2
