Programa Teste para monitoramento de ativos eletricos

Dependencies:   logger

src/classes/Giroscopio.h

Committer:
AndersonIctus (anderson.ictus@gmail.com)
Date:
2019-05-14
Revision:
5:1b0cd3a1f3c7
Parent:
3:213ab6bbf852

File content as of revision 5:1b0cd3a1f3c7:

#include "Logger.h"

class Giroscopio {
    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
        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 !!
            if(_fnCallBack != NULL) {
                _fnCallBack();
                 _l->log("Call back lancado !!");
            } else {
                _l->log("Nenhum call back configurado !!");
            }
        }
}
;