From 20668ea6ae09164d7d548c82449c26f9d0e6ae51 Mon Sep 17 00:00:00 2001
From: Moritz Perschke <moritz.perschke@uibk.ac.at>
Date: Thu, 8 Sep 2022 13:23:06 +0200
Subject: [PATCH] added receive window and deep sleep according to bilal's code
 snippet

---
 client/client/lib/deep_sleep/f_deep_sleep.cpp | 23 +++++++++++++++++++
 client/client/lib/deep_sleep/f_deep_sleep.hpp |  9 ++++++++
 client/client/src/main.cpp                    |  5 +++-
 3 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 client/client/lib/deep_sleep/f_deep_sleep.cpp
 create mode 100644 client/client/lib/deep_sleep/f_deep_sleep.hpp

diff --git a/client/client/lib/deep_sleep/f_deep_sleep.cpp b/client/client/lib/deep_sleep/f_deep_sleep.cpp
new file mode 100644
index 0000000..60d1ac0
--- /dev/null
+++ b/client/client/lib/deep_sleep/f_deep_sleep.cpp
@@ -0,0 +1,23 @@
+#include "f_deep_sleep.hpp"
+
+void print_wakeup_reason(){
+  esp_sleep_wakeup_cause_t wakeup_reason;
+
+  wakeup_reason = esp_sleep_get_wakeup_cause();
+
+  switch(wakeup_reason)
+  {
+    case ESP_SLEEP_WAKEUP_EXT0 : Serial.println("Wakeup caused by external signal using RTC_IO"); break;
+    case ESP_SLEEP_WAKEUP_EXT1 : Serial.println("Wakeup caused by external signal using RTC_CNTL"); break;
+    case ESP_SLEEP_WAKEUP_TIMER : Serial.println("Wakeup caused by timer"); break;
+    case ESP_SLEEP_WAKEUP_TOUCHPAD : Serial.println("Wakeup caused by touchpad"); break;
+    case ESP_SLEEP_WAKEUP_ULP : Serial.println("Wakeup caused by ULP program"); break;
+    default : Serial.printf("Wakeup was not caused by deep sleep: %d\n",wakeup_reason); break;
+  }
+}
+
+
+void deep_sleep(int time_in_sec){
+  esp_sleep_enable_timer_wakeup(time_in_sec * 1000000);
+  esp_deep_sleep_start();
+}
diff --git a/client/client/lib/deep_sleep/f_deep_sleep.hpp b/client/client/lib/deep_sleep/f_deep_sleep.hpp
new file mode 100644
index 0000000..b0c9112
--- /dev/null
+++ b/client/client/lib/deep_sleep/f_deep_sleep.hpp
@@ -0,0 +1,9 @@
+#ifndef F_DEEP_SLEEP_H
+#define F_DEEP_SLEEP_H
+
+#include <Arduino.h>
+
+void deep_sleep(int time_to_sleep);
+void print_wakeup_reason();
+
+#endif
diff --git a/client/client/src/main.cpp b/client/client/src/main.cpp
index 2356891..3f34c4f 100644
--- a/client/client/src/main.cpp
+++ b/client/client/src/main.cpp
@@ -3,6 +3,8 @@
 #include <Arduino.h>
 #include <ArduinoJson.h>
 #include "Time.hpp"
+#include "f_deep_sleep.hpp"
+
 
 void setup()
 {
@@ -47,5 +49,6 @@ void loop()
 	Serial.println(esptime::rtc.getMillis());
 	Serial.println("delaying...");
 	Serial.flush();
-	delay(5000);
+	delay(5000); // 5 second receive window
+	deep_sleep(900); // go to sleep for 15 mins (900s)
 }
\ No newline at end of file
-- 
GitLab