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 mbed
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 void __init_eth__( EthernetInterface * eth ){ 00045 eth->init( __MY_IP__, "255.255.255.0", "192.168.120.1" ); 00046 eth->connect(); 00047 // pensar em o que acontece e como sinalizar que nao consegui conectar na web 00048 // aparente so da time out, so que algo vai travar quando eu tentar usar a conexao 00049 } 00050 00051 Call_Box * __find_CB__( Vector * v_cb, int ext ){ 00052 Call_Box * cb = NULL; 00053 for( register int i = 0; i < v_cb->size(); i++ ){ 00054 cb = ( Call_Box * )v_cb->get_element( i ); 00055 if( cb->get_ext() == ext ) return( cb ); 00056 } 00057 return( NULL ); 00058 } 00059 00060 VZ_call * __find_Call__( Vector * v_call, int ext ){ 00061 VZ_call * call = NULL; 00062 for( register int i = 0; i < v_call->size(); i++ ){ 00063 call = ( VZ_call * )v_call->get_element( i ); 00064 if( call->get_cb_ext() == ext ) return( call ); 00065 } 00066 return( NULL ); 00067 } 00068 00069 void registry_aging( Vector * v_cb, uint8_t * data, uint8_t * write_buffer ){ 00070 Call_Box * cb = NULL; 00071 for( register int i = 0; i < v_cb->size(); i++ ){ 00072 cb = (Call_Box * )v_cb->get_element( i ); 00073 if( cb->is_timeout() ){ 00074 cb->reset_elapsed_time(); 00075 cb->registry(); 00076 /*if( cb->reconfigure_timeout() == 0x00 ){ 00077 v_cb->remove_element( i ); 00078 cb->unregistry(); 00079 delete( cb ); 00080 }else{ 00081 __send_to_cb__( __build_cb_package__( cb->get_ext(), cb->get_port(), __REGISTRY__, 00082 ( char * )data, __REGISTRY__, __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 00083 cb->registry(); 00084 }*/ 00085 } 00086 } 00087 } 00088 00089 int sip_manager( Vector * v_cb, Vector * v_call, uint8_t * write_buffer ){ 00090 static int index = 0; 00091 if( v_cb && write_buffer ){ 00092 if( v_cb->size() > 0 ){ 00093 if( index >= v_cb->size() ) index = 0; 00094 }else return 0; 00095 Call_Box * cb = (Call_Box * )v_cb->get_element( index ); 00096 /* Retorna 00097 = 0 :: ok 00098 < 0 :: tive problemas 00099 > 0 :: devo remover essa call do vetor de calls 00100 */ 00101 int returned_value = 0; 00102 00103 if( cb->status == cb_on_call || cb->status == cb_idle ) returned_value = cb->listen_SIP_server(); 00104 00105 index++; 00106 return( returned_value ); 00107 } 00108 led1 = !led1; 00109 return( -1 ); 00110 } 00111 00112 /* remove calls por timeout */ 00113 void call_manager( Vector * v_call, Vector * v_cb, uint8_t * data, uint8_t * write_buffer, Timeslice * ts ){ 00114 for( register int i = 0; i < v_call->size(); i++ ){ 00115 VZ_call * call = ( VZ_call * )v_call->get_element( i ); 00116 if( call->is_timeout() || call->is_timetofinish() ){ 00117 v_call->remove_element( i ); 00118 Call_Box * cb = __find_CB__( v_cb, call->get_cb_ext() ); 00119 if( cb ){ 00120 cb->status = cb_idle; 00121 ts->return_timeslice( cb->get_timeslice() ); 00122 cb->set_timeslice( 0x00 ); 00123 data[ __TIMESLICE_PLACE__ ] = 0x00; 00124 cb->set_msg_id( ( ( cb->get_msg_id() ) + 1 ) & ( BIT7 ^ 0xff ) ); 00125 __send_to_cb__( __build_cb_package__( cb->get_ext(), cb->get_port(), __CB_BYE__, 00126 ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); 00127 cb->send_bye(); 00128 set_status( cb->sip->status, sip_idle ); 00129 } 00130 delete( call ); 00131 } 00132 } 00133 } 00134 00135 void build_telemetry_report( int ext, int port, char * data ){ 00136 // construir o pacote de telemetria aqui 00137 // decidir se isso sera escrito em disco e de tempos em tempos enviado para o servidor ... 00138 // ou se sera enviado toda vez que determinado cb se registrar ... 00139 } 00140 00141 void __send_to_cb__( uint8_t * buffer ){ 00142 xmemcpy( TXBuffer, buffer, DATA_SIZE ); 00143 send2callboxes(); 00144 }
Generated on Fri Jul 22 2022 09:19:18 by
1.7.2