Enable FreeRTOS SMP (multicore) (#90)

This commit is contained in:
Ken Van Hoeylandt
2024-11-25 21:57:20 +01:00
committed by GitHub
parent dfd9349e6c
commit d06137ba76
12 changed files with 22 additions and 18 deletions
+2 -1
View File
@@ -2,6 +2,7 @@
#include "I2cCompat.h"
#include "CoreTypes.h"
#include <climits>
#include <string>
#include <vector>
@@ -24,7 +25,7 @@ typedef struct {
/** Whether configuration can be changed. */
bool hasMutableConfiguration;
/** Read/write timeout (not related to mutex locking mechanism) */
TickType_t timeout;
unsigned long timeout;
/** Configuration that must be valid when initAtBoot is set to true. */
i2c_config_t config;
} Configuration;
+1 -3
View File
@@ -1,13 +1,11 @@
#pragma once
#ifdef ESP_TARGET
#include <hal/i2c_types.h>
#include <driver/i2c.h>
#else
#include <cstdint>
#include "portmacro.h"
typedef int esp_err_t;
@@ -26,7 +26,8 @@ typedef enum {
WifiMessageTypeRadioOff,
WifiMessageTypeScan,
WifiMessageTypeConnect,
WifiMessageTypeDisconnect
WifiMessageTypeDisconnect,
WifiMessageTypeAutoConnect,
} WifiMessageType;
typedef struct {
@@ -282,7 +283,7 @@ static bool copy_scan_list(Wifi* wifi) {
static void auto_connect(Wifi* wifi) {
for (int i = 0; i < wifi->scan_list_count; ++i) {
const char* ssid = (const char*)wifi->scan_list[i].ssid;
auto ssid = reinterpret_cast<const char*>(wifi->scan_list[i].ssid);
if (settings::contains(ssid)) {
static_assert(sizeof(wifi->scan_list[i].ssid) == (TT_WIFI_SSID_LIMIT + 1), "SSID size mismatch");
settings::WifiApSettings ap_settings;
@@ -334,7 +335,9 @@ static void event_handler(TT_UNUSED void* arg, esp_event_base_t event_base, int3
TT_LOG_I(TAG, "Finished scan");
if (copied_list && wifi_singleton->radio_state == WIFI_RADIO_ON) {
auto_connect(wifi_singleton);
WifiMessage message = {.type = WifiMessageTypeAutoConnect};
// No need to lock for queue
wifi_singleton->queue.put(&message, 100 / portTICK_PERIOD_MS);
}
}
unlock(wifi_singleton);
@@ -709,6 +712,11 @@ _Noreturn int32_t wifi_main(TT_UNUSED void* parameter) {
disconnect_internal_but_keep_active(wifi);
unlock(wifi);
break;
case WifiMessageTypeAutoConnect:
lock(wifi);
auto_connect(wifi_singleton);
unlock(wifi);
break;
}
}