Skip to content

Refactor: eliminate frequency-management code duplication between main.cpp and FrequencyManager #29

Description

@genestealer

Problem

The standalone MQTT firmware (src/main.cpp) contains its own inline re-implementation of every frequency-management concern that was subsequently extracted into src/services/frequency_manager.cpp / FrequencyManager. This means the same logic is maintained in two places and they can silently diverge.

Duplicated symbols

main.cpp (inline) src/services/frequency_manager.cpp (service class)
FEED_WDT() static helper FrequencyManager::feedWatchdog()
saveFrequencyOffset(float) raw EEPROM/Preferences FrequencyManager::saveFrequencyOffset(float) via StorageAbstraction
loadFrequencyOffset() raw EEPROM/Preferences FrequencyManager::loadFrequencyOffset()
performDeepFrequencyScan(float, float) identical two-phase algorithm FrequencyManager::performDeepFrequencyScan(float, float, statusCallback)
adaptiveFrequencyTracking(int8_t) FrequencyManager::adaptiveFrequencyTracking(int8_t)
Globals: storedFrequencyOffset, autoScanEnabled, cumulativeFreqError etc. Statics: s_storedOffset, s_autoScanEnabled, s_cumulativeFreqError etc.

Notable divergence already present

  • main.cpp performDeepFrequencyScan calls cc1101_init() and get_meter_data() directly; FrequencyManager uses injected callbacks.
  • main.cpp storage layer uses raw EEPROM/Preferences; FrequencyManager uses the StorageAbstraction wrapper.
  • FREQEST_TO_MHZ constant is defined locally in main.cpp; service class exposes it as a named constant.

Desired outcome

main.cpp should delegate all frequency-management operations to FrequencyManager:

  1. Register cc1101_init and get_meter_data as callbacks via FrequencyManager::setRadioInitCallback / setMeterReadCallback.
  2. Call FrequencyManager::begin(FREQUENCY) during setup instead of loadFrequencyOffset().
  3. Replace inline definitions in main.cpp with calls to the corresponding FrequencyManager static methods.
  4. Remove duplicate global frequency state variables from main.cpp; read from FrequencyManager::getOffset() / getTunedFrequency().

Files to change

  • src/main.cpp - remove inline implementations, wire up FrequencyManager
  • src/services/frequency_manager.h / .cpp - ensure public API covers all current main.cpp inline use
  • src/services/storage_abstraction.h - already abstracts EEPROM vs Preferences; main.cpp should use this

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions