Module Management
Overview
Modules in Accordion are software components that extend hardware capabilities. They can add support for custom hardware, specialized protocols, test equipment interfaces, or complex device control. Module management allows you to load, configure, clone, and unload modules dynamically without restarting the system.
What are Modules?
Modules provide:
- Additional channels (GPIO, I2C, SPI, custom interfaces)
- Hardware drivers (sensors, actuators, specialized equipment)
- Protocol implementations (PMBus, custom serial protocols)
- Device-specific functionality (test equipment control)
- Calibration data and algorithms
Module Types:
- Hardware Drivers: Interface to specific chips or devices
- Protocol Modules: Implement communication protocols
- Test Equipment: Control oscilloscopes, multimeters, etc.
- Custom Functionality: Specialized test or measurement features
Accessing Module Management
Via Ribbon:
- Click Ribbon → Tools → Modules
- Dropdown menu shows available operations
Via AccordionShell:
# List all modules
AccordionShell module
# Load module
AccordionShell module --module "MyModule" --file "config.xml"
# Clone module
AccordionShell module --module "MyModule" --rename "MyModule_Clone"
# Unload module
AccordionShell module --module "MyModule" --deactivate
Module Operations
List Modules
View loaded modules:
AccordionShell:
AccordionShell module
Output shows:
- Module name
- Module type
- Configuration file
- Number of channels provided
- Module state (Active/Inactive)
Via GUI:
- Ribbon → Tools → Modules
- Shows list of available and loaded modules
Load Module
Load a module with configuration:
AccordionShell module --module "PMBus_Controller" --file "pmbus_config.xml"
Parameters:
--module: Module name/identifier--file: Configuration file path (XML, JSON, or module-specific format)
What Happens:
- Module loaded into Accordion runtime
- Configuration file parsed
- Channels registered and appear in channel list
- Hardware initialized (if applicable)
- Module ready for use
Example:
# Load PMBus module with device configuration
AccordionShell module --module "PMBusModule" --file "power_devices.xml"
# After loading, new channels appear:
# - PMBUS_VOUT_1
# - PMBUS_IOUT_1
# - PMBUS_TEMP_1
# etc.
Clone Module
Create multiple instances of a module:
Cloning allows running multiple copies of the same module with different configurations.
AccordionShell module --module "SensorModule" --rename "SensorModule_Ambient"
Parameters:
--module: Source module to clone--rename: New name for cloned instance
Use Cases:
- Multiple identical sensors on different I2C addresses
- Same equipment type, different configurations
- Parallel test setups
- Multi-DUT testing
Example:
# Original module loaded for sensor at address 0x48
AccordionShell module --module "TempSensor" --file "sensor_0x48.xml"
# Clone for second sensor at address 0x49
AccordionShell module --module "TempSensor" --rename "TempSensor_2"
# Then configure cloned instance with different address
# Channels now include:
# - TEMP_SENSOR_VALUE (from original)
# - TEMP_SENSOR_2_VALUE (from clone)
Configure Module Parameters (InitialData)
Set module-specific parameters:
Modules may accept configuration parameters via InitialData key-value pairs:
AccordionShell module --module "MyModule" --key "I2CAddress" --value "0x3C"
AccordionShell module --module "MyModule" --key "SampleRate" --value "1000"
Parameters:
--key: Parameter name--value: Parameter value
Common Parameters:
I2CAddress: Device I2C addressSPIChipSelect: SPI CS pin numberBaudRate: Serial communication speedTimeout: Communication timeoutEnableLogging: Debug output enable
Multiple Parameters:
# Set multiple parameters for module configuration
AccordionShell module --module "GPSModule" --key "BaudRate" --value "9600"
AccordionShell module --module "GPSModule" --key "Port" --value "UART_1"
AccordionShell module --module "GPSModule" --key "EnableNMEA" --value "true"
Unload Module
Remove a module:
AccordionShell module --module "MyModule" --deactivate
What Happens:
- Module channels removed from channel list
- Hardware released (if applicable)
- Module unloaded from runtime
- Configuration not saved (unless persisted separately)
⚠️ Warning: Unloading a module removes all its channels. Ensure no active dependencies.
Module Configuration Files
Configuration File Format
Most modules use XML configuration:
<?xml version="1.0" encoding="utf-8"?>
<ModuleConfiguration>
<ModuleName>TempSensorModule</ModuleName>
<ModuleType>I2CSensor</ModuleType>
<InitialData>
<Parameter Name="I2CAddress" Value="0x48" />
<Parameter Name="I2CBus" Value="I2C_BUS_0" />
<Parameter Name="SampleRate" Value="100" />
</InitialData>
<Channels>
<Channel Name="TEMP_VALUE" Type="Numeric" Unit="Celsius" />
<Channel Name="TEMP_ALARM" Type="Boolean" />
</Channels>
</ModuleConfiguration>
Creating Module Configurations
Steps:
Identify Module Requirements:
- Review module documentation
- Determine required parameters
- Identify channel mappings
Create Configuration File:
- Use XML or module-specific format
- Set InitialData parameters
- Define channel properties
Validate Configuration:
- Load module with config
- Verify channels appear correctly
- Test channel functionality
Save and Document:
- Save working configuration
- Document parameter meanings
- Include in version control
Common Module Workflows
Load and Configure PMBus Module
1. Prepare PMBus project file (via PMBus tools)
2. Load module with configuration:
AccordionShell module --module "PMBusCtrl" --file "pmbus_devices.xml"
3. Verify PMBus channels appeared in channel list
4. Program devices:
AccordionShell pmbus --module "PMBusCtrl" --file "power_config.pmbx" --program
5. Monitor PMBus telemetry channels
Multi-Sensor Setup
1. Load first sensor module:
AccordionShell module --module "EnvironmentSensor" --file "sensor1.xml"
2. Clone for additional sensors:
AccordionShell module --module "EnvironmentSensor" --rename "EnvironmentSensor_2"
AccordionShell module --module "EnvironmentSensor" --rename "EnvironmentSensor_3"
3. Configure each clone with different I2C address:
AccordionShell module --module "EnvironmentSensor_2" --key "I2CAddress" --value "0x49"
AccordionShell module --module "EnvironmentSensor_3" --key "I2CAddress" --value "0x4A"
4. All three sensors now accessible via separate channels
Test Equipment Module
1. Load oscilloscope module:
AccordionShell module --module "Oscilloscope" --file "scope_config.xml"
2. Configure parameters:
AccordionShell module --module "Oscilloscope" --key "IPAddress" --value "192.168.1.50"
AccordionShell module --module "Oscilloscope" --key "Timeout" --value "5000"
3. Use oscilloscope channels:
- SCOPE_CHANNEL_1_VOLTAGE
- SCOPE_CHANNEL_1_FREQUENCY
- SCOPE_TRIGGER_MODE
- SCOPE_CAPTURE_WAVEFORM
4. Automate measurements via channels
Module Development
Custom Module Creation
Accordion supports custom module development in C#:
Basic Module Structure:
using EsharpDefinitions;
using EsharpDefinitions.Interfaces;
[ModuleDefinition("MyCustomModule", "Custom hardware interface")]
public class MyCustomModule : IModule
{
public void Initialize(Dictionary<string, string> initialData)
{
// Parse initialData parameters
// Initialize hardware
// Register channels
}
public void Shutdown()
{
// Clean up resources
// Release hardware
}
public List<IChannel> GetChannels()
{
// Return list of channels provided by module
}
}
Module Development Resources:
- E-Sharp Module SDK
- Sample modules in accordionwrapper repository
- API documentation
- Contact E-Sharp support for development assistance
Troubleshooting
Module Won't Load
Problem: Module fails to load
Solutions:
- Verify module file exists and is accessible
- Check module configuration file syntax (XML valid)
- Review logs for error messages
- Verify module dependencies met
- Check module version compatibility with Accordion
- Ensure module file not corrupted
Channels Not Appearing
Problem: Module loads but channels don't appear
Solutions:
- Refresh channel list (F5)
- Verify module initialized successfully (check logs)
- Check module configuration defines channels
- Verify no naming conflicts with existing channels
- Review module initialization code (if custom)
Module Clone Fails
Problem: Cannot clone module
Solutions:
- Verify source module is loaded
- Ensure new name is unique
- Check module supports cloning
- Review error message for specific issue
- Try reloading original module first
Module Configuration Ignored
Problem: InitialData parameters not applied
Solutions:
- Verify parameter names match module expectations
- Check parameter value format (string, number, boolean)
- Review module documentation for parameter names
- Load module first, then set parameters
- Check logs for parameter parsing errors
Best Practices
- Document Configurations: Save and version control module configs
- Test Before Production: Validate module in dev environment
- Use Meaningful Names: Name modules and clones descriptively
- Parameter Validation: Verify parameters before loading
- Clean Unload: Properly unload modules when done
- Log Errors: Review logs after loading modules
- Backup Configs: Keep backup of working configurations
See Also
- Channel Management - Use channels from modules
- System Settings - Module paths and configuration
- Power Supplies - PMBus module usage
- AccordionShell Module - Module CLI reference
- Troubleshooting - Common issues