diff --git a/OpenEphys.Onix/ConfigureBreakoutBoard.cs b/OpenEphys.Onix/ConfigureBreakoutBoard.cs index c17b4f4c..00dbcad3 100644 --- a/OpenEphys.Onix/ConfigureBreakoutBoard.cs +++ b/OpenEphys.Onix/ConfigureBreakoutBoard.cs @@ -7,33 +7,33 @@ namespace OpenEphys.Onix /// A class that configures an ONIX breakout board. /// [Description("Configures an ONIX breakout board.")] - public class ConfigureBreakoutBoard : HubDeviceFactory + public class ConfigureBreakoutBoard : MultiDeviceFactory { /// /// Gets or sets the heartbeat configuration. /// - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the heartbeat device in the ONIX breakout board.")] public ConfigureHeartbeat Heartbeat { get; set; } = new(); /// /// Gets or sets the breakout board's analog IO configuration. /// - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the analog IO device in the ONIX breakout board.")] public ConfigureBreakoutAnalogIO AnalogIO { get; set; } = new(); /// /// Gets or sets the breakout board's digital IO configuration. /// - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the digital IO device in the ONIX breakout board.")] public ConfigureBreakoutDigitalIO DigitalIO { get; set; } = new(); /// /// Gets or sets the hardware memory monitor configuration. /// - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the memory monitor device in the ONIX breakout board.")] public ConfigureMemoryMonitor MemoryMonitor { get; set; } = new(); diff --git a/OpenEphys.Onix/ConfigureHarpSyncInput.cs b/OpenEphys.Onix/ConfigureHarpSyncInput.cs index b88185ec..2fc554d2 100644 --- a/OpenEphys.Onix/ConfigureHarpSyncInput.cs +++ b/OpenEphys.Onix/ConfigureHarpSyncInput.cs @@ -7,20 +7,24 @@ namespace OpenEphys.Onix /// A class for configuring the ONIX breakout board Harp sync input device. /// /// + /// /// Harp is a standard for asynchronous real-time data acquisition and experimental /// control in neuroscience. It includes a clock synchronization protocol which allows /// Harp devices to be connected to a shared clock line and continuously self-synchronize /// their clocks to a precision of tens of microseconds. This means that all experimental /// events are timestamped on the same clock and no post-hoc alignment of timing is necessary. - /// + /// + /// /// The Harp clock signal is transmitted over a serial line every second. /// Every time the Harp sync input device in the ONIX breakout board detects a full Harp /// synchronization packet, a new data frame is emitted pairing the current value of the /// Harp clock with the local ONIX acquisition clock. - /// + /// + /// /// Logging the sequence of all Harp synchronization packets can greatly facilitate post-hoc /// analysis and interpretation of timing signals. For more information see /// . + /// /// [Description("Configures a ONIX breakout board Harp sync input device.")] public class ConfigureHarpSyncInput : SingleDeviceFactory diff --git a/OpenEphys.Onix/ConfigureHeadstage64.cs b/OpenEphys.Onix/ConfigureHeadstage64.cs index c775b729..e07affff 100644 --- a/OpenEphys.Onix/ConfigureHeadstage64.cs +++ b/OpenEphys.Onix/ConfigureHeadstage64.cs @@ -8,7 +8,7 @@ namespace OpenEphys.Onix /// A class that configures an ONIX headstage-64 in the specified port. /// [Description("Configures an ONIX headstage-64 in the specified port.")] - public class ConfigureHeadstage64 : HubDeviceFactory + public class ConfigureHeadstage64 : MultiDeviceFactory { PortName port; readonly ConfigureHeadstage64LinkController LinkController = new(); @@ -42,7 +42,7 @@ public ConfigureHeadstage64() /// Gets or sets the Rhd2164 configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Rhd2164 device in the headstage-64.")] public ConfigureRhd2164 Rhd2164 { get; set; } = new(); @@ -50,7 +50,7 @@ public ConfigureHeadstage64() /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device in the headstage-64.")] public ConfigureBno055 Bno055 { get; set; } = new(); @@ -58,7 +58,7 @@ public ConfigureHeadstage64() /// Gets or sets the SteamVR V1 basestation 3D tracking array configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the TS4231 device in the headstage-64.")] public ConfigureTS4231V1 TS4231 { get; set; } = new() { Enable = false }; @@ -66,7 +66,7 @@ public ConfigureHeadstage64() /// Gets or sets onboard electrical stimulator configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the ElectricalStimulator device in the headstage-64.")] public ConfigureHeadstage64ElectricalStimulator ElectricalStimulator { get; set; } = new(); @@ -74,7 +74,7 @@ public ConfigureHeadstage64() /// Gets or sets onboard optical stimulator configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the OpticalStimulator device in the headstage-64.")] public ConfigureHeadstage64OpticalStimulator OpticalStimulator { get; set; } = new(); diff --git a/OpenEphys.Onix/ConfigureNeuropixelsV1eHeadstage.cs b/OpenEphys.Onix/ConfigureNeuropixelsV1eHeadstage.cs index 169d48c3..5e90a4f9 100644 --- a/OpenEphys.Onix/ConfigureNeuropixelsV1eHeadstage.cs +++ b/OpenEphys.Onix/ConfigureNeuropixelsV1eHeadstage.cs @@ -8,7 +8,7 @@ namespace OpenEphys.Onix /// A class that configures a NeuropixelsV1e headstage. /// [Description("Configures a NeuropixelsV1e headstage.")] - public class ConfigureNeuropixelsV1eHeadstage : HubDeviceFactory + public class ConfigureNeuropixelsV1eHeadstage : MultiDeviceFactory { PortName port; readonly ConfigureNeuropixelsV1eLinkController LinkController = new(); @@ -26,7 +26,7 @@ public ConfigureNeuropixelsV1eHeadstage() /// Gets or sets the NeuropixelsV1e configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the NeuropixelsV1e device.")] public ConfigureNeuropixelsV1e NeuropixelsV1e { get; set; } = new(); @@ -34,7 +34,7 @@ public ConfigureNeuropixelsV1eHeadstage() /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV1eBno055 Bno055 { get; set; } = new(); diff --git a/OpenEphys.Onix/ConfigureNeuropixelsV2eBetaHeadstage.cs b/OpenEphys.Onix/ConfigureNeuropixelsV2eBetaHeadstage.cs index ba76044f..1a9a9374 100644 --- a/OpenEphys.Onix/ConfigureNeuropixelsV2eBetaHeadstage.cs +++ b/OpenEphys.Onix/ConfigureNeuropixelsV2eBetaHeadstage.cs @@ -7,7 +7,7 @@ namespace OpenEphys.Onix /// A class that configures a NeuropixelsV2eBeta headstage. /// [Description("Configures a NeuropixelsV2eBeta headstage.")] - public class ConfigureNeuropixelsV2eBetaHeadstage : HubDeviceFactory + public class ConfigureNeuropixelsV2eBetaHeadstage : MultiDeviceFactory { PortName port; readonly ConfigureNeuropixelsV2eLinkController LinkController = new(); @@ -25,7 +25,7 @@ public ConfigureNeuropixelsV2eBetaHeadstage() /// Gets or sets the NeuropixelsV2eBeta configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the NeuropixelsV2eBeta device.")] public ConfigureNeuropixelsV2eBeta NeuropixelsV2eBeta { get; set; } = new(); @@ -33,7 +33,7 @@ public ConfigureNeuropixelsV2eBetaHeadstage() /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV2eBno055 Bno055 { get; set; } = new(); diff --git a/OpenEphys.Onix/ConfigureNeuropixelsV2eHeadstage.cs b/OpenEphys.Onix/ConfigureNeuropixelsV2eHeadstage.cs index 627030ac..e129c579 100644 --- a/OpenEphys.Onix/ConfigureNeuropixelsV2eHeadstage.cs +++ b/OpenEphys.Onix/ConfigureNeuropixelsV2eHeadstage.cs @@ -7,7 +7,7 @@ namespace OpenEphys.Onix /// A class that configures a NeuropixelsV2e headstage. /// [Description("configures a NeuropixelsV2e headstage.")] - public class ConfigureNeuropixelsV2eHeadstage : HubDeviceFactory + public class ConfigureNeuropixelsV2eHeadstage : MultiDeviceFactory { PortName port; readonly ConfigureNeuropixelsV2eLinkController LinkController = new(); @@ -25,7 +25,7 @@ public ConfigureNeuropixelsV2eHeadstage() /// Gets or sets the NeuropixelsV2e configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the NeuropixelsV2e device.")] public ConfigureNeuropixelsV2e NeuropixelsV2e { get; set; } = new(); @@ -33,7 +33,7 @@ public ConfigureNeuropixelsV2eHeadstage() /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// [Category(ConfigurationCategory)] - [TypeConverter(typeof(HubDeviceConverter))] + [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV2eBno055 Bno055 { get; set; } = new(); diff --git a/OpenEphys.Onix/HubDeviceFactory.cs b/OpenEphys.Onix/MultiDeviceFactory.cs similarity index 91% rename from OpenEphys.Onix/HubDeviceFactory.cs rename to OpenEphys.Onix/MultiDeviceFactory.cs index b982e08b..5caf4508 100644 --- a/OpenEphys.Onix/HubDeviceFactory.cs +++ b/OpenEphys.Onix/MultiDeviceFactory.cs @@ -9,21 +9,24 @@ namespace OpenEphys.Onix /// registering all devices in an ONI device aggregate in the context device table. /// /// + /// /// ONI devices are often grouped into multi-device aggregates connected to hubs or /// headstages. These aggregates provide access to multiple devices through hub-specific /// addresses and usually require a specific sequence of configuration steps to determine /// operational port voltages and other link-specific settings. - /// + /// + /// /// These multi-device aggregates are the most common starting point for configuration - /// of an ONI system, and the provides a modular abstraction + /// of an ONI system, and the provides a modular abstraction /// for flexible assembly and sequencing of multiple such aggregates. + /// /// - public abstract class HubDeviceFactory : DeviceFactory, INamedElement + public abstract class MultiDeviceFactory : DeviceFactory, INamedElement { const string BaseTypePrefix = "Configure"; string _name; - internal HubDeviceFactory() + internal MultiDeviceFactory() { var baseName = GetType().Name; var prefixIndex = baseName.IndexOf(BaseTypePrefix); diff --git a/OpenEphys.Onix/HubDeviceConverter.cs b/OpenEphys.Onix/SingleDeviceFactoryConverter.cs similarity index 93% rename from OpenEphys.Onix/HubDeviceConverter.cs rename to OpenEphys.Onix/SingleDeviceFactoryConverter.cs index e83622b6..9b0e8bd2 100644 --- a/OpenEphys.Onix/HubDeviceConverter.cs +++ b/OpenEphys.Onix/SingleDeviceFactoryConverter.cs @@ -5,7 +5,7 @@ namespace OpenEphys.Onix { - internal class HubDeviceConverter : ExpandableObjectConverter + internal class SingleDeviceFactoryConverter : ExpandableObjectConverter { public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {