1
0
mirror of https://github.com/esphome/esphome.git synced 2025-11-14 22:05:54 +00:00
This commit is contained in:
J. Nick Koston
2025-11-07 16:30:38 -06:00
parent c87d07ba70
commit 1b6471f4b0
7 changed files with 35 additions and 3 deletions

View File

@@ -244,6 +244,9 @@ async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
await cg.register_component(var, config)
# Track controller registration for StaticVector sizing
CORE.register_controller()
cg.add(var.set_port(config[CONF_PORT]))
if config[CONF_PASSWORD]:
cg.add_define("USE_API_PASSWORD")

View File

@@ -289,6 +289,9 @@ async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID], paren)
await cg.register_component(var, config)
# Track controller registration for StaticVector sizing
CORE.register_controller()
version = config[CONF_VERSION]
cg.add(paren.set_port(config[CONF_PORT]))

View File

@@ -910,6 +910,11 @@ class EsphomeCore:
"""
self.platform_counts[platform_name] += 1
def register_controller(self) -> None:
"""Track registration of a Controller for ControllerRegistry StaticVector sizing."""
controller_count = self.data.setdefault("controller_registry_count", 0)
self.data["controller_registry_count"] = controller_count + 1
@property
def cpp_main_section(self):
from esphome.cpp_generator import statement

View File

@@ -462,6 +462,15 @@ async def _add_platform_defines() -> None:
cg.add_define(f"USE_{platform_name.upper()}")
@coroutine_with_priority(CoroPriority.FINAL)
async def _add_controller_registry_define() -> None:
# Generate StaticVector size for ControllerRegistry
controller_count = CORE.data.get("controller_registry_count", 0)
if controller_count > 0:
cg.add_define("USE_CONTROLLER_REGISTRY")
cg.add_define("CONTROLLER_REGISTRY_MAX", controller_count)
@coroutine_with_priority(CoroPriority.CORE)
async def to_code(config: ConfigType) -> None:
cg.add_global(cg.global_ns.namespace("esphome").using)

View File

@@ -1,9 +1,12 @@
#include "esphome/core/controller_registry.h"
#ifdef USE_CONTROLLER_REGISTRY
#include "esphome/core/controller.h"
namespace esphome {
std::vector<Controller *> ControllerRegistry::controllers;
StaticVector<Controller *, CONTROLLER_REGISTRY_MAX> ControllerRegistry::controllers;
void ControllerRegistry::register_controller(Controller *controller) { controllers.push_back(controller); }
@@ -168,3 +171,5 @@ void ControllerRegistry::notify_update(update::UpdateEntity *obj) {
#endif
} // namespace esphome
#endif // USE_CONTROLLER_REGISTRY

View File

@@ -1,7 +1,10 @@
#pragma once
#include "esphome/core/defines.h"
#include <vector>
#ifdef USE_CONTROLLER_REGISTRY
#include "esphome/core/helpers.h"
// Forward declarations
namespace esphome {
@@ -234,7 +237,9 @@ class ControllerRegistry {
#endif
protected:
static std::vector<Controller *> controllers;
static StaticVector<Controller *, CONTROLLER_REGISTRY_MAX> controllers;
};
} // namespace esphome
#endif // USE_CONTROLLER_REGISTRY

View File

@@ -28,6 +28,7 @@
#define USE_BUTTON
#define USE_CAMERA
#define USE_CLIMATE
#define USE_CONTROLLER_REGISTRY
#define USE_COVER
#define USE_DATETIME
#define USE_DATETIME_DATE
@@ -296,6 +297,7 @@
#define USE_DASHBOARD_IMPORT
// Default counts for static analysis
#define CONTROLLER_REGISTRY_MAX 2
#define ESPHOME_COMPONENT_COUNT 50
#define ESPHOME_DEVICE_COUNT 10
#define ESPHOME_AREA_COUNT 10