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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions