firmware-base/docs/config.md

118 lines
4.3 KiB
Markdown

---
title: Configuration System
description: Global configuration and constants for firmware
keywords: [configuration, pins, platform, ESP32, defines, settings]
---
## Configuration System
**Path**: [src/config.h](../src/config.h)
**Revision History**: Initial documentation
The configuration system is a centralized header file containing all global settings, pin definitions, platform-specific configurations, and feature flags. It provides a unified interface for configuring hardware dependencies, communication protocols, and enabling/disabling various features of the firmware.
## REQUIREMENTS
- ESP-32 microcontroller (with support for other platforms like Portenta H7, Controllino Mega)
- Platform.io development environment
- Configuration is designed to work with Modbus-485 protocol for industrial applications
## FEATURES
- Automatic platform detection (ESP32, Portenta H7, Controllino Mega, Arduino Uno)
- Component ID enumeration for consistent system-wide component identification
- Configurable GPIO pin assignments for various peripherals
- Network configuration for WiFi in both station and access point modes
- Modbus TCP and RS485 communication settings
- Temperature profile and signal plotting configuration
- Customizable debugging and logging options
- Feature flags for enabling/disabling system components
## DEPENDENCIES
- [Arduino.h](https://www.arduino.cc/reference/en/) - Core Arduino library
- [config_adv.h](../src/config_adv.h) - Advanced configuration settings
- [stdint.h](https://en.cppreference.com/w/cpp/header/cstdint) - Standard integer types
```mermaid
graph TD
config[config.h] --> arduino[Arduino.h]
config --> configadv[config_adv.h]
config --> stdint[stdint.h]
config --> platformlibs[Platform-specific Libraries]
```
## BEHAVIOUR
The configuration system is a static definition file that controls the behavior of the firmware at compile time. It doesn't have runtime behavior itself, but dictates which components are initialized and how they operate.
```mermaid
graph TD
Config[Configuration System] --> PlatformDetection[Platform Detection]
Config --> ComponentIDs[Component ID Assignment]
Config --> FeatureFlags[Feature Flags]
FeatureFlags --> EnabledComponents[Enabled Components]
FeatureFlags --> DisabledComponents[Disabled Components]
Config --> NetworkSettings[Network Settings]
Config --> PinAssignments[Pin Assignments]
```
## TODOS
### PERFORMANCE
- Consider separating platform-specific configurations into dedicated files
- Evaluate the impact of enabled debugging flags on performance
- Review pin assignment efficiency for optimal GPIO usage
### SECURITY
- WiFi credentials are hardcoded - implement secure storage or configuration mechanism
- Consider encryption for sensitive communications
- Review and secure default access point settings
### COMPLIANCE
- Review for compliance with industrial standards
- Consider adding provisions for safety-critical systems where applicable
- Document electrical specifications for compliance with relevant regulations
### RECOMMENDATIONS
- Use preprocessor guards when modifying to ensure backward compatibility
- When adding new components, follow the existing ID assignment pattern
- Consider implementing a runtime configuration system to complement static definitions
- Separate network credentials into a separate secure file
## EXAMPLE
The configuration system is used primarily as an include in other components. For example, when initializing an LED Feedback component:
```cpp
#ifdef PIN_LED_FEEDBACK_0
ledFeedback_0 = new LEDFeedback(
this, // owner
PIN_LED_FEEDBACK_0, // pin
LED_PIXEL_COUNT_0, // pixelCount
ID_LED_FEEDBACK_0, // id
LED_FEEDBACK_0_MB_ADDR // modbusAddress
);
if (ledFeedback_0)
{
components.push_back(ledFeedback_0);
Log.infoln(F("LEDFeedback_0 initialized. Pin:%d, Count:%d, ID:%d, MB:%d"),
PIN_LED_FEEDBACK_0, LED_PIXEL_COUNT_0,
ID_LED_FEEDBACK_0, LED_FEEDBACK_0_MB_ADDR);
}
else
{
Log.errorln(F("LEDFeedback_0 initialization failed."));
}
#endif
```
### References
- ESP32 GPIO Pin documentation: [ESP32 Technical Reference Manual](https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf)