Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

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:

  1. Click Ribbon → Tools → Modules
  2. 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:

  1. Module loaded into Accordion runtime
  2. Configuration file parsed
  3. Channels registered and appear in channel list
  4. Hardware initialized (if applicable)
  5. 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 address
  • SPIChipSelect: SPI CS pin number
  • BaudRate: Serial communication speed
  • Timeout: Communication timeout
  • EnableLogging: 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:

  1. Module channels removed from channel list
  2. Hardware released (if applicable)
  3. Module unloaded from runtime
  4. 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:

  1. Identify Module Requirements:

    • Review module documentation
    • Determine required parameters
    • Identify channel mappings
  2. Create Configuration File:

    • Use XML or module-specific format
    • Set InitialData parameters
    • Define channel properties
  3. Validate Configuration:

    • Load module with config
    • Verify channels appear correctly
    • Test channel functionality
  4. 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:

  1. Verify module file exists and is accessible
  2. Check module configuration file syntax (XML valid)
  3. Review logs for error messages
  4. Verify module dependencies met
  5. Check module version compatibility with Accordion
  6. Ensure module file not corrupted

Channels Not Appearing

Problem: Module loads but channels don't appear

Solutions:

  1. Refresh channel list (F5)
  2. Verify module initialized successfully (check logs)
  3. Check module configuration defines channels
  4. Verify no naming conflicts with existing channels
  5. Review module initialization code (if custom)

Module Clone Fails

Problem: Cannot clone module

Solutions:

  1. Verify source module is loaded
  2. Ensure new name is unique
  3. Check module supports cloning
  4. Review error message for specific issue
  5. Try reloading original module first

Module Configuration Ignored

Problem: InitialData parameters not applied

Solutions:

  1. Verify parameter names match module expectations
  2. Check parameter value format (string, number, boolean)
  3. Review module documentation for parameter names
  4. Load module first, then set parameters
  5. Check logs for parameter parsing errors

Best Practices

  1. Document Configurations: Save and version control module configs
  2. Test Before Production: Validate module in dev environment
  3. Use Meaningful Names: Name modules and clones descriptively
  4. Parameter Validation: Verify parameters before loading
  5. Clean Unload: Properly unload modules when done
  6. Log Errors: Review logs after loading modules
  7. Backup Configs: Keep backup of working configurations

See Also

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.