SXXXXXXX_PyDownloadFwViaSRIO/tools/example_profile_usage.py
2026-01-22 17:10:05 +01:00

90 lines
3.5 KiB
Python

"""Example usage of the new profile management system.
This script demonstrates how to:
1. Load profiles from JSON
2. Access global configuration
3. Retrieve targets with their models
4. Iterate through available targets
"""
from pathlib import Path
import sys
# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))
from pydownloadfwviasrio.profiles import ProfileManager
def main() -> None:
"""Demonstrate profile management usage."""
# Load existing configuration
manager = ProfileManager(Path("flash_profiles.json"))
print("=" * 60)
print("GLOBAL CONFIGURATION")
print("=" * 60)
print(f"IP Address: {manager.global_config.ip}")
print(f"Port: {manager.global_config.port}")
print(f"SRIO Base: 0x{manager.global_config.srio_base:X}")
print(f"FPGA Base: 0x{manager.global_config.fpga_base:X}")
print(f"FPGA Sector Size: 0x{manager.global_config.fpga_sector:X}")
print(f"Default Target: {manager.global_config.default_target}")
print("\n" + "=" * 60)
print("AVAILABLE MODELS")
print("=" * 60)
for id_model, model in sorted(manager.models.items()):
print(f"\nModel ID {id_model}: {model.model}")
print(f" Description: {model.description}")
print(f" Flash Type: {model.flash_type}")
print(f" Addressing: {'4-byte' if model.is_4byte_addressing else '3-byte'}")
print(f" Sectors: {model.num_sectors}")
print(f" Golden Area: 0x{model.golden_start:08X} - 0x{model.golden_stop:08X}")
print(f" User Area: 0x{model.user_start:08X} - 0x{model.user_stop:08X}")
if model.test_address:
print(f" Test Address: 0x{model.test_address:08X}")
print("\n" + "=" * 60)
print("AVAILABLE TARGETS")
print("=" * 60)
for id_target, target in sorted(manager.targets.items()):
print(f"\nTarget: {id_target}")
print(f" Description: {target.description}")
print(f" Slot Address: 0x{target.slot_address:02X}")
print(f" Architecture: {target.architecture}")
print(f" File Prefix: {target.file_prefix}")
# Get associated model
model = manager.get_model(target.id_model)
if model:
print(f" Model: {model.model} ({model.description})")
print(f" Memory Size: {(model.user_stop - model.golden_start + 1) / (1024*1024):.0f} MB")
print("\n" + "=" * 60)
print("EXAMPLE: Get default target with model")
print("=" * 60)
default_id = manager.global_config.default_target
result = manager.get_target_with_model(default_id)
if result:
target, model = result
print(f"\nDefault target: {target.id_target}")
print(f" Slot: 0x{target.slot_address:02X}")
print(f" IP: {manager.global_config.ip}:{manager.global_config.port}")
print(f" Model: {model.model}")
print(f" Sectors: {model.num_sectors}")
print(f" Addressing: {'4-byte' if model.is_4byte_addressing else '3-byte'}")
print(f" Golden: 0x{model.golden_start:08X} - 0x{model.golden_stop:08X}")
print(f" User: 0x{model.user_start:08X} - 0x{model.user_stop:08X}")
# Calculate sizes
golden_size = (model.golden_stop - model.golden_start + 1) / (1024 * 1024)
user_size = (model.user_stop - model.user_start + 1) / (1024 * 1024)
print(f" Golden Size: {golden_size:.2f} MB")
print(f" User Size: {user_size:.2f} MB")
if __name__ == "__main__":
main()