🕊️ Makes task manager global

This commit is contained in:
Rune Harlyk
2024-11-08 13:34:44 +01:00
committed by Rune Harlyk
parent a3fc3eca2e
commit 698b7fbba9
11 changed files with 37 additions and 79 deletions
+2 -3
View File
@@ -29,8 +29,7 @@ sensor_t *safe_sensor_get() {
void safe_sensor_return() { xSemaphoreGive(cameraMutex); } void safe_sensor_return() { xSemaphoreGive(cameraMutex); }
CameraService::CameraService(PsychicHttpServer *server, TaskManager *taskManager) CameraService::CameraService(PsychicHttpServer *server) : _server(server) {}
: _server(server), _taskManager(taskManager) {}
void CameraService::begin() { void CameraService::begin() {
InitializeCamera(); InitializeCamera();
_server->on(STILL_SERVICE_PATH, HTTP_GET, [this](PsychicRequest *request) { return cameraStill(request); }); _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) { 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)); vTaskDelay(pdMS_TO_TICKS(100));
return ESP_OK; return ESP_OK;
} }
+2 -3
View File
@@ -3,7 +3,7 @@
#include <ArduinoJson.h> #include <ArduinoJson.h>
#include <PsychicHttp.h> #include <PsychicHttp.h>
#include <TaskManager.h> #include <task_manager.h>
#include <WiFi.h> #include <WiFi.h>
#include <async_worker.h> #include <async_worker.h>
#include <Features.h> #include <Features.h>
@@ -27,13 +27,12 @@ void safe_sensor_return();
class CameraService { class CameraService {
public: public:
CameraService(PsychicHttpServer *server, TaskManager *taskManager); CameraService(PsychicHttpServer *server);
void begin(); void begin();
private: private:
PsychicHttpServer *_server; PsychicHttpServer *_server;
TaskManager *_taskManager;
esp_err_t cameraStill(PsychicRequest *request); esp_err_t cameraStill(PsychicRequest *request);
esp_err_t cameraStream(PsychicRequest *request); esp_err_t cameraStream(PsychicRequest *request);
esp_err_t InitializeCamera(); esp_err_t InitializeCamera();
@@ -89,8 +89,7 @@ void updateTask(void *param) {
vTaskDelete(NULL); vTaskDelete(NULL);
} }
DownloadFirmwareService::DownloadFirmwareService(PsychicHttpServer *server, TaskManager *taskManager) DownloadFirmwareService::DownloadFirmwareService(PsychicHttpServer *server) : _server(server) {}
: _server(server), _taskManager(taskManager) {}
void DownloadFirmwareService::begin() { void DownloadFirmwareService::begin() {
_server->on(GITHUB_FIRMWARE_PATH, HTTP_POST, _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()); socket.emit(EVENT_DOWNLOAD_OTA, output.c_str());
if (_taskManager->createTask(&updateTask, // Function that should be called if (g_taskManager.createTask(&updateTask, "Firmware download", OTA_TASK_STACK_SIZE, &downloadURL,
"Firmware download", // Name of the task (for debugging) (configMAX_PRIORITIES - 1), NULL, 1) != pdPASS) {
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) {
ESP_LOGE("Download OTA", "Couldn't create download OTA task"); ESP_LOGE("Download OTA", "Couldn't create download OTA task");
return request->reply(500); return request->reply(500);
} }
@@ -23,7 +23,7 @@
#include <HTTPClient.h> #include <HTTPClient.h>
#include <HTTPUpdate.h> #include <HTTPUpdate.h>
#include <TaskManager.h> #include <task_manager.h>
// #include <SSLCertBundle.h> // #include <SSLCertBundle.h>
#define GITHUB_FIRMWARE_PATH "/api/downloadUpdate" #define GITHUB_FIRMWARE_PATH "/api/downloadUpdate"
@@ -32,12 +32,11 @@
class DownloadFirmwareService { class DownloadFirmwareService {
public: public:
DownloadFirmwareService(PsychicHttpServer *server, TaskManager *taskManager); DownloadFirmwareService(PsychicHttpServer *server);
void begin(); void begin();
private: private:
PsychicHttpServer *_server; PsychicHttpServer *_server;
TaskManager *_taskManager;
esp_err_t downloadUpdate(PsychicRequest *request, JsonVariant &json); esp_err_t downloadUpdate(PsychicRequest *request, JsonVariant &json);
}; };
+5 -19
View File
@@ -18,13 +18,12 @@
ESP32SvelteKit::ESP32SvelteKit(PsychicHttpServer *server, unsigned int numberEndpoints) ESP32SvelteKit::ESP32SvelteKit(PsychicHttpServer *server, unsigned int numberEndpoints)
: _server(server), : _server(server),
_numberEndpoints(numberEndpoints), _numberEndpoints(numberEndpoints),
_taskManager(),
_featureService(server), _featureService(server),
#if FT_ENABLED(USE_UPLOAD_FIRMWARE) #if FT_ENABLED(USE_UPLOAD_FIRMWARE)
_uploadFirmwareService(server), _uploadFirmwareService(server),
#endif #endif
#if FT_ENABLED(USE_DOWNLOAD_FIRMWARE) #if FT_ENABLED(USE_DOWNLOAD_FIRMWARE)
_downloadFirmwareService(server, &_taskManager), _downloadFirmwareService(server),
#endif #endif
#if FT_ENABLED(USE_SLEEP) #if FT_ENABLED(USE_SLEEP)
_sleepService(server), _sleepService(server),
@@ -32,19 +31,13 @@ ESP32SvelteKit::ESP32SvelteKit(PsychicHttpServer *server, unsigned int numberEnd
#if FT_ENABLED(USE_BATTERY) #if FT_ENABLED(USE_BATTERY)
_batteryService(&_peripherals), _batteryService(&_peripherals),
#endif #endif
#if FT_ENABLED(USE_ANALYTICS)
_analyticsService(&_taskManager),
#endif
#if FT_ENABLED(USE_CAMERA) #if FT_ENABLED(USE_CAMERA)
_cameraService(server, &_taskManager), _cameraService(server),
_cameraSettingsService(server, &ESPFS), _cameraSettingsService(server, &ESPFS),
#endif #endif
_servoController(server, &ESPFS, &_peripherals), _servoController(server, &ESPFS, &_peripherals),
#if FT_ENABLED(USE_MOTION) #if FT_ENABLED(USE_MOTION)
_motionService(_server, &_servoController, &_taskManager), _motionService(_server, &_servoController),
#endif
#if FT_ENABLED(USE_WS2812)
_ledService(&_taskManager),
#endif #endif
_peripherals(server, &ESPFS) { _peripherals(server, &ESPFS) {
} }
@@ -53,7 +46,7 @@ void ESP32SvelteKit::begin() {
ESP_LOGV("ESP32SvelteKit", "Loading settings from files system"); ESP_LOGV("ESP32SvelteKit", "Loading settings from files system");
ESP_LOGI("Running Firmware Version: %s", APP_VERSION); ESP_LOGI("Running Firmware Version: %s", APP_VERSION);
ESPFS.begin(true); ESPFS.begin(true);
g_taskManager.begin();
_wifiService.begin(); _wifiService.begin();
_server->config.max_uri_handlers = _numberEndpoints; _server->config.max_uri_handlers = _numberEndpoints;
@@ -66,7 +59,7 @@ void ESP32SvelteKit::begin() {
setupMDNS(); setupMDNS();
ESP_LOGV("ESP32SvelteKit", "Starting loop task"); 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() { void ESP32SvelteKit::setupServer() {
@@ -198,16 +191,12 @@ void ESP32SvelteKit::startServices() {
#if FT_ENABLED(USE_NTP) #if FT_ENABLED(USE_NTP)
_ntpService.begin(); _ntpService.begin();
#endif #endif
#if FT_ENABLED(USE_ANALYTICS)
_analyticsService.begin();
#endif
#if FT_ENABLED(USE_SLEEP) #if FT_ENABLED(USE_SLEEP)
_sleepService.begin(); _sleepService.begin();
#endif #endif
#if FT_ENABLED(USE_BATTERY) #if FT_ENABLED(USE_BATTERY)
_batteryService.begin(); _batteryService.begin();
#endif #endif
_taskManager.begin();
_peripherals.begin(); _peripherals.begin();
_servoController.begin(); _servoController.begin();
#if FT_ENABLED(USE_MOTION) #if FT_ENABLED(USE_MOTION)
@@ -217,9 +206,6 @@ void ESP32SvelteKit::startServices() {
_cameraService.begin(); _cameraService.begin();
_cameraSettingsService.begin(); _cameraSettingsService.begin();
#endif #endif
#if FT_ENABLED(USE_WS2812)
_ledService.begin();
#endif
} }
void IRAM_ATTR ESP32SvelteKit::loop() { void IRAM_ATTR ESP32SvelteKit::loop() {
+2 -5
View File
@@ -18,7 +18,7 @@
#include <Arduino.h> #include <Arduino.h>
#include <AnalyticsService.h> #include <analytics_service.h>
#include <BatteryService.h> #include <BatteryService.h>
#include <filesystem.h> #include <filesystem.h>
#include <DownloadFirmwareService.h> #include <DownloadFirmwareService.h>
@@ -33,7 +33,7 @@
#include <CameraService.h> #include <CameraService.h>
#include <CameraSettingsService.h> #include <CameraSettingsService.h>
#include <PsychicHttp.h> #include <PsychicHttp.h>
#include <TaskManager.h> #include <task_manager.h>
#include <UploadFirmwareService.h> #include <UploadFirmwareService.h>
#include <WiFi.h> #include <WiFi.h>
#include <wifi_service.h> #include <wifi_service.h>
@@ -78,8 +78,6 @@ class ESP32SvelteKit {
FeaturesService *getFeatureService() { return &_featureService; } FeaturesService *getFeatureService() { return &_featureService; }
TaskManager *getTaskManager() { return &_taskManager; }
#if FT_ENABLED(USE_MOTION) #if FT_ENABLED(USE_MOTION)
MotionService *getMotionService() { return &_motionService; } MotionService *getMotionService() { return &_motionService; }
#endif #endif
@@ -123,7 +121,6 @@ class ESP32SvelteKit {
#if FT_ENABLED(USE_ANALYTICS) #if FT_ENABLED(USE_ANALYTICS)
AnalyticsService _analyticsService; AnalyticsService _analyticsService;
#endif #endif
TaskManager _taskManager;
#if FT_ENABLED(USE_MOTION) #if FT_ENABLED(USE_MOTION)
MotionService _motionService; MotionService _motionService;
#endif #endif
+2 -6
View File
@@ -2,7 +2,7 @@
#define LEDService_h #define LEDService_h
#include <FastLED.h> #include <FastLED.h>
#include <TaskManager.h> #include <task_manager.h>
#ifndef WS2812_PIN #ifndef WS2812_PIN
#define WS2812_PIN 12 #define WS2812_PIN 12
@@ -17,8 +17,6 @@
class LEDService { class LEDService {
private: private:
TaskManager *_taskManager;
CRGB leds[WS2812_NUM_LEDS]; CRGB leds[WS2812_NUM_LEDS];
CRGBPalette16 currentPalette; CRGBPalette16 currentPalette;
TBlendType currentBlending; TBlendType currentBlending;
@@ -27,15 +25,13 @@ class LEDService {
int direction = 1; int direction = 1;
public: public:
LEDService(TaskManager *taskManager) : _taskManager(taskManager) { LEDService() {
FastLED.addLeds<CHIPSET, WS2812_PIN, COLOR_ORDER>(leds, WS2812_NUM_LEDS).setCorrection(TypicalLEDStrip); FastLED.addLeds<CHIPSET, WS2812_PIN, COLOR_ORDER>(leds, WS2812_NUM_LEDS).setCorrection(TypicalLEDStrip);
currentPalette = OceanColors_p; currentPalette = OceanColors_p;
currentBlending = LINEARBLEND; currentBlending = LINEARBLEND;
} }
~LEDService() {} ~LEDService() {}
void begin() {}
void loop() { void loop() {
EXECUTE_EVERY_N_MS(1000 / 60, { EXECUTE_EVERY_N_MS(1000 / 60, {
if (_brightness >= 200) direction = -5; if (_brightness >= 200) direction = -5;
+4 -5
View File
@@ -2,7 +2,7 @@
#define MotionService_h #define MotionService_h
#include <event_socket.h> #include <event_socket.h>
#include <TaskManager.h> #include <task_manager.h>
#include <Kinematics.h> #include <Kinematics.h>
#include <ServoController.h> #include <ServoController.h>
#include <Gait/GaitState.h> #include <Gait/GaitState.h>
@@ -20,8 +20,8 @@ enum class MOTION_STATE { DEACTIVATED, IDLE, CALIBRATION, REST, STAND, CRAWL, WA
class MotionService { class MotionService {
public: public:
MotionService(PsychicHttpServer *server, ServoController *servoController, TaskManager *taskManager) MotionService(PsychicHttpServer *server, ServoController *servoController)
: _server(server), _servoController(servoController), _taskManager(taskManager) {} : _server(server), _servoController(servoController) {}
void begin() { void begin() {
socket.onEvent(INPUT_EVENT, [&](JsonObject &root, int originId) { handleInput(root, originId); }); socket.onEvent(INPUT_EVENT, [&](JsonObject &root, int originId) { handleInput(root, originId); });
@@ -37,7 +37,7 @@ class MotionService {
body_state.updateFeet(default_feet_positions); 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) { void anglesEvent(JsonObject &root, int originId) {
@@ -145,7 +145,6 @@ class MotionService {
private: private:
PsychicHttpServer *_server; PsychicHttpServer *_server;
TaskManager *_taskManager;
ServoController *_servoController; ServoController *_servoController;
Kinematics kinematics; Kinematics kinematics;
ControllerCommand command = {0, 0, 0, 0, 0, 0, 0, 0}; ControllerCommand command = {0, 0, 0, 0, 0, 0, 0, 0};
@@ -1,22 +1,9 @@
#pragma once #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 <ArduinoJson.h> #include <ArduinoJson.h>
#include <filesystem.h> #include <filesystem.h>
#include <event_socket.h> #include <event_socket.h>
#include <TaskManager.h> #include <task_manager.h>
#include <WiFi.h> #include <WiFi.h>
#include <Timing.h> #include <Timing.h>
@@ -26,16 +13,13 @@
class AnalyticsService { class AnalyticsService {
public: public:
AnalyticsService(TaskManager *taskManager) : _taskManager(taskManager) {}; AnalyticsService() {};
void begin() {};
void loop() { EXECUTE_EVERY_N_MS(ANALYTICS_INTERVAL, updateAnalytics()); }; void loop() { EXECUTE_EVERY_N_MS(ANALYTICS_INTERVAL, updateAnalytics()); };
JsonDocument doc;
char message[MAX_ESP_ANALYTICS_SIZE];
private: private:
TaskManager *_taskManager; JsonDocument doc;
char message[MAX_ESP_ANALYTICS_SIZE];
void updateAnalytics() { void updateAnalytics() {
if (!socket.hasSubscribers(EVENT_ANALYTICS)) return; if (!socket.hasSubscribers(EVENT_ANALYTICS)) return;
@@ -48,11 +32,11 @@ class AnalyticsService {
doc["fs_used"] = ESPFS.usedBytes(); doc["fs_used"] = ESPFS.usedBytes();
doc["fs_total"] = ESPFS.totalBytes(); doc["fs_total"] = ESPFS.totalBytes();
doc["core_temp"] = temperatureRead(); doc["core_temp"] = temperatureRead();
doc["cpu0_usage"] = _taskManager->getCpuUsage(0); doc["cpu0_usage"] = g_taskManager.getCpuUsage(0);
doc["cpu1_usage"] = _taskManager->getCpuUsage(1); doc["cpu1_usage"] = g_taskManager.getCpuUsage(1);
doc["cpu_usage"] = _taskManager->getCpuUsage(); doc["cpu_usage"] = g_taskManager.getCpuUsage();
JsonArray tasks = doc["tasks"].to<JsonArray>(); JsonArray tasks = doc["tasks"].to<JsonArray>();
for (auto const &task : _taskManager->getTasks()) { for (auto const &task : g_taskManager.getTasks()) {
JsonObject nested = tasks.add<JsonObject>(); JsonObject nested = tasks.add<JsonObject>();
nested["name"] = task.name; nested["name"] = task.name;
nested["stackSize"] = task.stackSize; nested["stackSize"] = task.stackSize;
@@ -0,0 +1,3 @@
#include <task_manager.h>
TaskManager g_taskManager;
@@ -4,6 +4,7 @@
#include <map> #include <map>
#include <string> #include <string>
#include <vector> #include <vector>
#include <Arduino.h>
#define IDLE_STACK_SIZE 2048 #define IDLE_STACK_SIZE 2048
#define DEFAULT_STACK_SIZE 2048 + 512 #define DEFAULT_STACK_SIZE 2048 + 512
@@ -178,4 +179,6 @@ class CPUBurnerTask {
static void CPUBurnerTaskEntry(void *instance) { static_cast<CPUBurnerTask *>(instance)->BurnCPUTask(); } static void CPUBurnerTaskEntry(void *instance) { static_cast<CPUBurnerTask *>(instance)->BurnCPUTask(); }
void StartTask() { xTaskCreate(CPUBurnerTaskEntry, "CPUBurnerTask", 2048, this, tskIDLE_PRIORITY + 2, nullptr); } void StartTask() { xTaskCreate(CPUBurnerTaskEntry, "CPUBurnerTask", 2048, this, tskIDLE_PRIORITY + 2, nullptr); }
}; };
extern TaskManager g_taskManager;