Controls the central heating system and the lights.

Dependencies:   1-wire clock crypto fram log lpc1768 net web wiz mbed

Revision:
0:22b158d3c76f
Child:
8:8ac076ce51af
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/heating/hall-pb.c	Mon May 10 10:23:48 2021 +0000
@@ -0,0 +1,74 @@
+#include <stdbool.h>
+#include <stdint.h>
+
+#include "gpio.h"
+#include "radiator.h"
+#include "program.h"
+#include "mstimer.h"
+#include "rit.h"
+
+#define HALL_PB_PIN FIO0PIN(05) // P0.05 == p29;
+
+#define        DEBOUNCE_MS    20
+#define      LONG_PRESS_MS  3000
+#define INACTIVE_REVERT_MS 30000
+
+static int ms  = 0;
+
+static void (*ritHook)();
+    
+static void ritHandler()
+{
+    if (ritHook) ritHook(); //Call the RIT function chain before this
+    
+    if (HALL_PB_PIN) { if (ms < DEBOUNCE_MS) ms++; }
+    else             { if (ms > 0          ) ms--; }
+}
+
+static bool getHallPbPressed()
+{
+    static bool pressed = false;
+    if (ms >= DEBOUNCE_MS) pressed = false;
+    if (ms <=           0) pressed = true;
+    return pressed;
+}
+
+bool HallPbOverrideMode = true;
+
+void HallPbInit()
+{
+    ritHook = RitHook;
+    RitHook = ritHandler;
+}
+void HallPbMain()
+{
+    static uint32_t hallButtonPushedMsTimer    = 0;
+    static uint32_t hallButtonNotPushedMsTimer = 0;
+    
+    static bool buttonWasPressed     = false;
+    static bool buttonWasLongPressed = false;
+    
+    bool buttonIsPressed = getHallPbPressed();
+    bool buttonIsLongPressed;
+    if (buttonIsPressed)
+    {
+        buttonIsLongPressed = MsTimerRelative(hallButtonPushedMsTimer, LONG_PRESS_MS);
+        hallButtonNotPushedMsTimer = MsTimerCount;
+    }
+    else
+    {
+        buttonIsLongPressed = false;
+        hallButtonPushedMsTimer = MsTimerCount;
+    }
+    
+    if (buttonIsLongPressed && !buttonWasLongPressed) HallPbOverrideMode = !HallPbOverrideMode;
+    if (MsTimerRelative(hallButtonNotPushedMsTimer, INACTIVE_REVERT_MS)) HallPbOverrideMode = true;
+    
+    if (!buttonIsPressed && buttonWasPressed && !buttonWasLongPressed)
+    {
+        if (HallPbOverrideMode) RadiatorChgOverride();
+        else                    RadiatorChgWinter();
+    }
+    buttonWasPressed     = buttonIsPressed;
+    buttonWasLongPressed = buttonIsLongPressed;
+}
\ No newline at end of file