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;