Anderson Cunha
/
monitoramento_ativos
Programa Teste para monitoramento de ativos eletricos
Diff: src/classes/Giroscopio.h
- Revision:
- 5:1b0cd3a1f3c7
- Parent:
- 3:213ab6bbf852
diff -r bdc930225ade -r 1b0cd3a1f3c7 src/classes/Giroscopio.h --- a/src/classes/Giroscopio.h Wed May 08 21:36:20 2019 -0300 +++ b/src/classes/Giroscopio.h Tue May 14 22:34:36 2019 -0300 @@ -1,24 +1,61 @@ #include "Logger.h" class Giroscopio { - public: + public: + Giroscopio() { + instance = NULL; + } + + ~Giroscopio() { + instance = NULL; + } + + static void setListener(Giroscopio* newListener) { + instance = newListener; + } + /// Fica ouvindo se existe movimentação, Se existir ele executa a função de CALL BACK - void ouvirMovimentacao( void (*fnCallBack)() ) { + static void ouvirMovimentacao() { // IRQ não pode haver LOG !! + if(instance != NULL) { + instance->_movimentacoes.call( &_doMovimentsActions ); //Executar fora do IRQ + } + } + + void setLog(Logger * l) { + _l = l; + } + + void setCallBackMovimentos( void (*fnCallBack)() ){ + _fnCallBack = fnCallBack; + } + + EventQueue* listMovimentacoes() { + return &_movimentacoes; + } + + private: + Logger* _l; + EventQueue _movimentacoes; + void (*_fnCallBack)(); + + static Giroscopio* instance ; + static void _doMovimentsActions() { + Giroscopio::instance->doMovimentsActions(); + } + + void doMovimentsActions() { // 1 - Faz um TIME-OUT para mostrar que houve alguma movimentação !! _l->log("Verificando a movimentacao ..."); _l->log("Esperando o call back ..."); wait(0.5); // 2 - quando há a movimentação, então chama o call back !! - fnCallBack(); - _l->log("Call back lancado !!"); + if(_fnCallBack != NULL) { + _fnCallBack(); + _l->log("Call back lancado !!"); + } else { + _l->log("Nenhum call back configurado !!"); + } } - - void setLog(Logger * l) { - _l = l; - } - - private: - Logger* _l; } ;