Export/Import configuration¶
You can export the current device configuration to a file and import it back when needed. This is useful for backup, sharing, or restoring device settings.
You basically save the TrgenClient state.
Configuration Manager¶
The class ConfigurationManager offers function for the entire lifecycle of a configuration. creation, import and export
Create Configuration¶
You can create the current configuration to a JSON file using the export_config() method:
config = TrgenConfiguration()
# Set metadata
config.metadata.project_name = "Advanced EEG Experiment"
config.metadata.description = "Configuration with custom timing for multi-modal experiment"
config.metadata.author = "Research Team"
# Set custom default duration
config.defaults.default_trigger_duration_us = 50 # 50 microseconds
config.defaults.auto_reset_enabled = True
config.defaults.auto_reset_delay_us = 200
# Configure NS0 with custom instructions (100µs trigger)
ns0_config = TriggerPortConfig(32)
ns0_config.id = TrgenPin.NS0
ns0_config.name = "EEG Start Marker"
ns0_config.type = "NeuroScan"
ns0_config.enabled = True
ns0_config.custom_duration_us = 100
ns0_config.notes = "Used for experiment start markers"
# Program custom instructions for NS0
ns0_config.memory_instructions = [0] * 32
ns0_config.memory_instructions[0] = istrActiveFor(100) # Active for 100µs
ns0_config.memory_instructions[1] = istrUnactiveFor(500) # Inactive for 500µs
ns0_config.memory_instructions[2] = istrEnd() # End sequence
ns0_config.last_instruction_index = 2
ns0_config.programming_state = "Programmed"
config.trigger_ports["NS0"] = ns0_config
# Configure SA0 with different timing
sa0_config = TriggerPortConfig(32)
sa0_config.id = TrgenPin.SA0
sa0_config.name = "Stimulus Trigger"
sa0_config.type = "Synamps"
sa0_config.enabled = True
sa0_config.custom_duration_us = 200
sa0_config.notes = "Used for stimulus presentation markers"
# Program custom instructions for SA0
sa0_config.memory_instructions = [0] * 32
sa0_config.memory_instructions[0] = istrActiveFor(200) # Active for 200µs
sa0_config.memory_instructions[1] = istrEnd() # End sequence
sa0_config.last_instruction_index = 1
sa0_config.programming_state = "Programmed"
config.trigger_ports["SA0"] = sa0_config
# Configure BNCO for TMS applications
bnco_config = TriggerPortConfig(32)
bnco_config.id = TrgenPin.BNCO
bnco_config.name = "TMS Output Control"
bnco_config.type = "BNCO"
bnco_config.enabled = True
bnco_config.custom_duration_us = 1000 # 1ms for TMS
bnco_config.notes = "Controls TMS device output"
# Program TMS-specific instructions
bnco_config.memory_instructions = [0] * 32
bnco_config.memory_instructions[0] = istrActiveFor(1000) # Active for 1ms
bnco_config.memory_instructions[1] = istrUnactiveFor(5000) # Inactive for 5ms safety margin
bnco_config.memory_instructions[2] = istrEnd() # End sequence
bnco_config.last_instruction_index = 2
bnco_config.programming_state = "Programmed"
config.trigger_ports["BNCO"] = bnco_config
# Add some standard ports without custom programming (will use defaults)
for i in range(1, 4): # NS1, NS2, NS3
port_config = TriggerPortConfig(32)
port_config.id = getattr(TrgenPin, f'NS{i}')
port_config.name = f"NeuroScan {i}"
port_config.type = "NeuroScan"
port_config.enabled = True
config.trigger_ports[f"NS{i}"] = port_config
The exported configuration includes:
All programmed TrgenPort instructions
GPIO direction settings
Trigger level configurations
Default duration settings
Export Configuration¶
Export is easy:
# Export current client state (if you have an existing setup)
print("\n4. Exporting current client configuration...")
export_file = TrgenConfigurationManager.export_configuration(
client, # is the current TrgenClient used
"config_examples/current_setup.trgen", # destination path
project_name="Current Device Setup", # project name
description="Exported configuration from current client state", # description
author="TrGEN User" # author
)
Import Configuration¶
To load a previously saved configuration, use the import_config() method:
from trgenpy import TrgenClient
client = TrgenClient()
client.connect()
# Save the configuration to file
config_file = "config_examples/advanced_experiment.trgen"
imported_config = TrgenConfigurationManager.import_configuration(client, config_file)
client.start()
Configuration File Format¶
The configuration is stored in JSON format with the following structure:
{
"metadata": {
"version": "1.0",
"created_at": "2025-01-15T10:30:00.123456",
"modified_at": "2025-01-15T10:30:00.123456",
"description": "Configuration for EEG experiment with custom triggers",
"project_name": "Multi-modal Experiment",
"author": "Research Team"
},
"defaults": {
"default_trigger_duration_us": 50,
"default_log_level": "info",
"default_timeout_ms": 2000,
"auto_reset_enabled": true,
"auto_reset_delay_us": 200
},
"trigger_ports": {
"NS0": {
"id": 0,
"name": "EEG Start Marker",
"type": "NeuroScan",
"enabled": true,
"custom_duration_us": 100,
"memory_instructions": [268435712, 536871424, 1, 0, 0, ...],
"memory_length": 32,
"last_instruction_index": 2,
"programming_state": "programmed",
"last_programmed_at": "2025-01-15T10:30:00",
"notes": "Used for experiment start markers"
},
"BNCO": {
"id": 16,
"name": "TMS Output Control",
"type": "BNCO",
"enabled": true,
"custom_duration_us": 1000,
"memory_instructions": [805306880, 1342177792, 1, 0, 0, ...],
"memory_length": 32,
"last_instruction_index": 2,
"programming_state": "programmed",
"notes": "Controls TMS device output"
}
},
"network": {
"ip_address": "192.168.123.1",
"port": 4242,
"timeout_ms": 2000
}
}
This feature is particularly useful for:
Sharing configurations across different experiments
Version control of trigger setups
Quick restoration of complex configurations
Backup of working setups