diff --git a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h index f0b5e20..7d3fc3e 100644 --- a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h +++ b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h @@ -18,32 +18,33 @@ #include -#include -#include -#include -#include #include #include +#include #include #include -#include #include +#include +#include #include +#include +#include #include #include #include #include -#include +#include #include #include #include -#include #include +#include +#include +#include #include #include #include -#include -#include +#include #ifdef EMBED_WWW #include diff --git a/esp32/lib/ESP32-sveltekit/TaskManager.h b/esp32/lib/ESP32-sveltekit/TaskManager.h new file mode 100644 index 0000000..f13a2a0 --- /dev/null +++ b/esp32/lib/ESP32-sveltekit/TaskManager.h @@ -0,0 +1,79 @@ +#pragma once + +#include +#include +#include + +#define IDLE_STACK_SIZE 2048 +#define DEFAULT_STACK_SIZE 2048+512 + +#define DELETE_TASK(handle) if (handle != nullptr) vTaskDelete(handle) + +class TaskManager +{ + private: + std::map tasks; + + static void idleTask(void *pvParameters) + { + while (true) + { + vTaskDelay(pdMS_TO_TICKS(1000)); // Delay to simulate workload + } + } + + public: + TaskManager() + { + xTaskCreatePinnedToCore(idleTask, "IdleTaskCore0", 1024, nullptr, 0, nullptr, 0); + xTaskCreatePinnedToCore(idleTask, "IdleTaskCore1", 1024, nullptr, 0, nullptr, 1); + } + + void createTask(const std::string &name, void (*taskFunction)(void *), void *params = nullptr, + uint32_t stackSize = 2048, UBaseType_t priority = 1) + { + TaskHandle_t handle; + xTaskCreate(taskFunction, name.c_str(), stackSize, params, priority + 1, &handle); + tasks[name] = handle; + } + + void suspendTask(const std::string &name) + { + if (tasks.find(name) != tasks.end()) + { + vTaskSuspend(tasks[name]); + } + } + + void resumeTask(const std::string &name) + { + if (tasks.find(name) != tasks.end()) + { + vTaskResume(tasks[name]); + } + } + + void notifyTask(const std::string &name, uint32_t notificationValue, eNotifyAction action = eSetValueWithOverwrite) + { + if (tasks.find(name) != tasks.end()) + { + xTaskNotify(tasks[name], notificationValue, action); + } + } + + void deleteTask(const std::string &name) + { + if (tasks.find(name) != tasks.end()) + { + vTaskDelete(tasks[name]); + tasks.erase(name); + } + } + + float getCpuUsage(uint8_t coreId) + { + if (coreId > 1) + return 0.0; // ESP32 has only core 0 and 1 + return uxTaskGetSystemState(nullptr, 0, nullptr) * 100.0 / configTICK_RATE_HZ; + } +}; \ No newline at end of file