diff --git a/esp32/lib/ESP32-sveltekit/CameraService.cpp b/esp32/lib/ESP32-sveltekit/CameraService.cpp index 0dcdaef..eb8126d 100644 --- a/esp32/lib/ESP32-sveltekit/CameraService.cpp +++ b/esp32/lib/ESP32-sveltekit/CameraService.cpp @@ -29,8 +29,7 @@ sensor_t *safe_sensor_get() { void safe_sensor_return() { xSemaphoreGive(cameraMutex); } -CameraService::CameraService(PsychicHttpServer *server, TaskManager *taskManager) - : _server(server), _taskManager(taskManager) {} +CameraService::CameraService(PsychicHttpServer *server) : _server(server) {} void CameraService::begin() { InitializeCamera(); _server->on(STILL_SERVICE_PATH, HTTP_GET, [this](PsychicRequest *request) { return cameraStill(request); }); @@ -157,7 +156,7 @@ void streamTask(void *pv) { } esp_err_t CameraService::cameraStream(PsychicRequest *request) { - _taskManager->createTask(streamTask, "Stream client task", 4096, request, 4); + g_taskManager.createTask(streamTask, "Stream client task", 4096, request, 4); vTaskDelay(pdMS_TO_TICKS(100)); return ESP_OK; } diff --git a/esp32/lib/ESP32-sveltekit/CameraService.h b/esp32/lib/ESP32-sveltekit/CameraService.h index a312c4a..d8105c3 100644 --- a/esp32/lib/ESP32-sveltekit/CameraService.h +++ b/esp32/lib/ESP32-sveltekit/CameraService.h @@ -3,7 +3,7 @@ #include #include -#include +#include #include #include #include @@ -27,13 +27,12 @@ void safe_sensor_return(); class CameraService { public: - CameraService(PsychicHttpServer *server, TaskManager *taskManager); + CameraService(PsychicHttpServer *server); void begin(); private: PsychicHttpServer *_server; - TaskManager *_taskManager; esp_err_t cameraStill(PsychicRequest *request); esp_err_t cameraStream(PsychicRequest *request); esp_err_t InitializeCamera(); diff --git a/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.cpp b/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.cpp index 6909f39..6c85d7b 100644 --- a/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.cpp +++ b/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.cpp @@ -89,8 +89,7 @@ void updateTask(void *param) { vTaskDelete(NULL); } -DownloadFirmwareService::DownloadFirmwareService(PsychicHttpServer *server, TaskManager *taskManager) - : _server(server), _taskManager(taskManager) {} +DownloadFirmwareService::DownloadFirmwareService(PsychicHttpServer *server) : _server(server) {} void DownloadFirmwareService::begin() { _server->on(GITHUB_FIRMWARE_PATH, HTTP_POST, @@ -116,14 +115,8 @@ esp_err_t DownloadFirmwareService::downloadUpdate(PsychicRequest *request, JsonV socket.emit(EVENT_DOWNLOAD_OTA, output.c_str()); - if (_taskManager->createTask(&updateTask, // Function that should be called - "Firmware download", // Name of the task (for debugging) - OTA_TASK_STACK_SIZE, // Stack size (bytes) - &downloadURL, // Pass reference to this class instance - (configMAX_PRIORITIES - 1), // Pretty high task priority - NULL, // Task handle - 1 // Have it on application core - ) != pdPASS) { + if (g_taskManager.createTask(&updateTask, "Firmware download", OTA_TASK_STACK_SIZE, &downloadURL, + (configMAX_PRIORITIES - 1), NULL, 1) != pdPASS) { ESP_LOGE("Download OTA", "Couldn't create download OTA task"); return request->reply(500); } diff --git a/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.h b/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.h index 44cb18e..e5665ef 100644 --- a/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.h +++ b/esp32/lib/ESP32-sveltekit/DownloadFirmwareService.h @@ -23,7 +23,7 @@ #include #include -#include +#include // #include #define GITHUB_FIRMWARE_PATH "/api/downloadUpdate" @@ -32,12 +32,11 @@ class DownloadFirmwareService { public: - DownloadFirmwareService(PsychicHttpServer *server, TaskManager *taskManager); + DownloadFirmwareService(PsychicHttpServer *server); void begin(); private: PsychicHttpServer *_server; - TaskManager *_taskManager; esp_err_t downloadUpdate(PsychicRequest *request, JsonVariant &json); }; diff --git a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.cpp b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.cpp index ebf1529..6dcfde9 100644 --- a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.cpp +++ b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.cpp @@ -18,13 +18,12 @@ ESP32SvelteKit::ESP32SvelteKit(PsychicHttpServer *server, unsigned int numberEndpoints) : _server(server), _numberEndpoints(numberEndpoints), - _taskManager(), _featureService(server), #if FT_ENABLED(USE_UPLOAD_FIRMWARE) _uploadFirmwareService(server), #endif #if FT_ENABLED(USE_DOWNLOAD_FIRMWARE) - _downloadFirmwareService(server, &_taskManager), + _downloadFirmwareService(server), #endif #if FT_ENABLED(USE_SLEEP) _sleepService(server), @@ -32,19 +31,13 @@ ESP32SvelteKit::ESP32SvelteKit(PsychicHttpServer *server, unsigned int numberEnd #if FT_ENABLED(USE_BATTERY) _batteryService(&_peripherals), #endif -#if FT_ENABLED(USE_ANALYTICS) - _analyticsService(&_taskManager), -#endif #if FT_ENABLED(USE_CAMERA) - _cameraService(server, &_taskManager), + _cameraService(server), _cameraSettingsService(server, &ESPFS), #endif _servoController(server, &ESPFS, &_peripherals), #if FT_ENABLED(USE_MOTION) - _motionService(_server, &_servoController, &_taskManager), -#endif -#if FT_ENABLED(USE_WS2812) - _ledService(&_taskManager), + _motionService(_server, &_servoController), #endif _peripherals(server, &ESPFS) { } @@ -53,7 +46,7 @@ void ESP32SvelteKit::begin() { ESP_LOGV("ESP32SvelteKit", "Loading settings from files system"); ESP_LOGI("Running Firmware Version: %s", APP_VERSION); ESPFS.begin(true); - + g_taskManager.begin(); _wifiService.begin(); _server->config.max_uri_handlers = _numberEndpoints; @@ -66,7 +59,7 @@ void ESP32SvelteKit::begin() { setupMDNS(); ESP_LOGV("ESP32SvelteKit", "Starting loop task"); - _taskManager.createTask(this->_loopImpl, "Spot main", 4096, this, 2, NULL, APPLICATION_CORE); + g_taskManager.createTask(this->_loopImpl, "Spot main", 4096, this, 2, NULL, APPLICATION_CORE); } void ESP32SvelteKit::setupServer() { @@ -198,16 +191,12 @@ void ESP32SvelteKit::startServices() { #if FT_ENABLED(USE_NTP) _ntpService.begin(); #endif -#if FT_ENABLED(USE_ANALYTICS) - _analyticsService.begin(); -#endif #if FT_ENABLED(USE_SLEEP) _sleepService.begin(); #endif #if FT_ENABLED(USE_BATTERY) _batteryService.begin(); #endif - _taskManager.begin(); _peripherals.begin(); _servoController.begin(); #if FT_ENABLED(USE_MOTION) @@ -217,9 +206,6 @@ void ESP32SvelteKit::startServices() { _cameraService.begin(); _cameraSettingsService.begin(); #endif -#if FT_ENABLED(USE_WS2812) - _ledService.begin(); -#endif } void IRAM_ATTR ESP32SvelteKit::loop() { diff --git a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h index a52e68f..47aa080 100644 --- a/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h +++ b/esp32/lib/ESP32-sveltekit/ESP32SvelteKit.h @@ -18,7 +18,7 @@ #include -#include +#include #include #include #include @@ -33,7 +33,7 @@ #include #include #include -#include +#include #include #include #include @@ -78,8 +78,6 @@ class ESP32SvelteKit { FeaturesService *getFeatureService() { return &_featureService; } - TaskManager *getTaskManager() { return &_taskManager; } - #if FT_ENABLED(USE_MOTION) MotionService *getMotionService() { return &_motionService; } #endif @@ -123,7 +121,6 @@ class ESP32SvelteKit { #if FT_ENABLED(USE_ANALYTICS) AnalyticsService _analyticsService; #endif - TaskManager _taskManager; #if FT_ENABLED(USE_MOTION) MotionService _motionService; #endif diff --git a/esp32/lib/ESP32-sveltekit/LEDService.h b/esp32/lib/ESP32-sveltekit/LEDService.h index 7f6383f..bc390c3 100644 --- a/esp32/lib/ESP32-sveltekit/LEDService.h +++ b/esp32/lib/ESP32-sveltekit/LEDService.h @@ -2,7 +2,7 @@ #define LEDService_h #include -#include +#include #ifndef WS2812_PIN #define WS2812_PIN 12 @@ -17,8 +17,6 @@ class LEDService { private: - TaskManager *_taskManager; - CRGB leds[WS2812_NUM_LEDS]; CRGBPalette16 currentPalette; TBlendType currentBlending; @@ -27,15 +25,13 @@ class LEDService { int direction = 1; public: - LEDService(TaskManager *taskManager) : _taskManager(taskManager) { + LEDService() { FastLED.addLeds(leds, WS2812_NUM_LEDS).setCorrection(TypicalLEDStrip); currentPalette = OceanColors_p; currentBlending = LINEARBLEND; } ~LEDService() {} - void begin() {} - void loop() { EXECUTE_EVERY_N_MS(1000 / 60, { if (_brightness >= 200) direction = -5; diff --git a/esp32/lib/ESP32-sveltekit/MotionService.h b/esp32/lib/ESP32-sveltekit/MotionService.h index 3e71a85..bd4a8ac 100644 --- a/esp32/lib/ESP32-sveltekit/MotionService.h +++ b/esp32/lib/ESP32-sveltekit/MotionService.h @@ -2,7 +2,7 @@ #define MotionService_h #include -#include +#include #include #include #include @@ -20,8 +20,8 @@ enum class MOTION_STATE { DEACTIVATED, IDLE, CALIBRATION, REST, STAND, CRAWL, WA class MotionService { public: - MotionService(PsychicHttpServer *server, ServoController *servoController, TaskManager *taskManager) - : _server(server), _servoController(servoController), _taskManager(taskManager) {} + MotionService(PsychicHttpServer *server, ServoController *servoController) + : _server(server), _servoController(servoController) {} void begin() { socket.onEvent(INPUT_EVENT, [&](JsonObject &root, int originId) { handleInput(root, originId); }); @@ -37,7 +37,7 @@ class MotionService { body_state.updateFeet(default_feet_positions); - _taskManager->createTask(this->_loopImpl, "MotionService", 4096, this, 3); + g_taskManager.createTask(this->_loopImpl, "MotionService", 4096, this, 3); } void anglesEvent(JsonObject &root, int originId) { @@ -145,7 +145,6 @@ class MotionService { private: PsychicHttpServer *_server; - TaskManager *_taskManager; ServoController *_servoController; Kinematics kinematics; ControllerCommand command = {0, 0, 0, 0, 0, 0, 0, 0}; diff --git a/esp32/lib/ESP32-sveltekit/AnalyticsService.h b/esp32/lib/ESP32-sveltekit/analytics_service.h similarity index 61% rename from esp32/lib/ESP32-sveltekit/AnalyticsService.h rename to esp32/lib/ESP32-sveltekit/analytics_service.h index 9c88f00..cca6c62 100644 --- a/esp32/lib/ESP32-sveltekit/AnalyticsService.h +++ b/esp32/lib/ESP32-sveltekit/analytics_service.h @@ -1,22 +1,9 @@ #pragma once -/** - * ESP32 SvelteKit - * - * A simple, secure and extensible framework for IoT projects for ESP32 platforms - * with responsive Sveltekit front-end built with TailwindCSS and DaisyUI. - * https://github.com/theelims/ESP32-sveltekit - * - * Copyright (C) 2023 theelims - * - * All Rights Reserved. This software may be modified and distributed under - * the terms of the LGPL v3 license. See the LICENSE file for details. - **/ - #include #include #include -#include +#include #include #include @@ -26,16 +13,13 @@ class AnalyticsService { public: - AnalyticsService(TaskManager *taskManager) : _taskManager(taskManager) {}; - - void begin() {}; + AnalyticsService() {}; void loop() { EXECUTE_EVERY_N_MS(ANALYTICS_INTERVAL, updateAnalytics()); }; - JsonDocument doc; - char message[MAX_ESP_ANALYTICS_SIZE]; private: - TaskManager *_taskManager; + JsonDocument doc; + char message[MAX_ESP_ANALYTICS_SIZE]; void updateAnalytics() { if (!socket.hasSubscribers(EVENT_ANALYTICS)) return; @@ -48,11 +32,11 @@ class AnalyticsService { doc["fs_used"] = ESPFS.usedBytes(); doc["fs_total"] = ESPFS.totalBytes(); doc["core_temp"] = temperatureRead(); - doc["cpu0_usage"] = _taskManager->getCpuUsage(0); - doc["cpu1_usage"] = _taskManager->getCpuUsage(1); - doc["cpu_usage"] = _taskManager->getCpuUsage(); + doc["cpu0_usage"] = g_taskManager.getCpuUsage(0); + doc["cpu1_usage"] = g_taskManager.getCpuUsage(1); + doc["cpu_usage"] = g_taskManager.getCpuUsage(); JsonArray tasks = doc["tasks"].to(); - for (auto const &task : _taskManager->getTasks()) { + for (auto const &task : g_taskManager.getTasks()) { JsonObject nested = tasks.add(); nested["name"] = task.name; nested["stackSize"] = task.stackSize; diff --git a/esp32/lib/ESP32-sveltekit/task_manager.cpp b/esp32/lib/ESP32-sveltekit/task_manager.cpp new file mode 100644 index 0000000..60b3f61 --- /dev/null +++ b/esp32/lib/ESP32-sveltekit/task_manager.cpp @@ -0,0 +1,3 @@ +#include + +TaskManager g_taskManager; diff --git a/esp32/lib/ESP32-sveltekit/TaskManager.h b/esp32/lib/ESP32-sveltekit/task_manager.h similarity index 98% rename from esp32/lib/ESP32-sveltekit/TaskManager.h rename to esp32/lib/ESP32-sveltekit/task_manager.h index ff570d6..f26c677 100644 --- a/esp32/lib/ESP32-sveltekit/TaskManager.h +++ b/esp32/lib/ESP32-sveltekit/task_manager.h @@ -4,6 +4,7 @@ #include #include #include +#include #define IDLE_STACK_SIZE 2048 #define DEFAULT_STACK_SIZE 2048 + 512 @@ -178,4 +179,6 @@ class CPUBurnerTask { static void CPUBurnerTaskEntry(void *instance) { static_cast(instance)->BurnCPUTask(); } void StartTask() { xTaskCreate(CPUBurnerTaskEntry, "CPUBurnerTask", 2048, this, tskIDLE_PRIORITY + 2, nullptr); } -}; \ No newline at end of file +}; + +extern TaskManager g_taskManager; \ No newline at end of file