diff --git a/ESP32/platformio.ini b/ESP32/platformio.ini
index a3b3b39..c05e4b0 100644
--- a/ESP32/platformio.ini
+++ b/ESP32/platformio.ini
@@ -4,7 +4,7 @@ src_dir = .
[env:ESP32]
lib_ldf_mode = deep+
-src_filter = +<*> -<.git/> -<.svn/> - - - - - -
+build_src_filter = +<*> -<.git/> -<.svn/> - - - - - -
platform = espressif32
board = wemos_d1_mini32
framework = arduino
diff --git a/kw11-l.cpp b/kw11-l.cpp
index e208c4b..91dc267 100644
--- a/kw11-l.cpp
+++ b/kw11-l.cpp
@@ -5,17 +5,31 @@
#include "kw11-l.h"
#include "utils.h"
+#if defined(ESP32)
+void thread_wrapper_kw11(void *p)
+{
+ kw11_l *const kw11l = reinterpret_cast(p);
+
+ kw11l->operator()();
+}
+#endif
kw11_l::kw11_l(bus *const b, console *const cnsl) : b(b), cnsl(cnsl)
{
+#if defined(ESP32)
+ xTaskCreatePinnedToCore(&thread_wrapper_kw11, "kw11-l", 2048, this, 1, nullptr, 0);
+#else
th = new std::thread(std::ref(*this));
+#endif
}
kw11_l::~kw11_l()
{
stop_flag = true;
+#if !defined(ESP32)
th->join();
+#endif
delete th;
}
@@ -29,10 +43,18 @@ void kw11_l::operator()()
if (b->get_lf_crs() & 64)
b->getCpu()->queue_interrupt(6, 0100);
- myusleep(1000000 / 50);
+#if defined(ESP32)
+ vTaskDelay(100 / portTICK_RATE_MS);
+#else
+ myusleep(1000000 / 50); // 20ms
+#endif
}
else {
- myusleep(1000000 / 10);
+#if defined(ESP32)
+ vTaskDelay(100 / portTICK_RATE_MS);
+#else
+ myusleep(1000000 / 10); // 100ms
+#endif
}
}
}
diff --git a/utils.cpp b/utils.cpp
index 9583731..f94e90f 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -72,7 +72,10 @@ int parity(int v)
void myusleep(uint64_t us)
{
#if defined(ESP32)
- delayMicroseconds(us);
+ if (us >= 1000)
+ vTaskDelay(us / 1000 / portTICK_RATE_MS);
+ else
+ delayMicroseconds(us);
#else
struct timespec req;