Factory Configuration
Overview
The factory configuration system provides a flexible mechanism to customize C Pro camera behavior for different deployment scenarios, customers, and use cases. Configuration files are embedded during the build process and control system behavior at runtime.
Configuration Structure
Directory Layout
rsc_config/
├── config_DEFAULT/ # Default minimal configuration
├── config_DEMO/ # Demo/trial version settings
├── config_DEV/ # Development environment
├── config_EDU/ # Educational institutions
├── config_rc_DMG/ # C Pro DMG variant
└── config_VB/ # VB customer variant
Each configuration directory can contain:
factory_config.json- System behavior and feature flagslicense_config.json- License and feature restrictionsstyle_variables_config.json- UI customizationversion_flavor- Build variant identifierimgs/- Custom UI assetshdmi_imgs/- HDMI output specific assetsstylesheets/- CSS overrides
Factory Configuration File
Structure
{
"systemName": "C Pro DMG",
"modelNumber": "RC-DMG-4K",
"features": {
"recording": true,
"streaming": true,
"onvif": true,
"webrtc": false,
"pip": true,
"zoom": true,
"autoRotate": true
},
"hardware": {
"cameraHeads": 2,
"maxResolution": "3840x2160",
"maxFps": 60,
"hasLightControl": true,
"hasRotationMotor": true,
"hasFpgaTemp": true
},
"network": {
"defaultDhcp": true,
"allowStaticIp": true,
"allowWifi": false,
"defaultHostname": "rotoclear"
},
"storage": {
"localEnabled": true,
"networkEnabled": true,
"backupEnabled": true,
"minDiskSpaceGB": 10
},
"ui": {
"showWizard": true,
"defaultLanguage": "en",
"availableLanguages": ["en", "de"],
"theme": "default"
}
}
Key Sections
Features
Controls which system features are enabled:
- recording - Video recording capabilities
- streaming - RTSP/WebRTC streaming
- onvif - ONVIF protocol support
- webrtc - WebRTC streaming
- pip - Picture-in-picture mode
- zoom - Digital zoom functionality
- autoRotate - Automatic rotation detection
Hardware
Defines hardware-specific capabilities:
- cameraHeads - Number of camera inputs
- maxResolution - Maximum video resolution
- maxFps - Maximum frames per second
- hasLightControl - Integrated lighting control
- hasRotationMotor - Motorized rotation platform
- hasFpgaTemp - FPGA temperature monitoring
Network
Network configuration defaults:
- defaultDhcp - Use DHCP by default
- allowStaticIp - Allow manual IP configuration
- allowWifi - Enable WiFi support
- defaultHostname - Default network hostname
License Configuration
Structure
{
"licenseType": "commercial",
"expirationDate": null,
"maxCameras": 2,
"features": {
"recording": true,
"cloudUpload": false,
"advancedAnalytics": false
},
"customer": {
"name": "Acme Corporation",
"id": "ACME-001",
"support": "premium"
},
"restrictions": {
"maxRecordingDays": 365,
"maxUsers": 10,
"watermark": false
}
}
License Types
- commercial - Full-featured commercial license
- educational - Educational institution license with restrictions
- demo - Time-limited demonstration license
- development - Development and testing only
Style Variables Configuration
Customize UI appearance without code changes:
{
"colors": {
"primary": "#123345",
"secondary": "#FF6B35",
"accent": "#FFA500",
"background": "#FFFFFF",
"text": "#333333"
},
"branding": {
"logo": "custom-logo.svg",
"favicon": "custom-favicon.ico",
"companyName": "Custom Medical Equipment"
},
"layout": {
"showCompanyLogo": true,
"compactMode": false,
"hideAdvancedSettings": true
}
}
Build Integration
Configuration Selection
The build system selects configuration using the CONFIG_VARIANT environment variable:
# Build with specific configuration
CONFIG_VARIANT=rc_DMG nim c rotordream.nim
# Or use build script
nim c -r tools/buildRelease.nim --variant=rc_DMG
Resource Embedding
The buildResourceConfigs.nim tool embeds configuration files into the binary:
# Embeds all files from selected config directory
proc embedConfig*(variant: string) =
let configDir = "rsc_config" / "config_" & variant
for file in walkDirRec(configDir):
let resourceKey = file.relativePath(configDir)
embedResource(resourceKey, readFile(file))
Runtime Access
Loading Configuration
import ./state/factory_config
# Access factory configuration
let config = getFactoryConfig()
if config.features.recording:
initRecordingSystem()
if config.hardware.hasLightControl:
initLightControl()
Configuration Precedence
- Embedded factory config - Compiled into binary
- Decrypted runtime config - For licensed features
- User settings - Stored in LocalStorage
- Default values - Hardcoded fallbacks
Configuration Variants
config_DEFAULT
Minimal configuration for basic functionality. Used when no specific variant is selected.
config_DEMO
- Time-limited operation (30 days)
- Watermark on video output
- Limited recording capacity
- All features enabled for evaluation
config_DEV
- Extended logging enabled
- Debug endpoints exposed
- Relaxed security for development
- Simulator mode available
config_EDU
- Educational institution branding
- Extended recording retention
- Multi-user collaboration features
- Reduced cost tier
config_rc_DMG
- C Pro DMG product line
- Dual camera head support
- Integrated rotation control
- Medical-grade recording quality
config_VB
- Customer-specific customization
- Custom branding and colors
- Specialized workflow integration
- Unique feature set
Security Considerations
Encryption
license_config.jsonis encrypted in production builds- Decryption key stored in secure hardware element
- Configuration integrity verified at startup
Tampering Prevention
- Configuration embedded in binary
- Runtime modification disabled in release builds
- Signature verification for updates
Best Practices
Creating New Variants
-
Copy base configuration
bash cp -r rsc_config/config_DEFAULT rsc_config/config_NEWVARIANT -
Customize configuration files
- Updatefactory_config.jsonwith specific settings
- Add custom assets toimgs/directory
- Modifyversion_flavorfile -
Test thoroughly
bash CONFIG_VARIANT=NEWVARIANT nim c rotordream.nim ./rotordream -
Document changes
- Update this documentation
- Add variant to CI/CD pipeline
- Document customer-specific requirements
Configuration Validation
Always validate configuration files before building:
# Validate JSON syntax
nim c -r tools/validateConfig.nim rsc_config/config_rc_DMG/factory_config.json
# Test configuration loading
nim c -r tests/test_factory_config.nim
Troubleshooting
Configuration Not Loaded
Problem: System uses default settings instead of variant configuration.
Solution:
- Verify CONFIG_VARIANT environment variable is set
- Check configuration directory exists
- Ensure buildResourceConfigs.nim was executed
License Validation Fails
Problem: License configuration rejected at startup.
Solution:
- Verify license file encryption/decryption keys
- Check expiration date
- Validate JSON structure
Custom Assets Not Displayed
Problem: Custom logos or images don't appear in UI.
Solution:
- Verify files exist in imgs/ directory
- Check file paths in style_variables_config.json
- Ensure assets are embedded during build