90 lines
3.5 KiB
Python
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()
|