123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- #include "kbf/task.h"
- #include <utility>
- #include <esp_log.h>
- #include <kbf/macros.h>
- static constexpr const char *TAG = "kbf::task";
- kbf::Task::Task(string name, TaskFunc function, void *data) : function(function),
- name(std::move(name)),
- data(data) {
- ESP_LOGD(TAG, "creating task: %s", this->name.c_str());
- handle = nullptr;
- auto ret = xTaskCreate(task, name.c_str(), 4096, this, 5, &handle);
- if (ret == errCOULD_NOT_ALLOCATE_REQUIRED_MEMORY) {
- ESP_LOGE(TAG, "failed to create task: out of memory");
- ABORT("TODO implement graceful failure");
- } else if (ret != pdPASS) {
- ESP_LOGE(TAG, "unknown error: %d", ret);
- ABORT("debug me");
- }
- }
- kbf::Task::~Task() {
- if (running) stop();
- }
- void kbf::Task::stop() {
- if (running) {
- ESP_LOGD(TAG, "stopping task: %s", name.c_str());
- vTaskDelete(handle);
- running = false;
- } else {
- ESP_LOGW(TAG, "task is not running: %s", name.c_str());
- }
- }
- void kbf::Task::task(void *pvParameters) {
- auto task = static_cast<Task *>(pvParameters);
- if (!task->name.length()) {
- ABORT("task has no name! debug me");
- }
- ESP_LOGD(TAG, "begin task: %s", task->name.c_str());
- task->running = true;
- task->function(task->data);
- task->running = false;
- ESP_LOGD(TAG, "end task: %s", task->name.c_str());
- vTaskDelete(task->handle);
- }
- bool kbf::Task::isRunning() const {
- return running;
- }
|