Programa Teste para monitoramento de ativos eletricos

Dependencies:   logger

Revision:
5:1b0cd3a1f3c7
Parent:
3:213ab6bbf852
--- 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;
 }
 ;