![](/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
Diff: call_box_manager.cpp
- Revision:
- 105:a930035b6556
- Parent:
- 104:62646ef786a3
- Child:
- 106:a34fcf9f0e02
diff -r 62646ef786a3 -r a930035b6556 call_box_manager.cpp --- a/call_box_manager.cpp Wed Feb 25 18:44:11 2015 +0000 +++ b/call_box_manager.cpp Tue Mar 10 18:10:57 2015 +0000 @@ -22,8 +22,8 @@ cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 ); - send2callboxes( __build_cb_package__( cb->get_ext(), cb->get_port(), __REGISTRY__, - ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + send2callboxes( build_cb_package( cb->get_ext(), cb->get_port(), __REGISTRY__, + ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) ); if( debug_refresh ) send_msg("Refresh specific %d", cb->get_ext() ); @@ -43,8 +43,8 @@ cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 ); - send2callboxes( __build_cb_package__( cb->get_ext(), cb->get_port(), __REGISTRY__, - ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + send2callboxes( build_cb_package( cb->get_ext(), cb->get_port(), __REGISTRY__, + ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) ); if( debug_refresh ) send_msg("Refresh %d", cb->get_ext() ); @@ -72,12 +72,22 @@ } void wake_all_up( Vector * v_cb, uint8_t * data, uint8_t * write_buffer ){ -/** - * Esta função busca por, dado uma lista de cbx, procura por buracos, - * ou seja, slaves/masters que deveriam estar registrados uma vez que - * o outro master/slave esta registrado, e manda um "ping" para esse cbx, - * para efetivamente criar ele na lógica. - */ + /*** + [ Principio ] + -- Procurar por CBx que constem sem seus pares registrados na lógica. + -- Mandar uma mensagem do tipo prompt-ping para este elemento + + -- Fluxo -- + - Verificar se possui uma lista ordenada de CBx atualizada + - Caso nao possua, gerar esta lista. + - Para cada iteraçao + - Verifica se o CBx é master ou slave + - Verifica se o par deste esta registrado + - Caso contratio + - Verifica se o CBx encontrado esta em ligaçao + - Caso nao esteja, encaminha mensagem de ping para o CBx ausente da dupla. + ***/ + if( v_cb != NULL && data != NULL && write_buffer != NULL ){ static int ext_list[ __MAX_CB_IN_A_BRANCH__ + 1 ]; static uint8_t last_size = 0; @@ -101,14 +111,16 @@ //testa se o slave nao esta registrado if( ( size == 1 ) || ( ( wake_all_up_index + 1 ) == size ) || ( ext_list[ wake_all_up_index + 1 ] != ( ext_list[ wake_all_up_index ] + 1 ) ) ) { - strcpy( ( char * )data, "ping\r\r\r\n" ); + strcpy( ( char * )data, "ping\r" ); Call_Box * cb = __find_CB__( v_cb, ext_list[ wake_all_up_index ] ); - if( cb != NULL ) + + // verifica se o master esta em chamada. + if( cb != NULL && cb->status == cb_idle ) { cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 ); - send2callboxes( __build_cb_package__( ( cb->get_ext() + 1 ), ( cb->get_port() + 1 ), __PROMPT__, - ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + send2callboxes( build_cb_package( ( cb->get_ext() + 1 ), ( cb->get_port() + 1 ), __PROMPT__, + ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) ); if( debug_wake ) send_msg("%d without %d - ping sent to %d", ext_list[ wake_all_up_index ], ext_list[ wake_all_up_index ] + 1, cb->get_ext() + 1 ); @@ -118,14 +130,16 @@ }else{ if( ( size == 1 ) || ( wake_all_up_index == 0 ) || ( wake_all_up_index >= 1 ) && ( ext_list[ wake_all_up_index - 1 ] != ( ext_list[ wake_all_up_index ] - 1 ) ) ) { - strcpy( ( char * )data, "ping\r\r\r\n" ); + strcpy( ( char * )data, "ping\r" ); Call_Box * cb = __find_CB__( v_cb, ( ext_list[ wake_all_up_index ] ) ); - if( cb != NULL ) + + // verifica se o slave esta em chamada. + if( cb != NULL && cb->status == cb_idle ) { cb->set_msg_id( ( cb->get_msg_id() + 1 ) & ~BIT7 ); - send2callboxes( __build_cb_package__( ( cb->get_ext() - 1 ), ( cb->get_port() - 1 ), __PROMPT__, - ( char * )data, cb->get_msg_id(), __CB_BUFFER_SIZE__ - __VZ_HEADER_OFFSET__, write_buffer ) ); + send2callboxes( build_cb_package( ( cb->get_ext() - 1 ), ( cb->get_port() - 1 ), __PROMPT__, + ( char * )data, cb->get_msg_id(), CB_BUFFER_SIZE - __VZ_HEADER_OFFSET__, write_buffer ) ); if( debug_wake ) send_msg("%d without %d - ping sent to %d", ext_list[ wake_all_up_index ], ext_list[ wake_all_up_index ] - 1, cb->get_ext() - 1 );