Skip to content

Energy-Management-File-Structure-Rework #686

@lpbeliveau-silabs

Description

@lpbeliveau-silabs

Energy Management App Folder - Dependencies Strucure

Current Build Structure

graph TD
    %% Energy-Management-App Folder
        subgraph "project-root/examples/"
        Energy-Management-App["📁 Energy-Management-App/"]
    end


    %% Core Energy Management Folders
    Common["📁 common/<br/>EnergyManagementAppCommonMain<br/>❌ EnergyTimeUtils (EVSE-specific!)<br/>Identify<br/>❌ CmdLineOptions (DEM-specific!)"]

    DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>DEMTestEventTriggers<br/>device-energy-management-mode"]

    EVSE["📁 energy-evse/<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks<br/>EnergyEvseEventTriggers"]

    Reporting["📁 energy-reporting/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>FakeReadings<br/>ElectricalSensorInit<br/>EnergyReportingEventTriggers"]

    WHM["📁 water-heater/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"]

    Tests["📁 tests/<br/>TestEvseTargetsStorage"]

    %% Platform Dependencies
    Energy-Management-App --> Common
    Energy-Management-App --> Tests
    Energy-Management-App --> EVSE
    Energy-Management-App --> DEM
    Energy-Management-App --> Reporting
    Energy-Management-App --> WHM

    %% CIRCULAR DEPENDENCIES - The Problem!
    Common -.->|includes headers| DEM
    Common -.->|includes headers| EVSE
    Common -.->|includes headers| WHM
    Common -.->|includes headers| Reporting

    DEM -.->|includes EnergyManagementAppCommonMain.h| Common
    EVSE -.->|includes EnergyManagementAppCommonMain.h| Common
    WHM -.->|includes EnergyManagementAppCommonMain.h| Common
    Reporting -.->|includes EnergyManagementAppCommonMain.h| Common

    %% Cross-Module Dependencies
    EVSE -.->|includes DEM headers| DEM
    EVSE -.->|includes Reporting headers| Reporting
    Reporting -.->|includes DEM headers| DEM

    %% Additional Circular Dependency: DEM ↔ Reporting
    DEM -.->|DEMTestEventTriggers includes| Reporting
    Reporting -.->|FakeReadings includes DEMManufacturerDelegate| DEM

    %% CmdLineOptions Misplacement Issue
    Common -.->|CmdLineOptions depends on| DEM
    EVSE -.->|includes CmdLineOptions| Common
    DEM -.->|includes CmdLineOptions| Common

    %% EnergyTimeUtils Misplacement Issue
    Common -.->|EnergyTimeUtils depends on| EVSE

    %% Test Dependencies
    Tests -.->|includes EVSE headers| EVSE

    %% Styling
    classDef circular fill:#ffebee,stroke:#c62828,stroke-width:3px,stroke-dasharray: 5 5
    classDef folder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    classDef platform fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class Common,DEM,EVSE,WHM,Reporting circular
    class DEM,EVSE,Reporting,WHM,Tests folder
    class Energy-Management-App platform
    class EVSE,Reporting crossModule
Loading

Circular Dependencies Identified

Common ↔ All Modules

  • Common includes headers from: DEM, EVSE, WHM, Reporting
  • All modules include: EnergyManagementAppCommonMain.h

Cross-Module Dependencies

  • EVSE depends on: DEM, Reporting
  • Reporting depends on: DEM

Cross-App Dependencies

  • WHM depends on: EnergyManagementAppCommonMain.h (Common)
  • EVSE depends on: EnergyManagementAppCommonMain.h (Common)
  • Common depends on: EVSE, WHM

Additional Circular Dependency: DEM ↔ Reporting

  • DEMTestEventTriggers.cpp includes FakeReadings.h (from Reporting)
  • FakeReadings.cpp includes DEMManufacturerDelegate.h (from DEM)
  • This creates a direct circular dependency between DEM and Reporting
    modules

CmdLineOptions Misplacement

  • CmdLineOptions is in common/ but depends on device-energy-management
    namespace
  • EVSE and DEM both include CmdLineOptions from common/
  • CmdLineOptions should be moved to device-energy-management/ or
    energy-evse/

EnergyTimeUtils Misplacement

  • EnergyTimeUtils is in common/ but depends on EnergyEvse namespace
  • EnergyTimeUtils should be moved to energy-evse/ folder |

Root Cause

The EnergyManagementAppCommonMain.h header acts as a central hub that all
modules depend on, while simultaneously depending on all module headers. This
creates a circular dependency web.

New Build Structure

graph TD

    subgraph "project-root/examples/"
        Evse-App["📁 Evse-App/"]
        Energy-Management-Folder["📁 Energy-Management/"]
        WHM-App["📁 WHM-App/"]
    end

    %% EVSE App Folders
    EvseCommon["📁 evse-common/<br/>Identify<br/>EnergyTimeUtils<br/>EnergyEvseMain<br/>EnergyEvseManager<br/>EnergyEvseDelegateImpl<br/>EVSEManufacturerImpl<br/>EnergyEvseTargetsStore<br/>ChargingTargetsMemMgr<br/>energy-evse-mode<br/>EVSECallbacks"]

    %% EVSE App Folders
    EvseTests["📁 tests/<br/>TestEvseTargetsStorage<br/>EnergyEvseEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"]

    %% WHM App Folders
    WHMCommon["📁 water-heater-common/<br/>WhmMain<br/>WhmInstance<br/>WhmDelegateImpl<br/>WhmManufacturer<br/>water-heater-mode"]

    %% WHM App Folders
    WHMTests["📁 tests/<br/>TestWhmTargetsStorage<br/>WhmEventTriggers<br/>DEMTestEventTriggers<br/>ElectricalSensorEventTriggers<br/>FakeReadings"]

    %% Energy-Management-Folder Folders
    DEM["📁 device-energy-management/<br/>DeviceEnergyManagementManager<br/>DeviceEnergyManagementDelegateImpl<br/>DEMManufacturerDelegate<br/>device-energy-management-mode<br/>CmdLineOptions"]
    %% Energy-Management-Folder Folders
    ElectricalSensor["📁 electrical-sensor/<br/>ElectricalPowerMeasurementDelegate<br/>PowerTopologyDelegate<br/>ElectricalSensorInit"]

    %% Folder structure

    %% Evse-App Folders
    Evse-App --> EvseCommon
    Evse-App --> EvseTests
    %% Evse-App Dependencies
    EvseCommon -.->|includes headers| DEM
    EvseCommon -.->|includes headers| ElectricalSensor

    %% Evse-App Test Dependencies
    EvseTests -.->|includes EVSE headers| EvseCommon
    EvseTests -.->|includes DEM headers| DEM
    EvseTests -.->|includes ElectricalSensor headers| ElectricalSensor

    %% WHM-App Folders
    WHM-App --> WHMCommon
    WHM-App --> WHMTests

    %% WHM-App Dependencies
    WHMCommon -.->|includes headers| DEM
    WHMCommon -.->|includes headers| ElectricalSensor

    %% WHM Test Dependencies
    WHMTests -.->|includes WHM headers| WHMCommon
    WHMTests -.->|includes ElectricalSensor headers| ElectricalSensor
    WHMTests -.->|includes DEM headers| DEM

    %% Energy-Management-Folder Folders
    Energy-Management-Folder --> DEM
    Energy-Management-Folder --> ElectricalSensor
    %% Styling
    classDef Appfolder fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
    classDef ApplicationFolder fill:#e8f5e8,stroke:#2e7d32,stroke-width:2px
    classDef crossModule fill:#fff3e0,stroke:#ef6c00,stroke-width:2px

    class WHMTests,WHMCommon,EvseTests,EvseCommon Appfolder
    class Evse-App,WHM-App ApplicationFolder
    class Energy-Management-Folder,DEM,ElectricalSensor crossModule
Loading

Improvements

  • Separation of Apps
  • Separation of Modules
  • Hierachical Dependencies
  • Removed EnergyManagementAppCommonMain.h EVSE makers should not have to
    specify they are not making a water heater and vice versa.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions