diff --git a/OpenEphys.Onix1/Bno055Data.cs b/OpenEphys.Onix1/Bno055Data.cs index b2f1c52..506aa7a 100644 --- a/OpenEphys.Onix1/Bno055Data.cs +++ b/OpenEphys.Onix1/Bno055Data.cs @@ -19,6 +19,7 @@ public class Bno055Data : Source /// [TypeConverter(typeof(Bno055.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/BreakoutAnalogInput.cs b/OpenEphys.Onix1/BreakoutAnalogInput.cs index 3a09fd2..38550a9 100644 --- a/OpenEphys.Onix1/BreakoutAnalogInput.cs +++ b/OpenEphys.Onix1/BreakoutAnalogInput.cs @@ -18,6 +18,7 @@ public class BreakoutAnalogInput : Source /// [TypeConverter(typeof(BreakoutAnalogIO.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -30,6 +31,7 @@ public class BreakoutAnalogInput : Source /// millisecond of data from each channel. /// [Description("The number of analog samples that are buffered for each channel before data is propagated.")] + [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get; set; } = 100; /// @@ -43,11 +45,11 @@ public class BreakoutAnalogInput : Source /// are represented as 32-bit floating point voltages. /// [Description("The data type used to represent analog samples.")] + [Category(DeviceFactory.ConfigurationCategory)] public BreakoutAnalogIODataType DataType { get; set; } = BreakoutAnalogIODataType.S16; static Mat CreateVoltageScale(int bufferSize, float[] voltsPerDivision) { - using var scaleHeader = Mat.CreateMatHeader( voltsPerDivision, rows: voltsPerDivision.Length, diff --git a/OpenEphys.Onix1/BreakoutAnalogOutput.cs b/OpenEphys.Onix1/BreakoutAnalogOutput.cs index 15911bc..72f0343 100644 --- a/OpenEphys.Onix1/BreakoutAnalogOutput.cs +++ b/OpenEphys.Onix1/BreakoutAnalogOutput.cs @@ -18,6 +18,7 @@ public class BreakoutAnalogOutput : Sink /// [TypeConverter(typeof(BreakoutAnalogIO.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -30,6 +31,7 @@ public class BreakoutAnalogOutput : Sink /// directly to the DACs. /// [Description("The data type used to represent analog samples.")] + [Category(DeviceFactory.ConfigurationCategory)] public BreakoutAnalogIODataType DataType { get; set; } = BreakoutAnalogIODataType.S16; /// diff --git a/OpenEphys.Onix1/BreakoutDigitalInput.cs b/OpenEphys.Onix1/BreakoutDigitalInput.cs index 448925d..f5d7b91 100644 --- a/OpenEphys.Onix1/BreakoutDigitalInput.cs +++ b/OpenEphys.Onix1/BreakoutDigitalInput.cs @@ -19,6 +19,7 @@ public class BreakoutDigitalInput : Source /// [TypeConverter(typeof(BreakoutDigitalIO.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/BreakoutDigitalOutput.cs b/OpenEphys.Onix1/BreakoutDigitalOutput.cs index 14dc1d8..4c0674e 100644 --- a/OpenEphys.Onix1/BreakoutDigitalOutput.cs +++ b/OpenEphys.Onix1/BreakoutDigitalOutput.cs @@ -15,6 +15,7 @@ public class BreakoutDigitalOutput : Sink /// [TypeConverter(typeof(BreakoutDigitalIO.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs b/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs index 4f6749c..b481358 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutAnalogIO.cs @@ -117,84 +117,84 @@ public ConfigureBreakoutAnalogIO() /// /// Gets or sets the direction of channel 0. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 0.")] public BreakoutAnalogIODirection Direction0 { get; set; } /// /// Gets or sets the direction of channel 1. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 1.")] public BreakoutAnalogIODirection Direction1 { get; set; } /// /// Gets or sets the direction of channel 2. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 2.")] public BreakoutAnalogIODirection Direction2 { get; set; } /// /// Gets or sets the direction of channel 3. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 3.")] public BreakoutAnalogIODirection Direction3 { get; set; } /// /// Gets or sets the direction of channel 4. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 4.")] public BreakoutAnalogIODirection Direction4 { get; set; } /// /// Gets or sets the direction of channel 5. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 5.")] public BreakoutAnalogIODirection Direction5 { get; set; } /// /// Gets or sets the direction of channel 6. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 6.")] public BreakoutAnalogIODirection Direction6 { get; set; } /// /// Gets or sets the direction of channel 7. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 7.")] public BreakoutAnalogIODirection Direction7 { get; set; } /// /// Gets or sets the direction of channel 8. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 8.")] public BreakoutAnalogIODirection Direction8 { get; set; } /// /// Gets or sets the direction of channel 9. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 9.")] public BreakoutAnalogIODirection Direction9 { get; set; } /// /// Gets or sets the direction of channel 10. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 10.")] public BreakoutAnalogIODirection Direction10 { get; set; } /// /// Gets or sets the direction of channel 11. /// - [Category(AcquisitionCategory)] + [Category(ConfigurationCategory)] [Description("The direction of channel 11.")] public BreakoutAnalogIODirection Direction11 { get; set; } diff --git a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs index bdd6835..815fec9 100644 --- a/OpenEphys.Onix1/ConfigureBreakoutBoard.cs +++ b/OpenEphys.Onix1/ConfigureBreakoutBoard.cs @@ -14,6 +14,7 @@ public class ConfigureBreakoutBoard : MultiDeviceFactory /// [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the heartbeat device in the ONIX breakout board.")] + [Category(DevicesCategory)] public ConfigureHeartbeat Heartbeat { get; set; } = new(); /// @@ -21,6 +22,7 @@ public class ConfigureBreakoutBoard : MultiDeviceFactory /// [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the analog IO device in the ONIX breakout board.")] + [Category(DevicesCategory)] public ConfigureBreakoutAnalogIO AnalogIO { get; set; } = new(); /// @@ -28,6 +30,7 @@ public class ConfigureBreakoutBoard : MultiDeviceFactory /// [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the digital IO device in the ONIX breakout board.")] + [Category(DevicesCategory)] public ConfigureBreakoutDigitalIO DigitalIO { get; set; } = new(); /// @@ -35,6 +38,7 @@ public class ConfigureBreakoutBoard : MultiDeviceFactory /// [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the memory monitor device in the ONIX breakout board.")] + [Category(DevicesCategory)] public ConfigureMemoryMonitor MemoryMonitor { get; set; } = new(); internal override IEnumerable GetDevices() diff --git a/OpenEphys.Onix1/ConfigureHeadstage64.cs b/OpenEphys.Onix1/ConfigureHeadstage64.cs index 0d1a4c7..a61e809 100644 --- a/OpenEphys.Onix1/ConfigureHeadstage64.cs +++ b/OpenEphys.Onix1/ConfigureHeadstage64.cs @@ -41,7 +41,7 @@ public ConfigureHeadstage64() /// /// Gets or sets the Rhd2164 configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Rhd2164 device in the headstage-64.")] public ConfigureRhd2164 Rhd2164 { get; set; } = new(); @@ -49,7 +49,7 @@ public ConfigureHeadstage64() /// /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device in the headstage-64.")] public ConfigureBno055 Bno055 { get; set; } = new(); @@ -57,7 +57,7 @@ public ConfigureHeadstage64() /// /// Gets or sets the SteamVR V1 basestation 3D tracking array configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the TS4231 device in the headstage-64.")] public ConfigureTS4231V1 TS4231 { get; set; } = new() { Enable = false }; @@ -65,7 +65,7 @@ public ConfigureHeadstage64() /// /// Gets or sets onboard electrical stimulator configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the ElectricalStimulator device in the headstage-64.")] public ConfigureHeadstage64ElectricalStimulator ElectricalStimulator { get; set; } = new(); @@ -73,7 +73,7 @@ public ConfigureHeadstage64() /// /// Gets or sets onboard optical stimulator configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the OpticalStimulator device in the headstage-64.")] public ConfigureHeadstage64OpticalStimulator OpticalStimulator { get; set; } = new(); @@ -85,6 +85,7 @@ public ConfigureHeadstage64() /// The port is the physical connection to the ONIX breakout board and must be specified prior to operation. /// [Description("Specifies the physical connection of the headstage to the ONIX breakout board.")] + [Category(ConfigurationCategory)] public PortName Port { get { return port; } @@ -120,6 +121,7 @@ public PortName Port [Description("If defined, it will override automated voltage discovery and apply the specified voltage" + "to the headstage. Warning: this device requires 5.5V to 6.0V for proper operation." + "Supplying higher voltages may result in damage to the headstage.")] + [Category(ConfigurationCategory)] public double? PortVoltage { get => PortControl.PortVoltage; diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs index abf9120..0876859 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1e.cs @@ -76,6 +76,7 @@ public ConfigureNeuropixelsV1e(ConfigureNeuropixelsV1e configureNeuropixelsV1e) [FileNameFilter("Gain calibration files (*_gainCalValues.csv)|*_gainCalValues.csv")] [Description("Path to the Neuropixels 1.0 gain calibration file.")] [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] + [Category(ConfigurationCategory)] public string GainCalibrationFile { get; set; } /// @@ -97,6 +98,7 @@ public ConfigureNeuropixelsV1e(ConfigureNeuropixelsV1e configureNeuropixelsV1e) [FileNameFilter("ADC calibration files (*_ADCCalibration.csv)|*_ADCCalibration.csv")] [Description("Path to the Neuropixels 1.0 ADC calibration file.")] [Editor("Bonsai.Design.OpenFileNameEditor, Bonsai.Design", DesignTypes.UITypeEditor)] + [Category(ConfigurationCategory)] public string AdcCalibrationFile { get; set; } /// diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs index 6d433d0..1b3977a 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV1eHeadstage.cs @@ -26,7 +26,7 @@ public ConfigureNeuropixelsV1eHeadstage() /// /// Gets or sets the NeuropixelsV1e configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [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)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV1eBno055 Bno055 { get; set; } = new(); @@ -46,6 +46,7 @@ public ConfigureNeuropixelsV1eHeadstage() /// The port is the physical connection to the ONIX breakout board and must be specified prior to operation. /// [Description("Specifies the physical connection of the headstage to the ONIX breakout board.")] + [Category(ConfigurationCategory)] public PortName Port { get { return port; } @@ -71,6 +72,7 @@ public PortName Port [Description("If defined, overrides automated voltage discovery and applies " + "the specified voltage to the headstage. Warning: this device requires 3.8V to 5.0V " + "for proper operation. Higher voltages can damage the headstage.")] + [Category(ConfigurationCategory)] public double? PortVoltage { get => PortControl.PortVoltage; diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs index 9464ac8..a57f049 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eBetaHeadstage.cs @@ -24,7 +24,7 @@ public ConfigureNeuropixelsV2eBetaHeadstage() /// /// Gets or sets the NeuropixelsV2eBeta configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the NeuropixelsV2eBeta device.")] public ConfigureNeuropixelsV2eBeta NeuropixelsV2eBeta { get; set; } = new(); @@ -32,7 +32,7 @@ public ConfigureNeuropixelsV2eBetaHeadstage() /// /// Gets or sets the Bno055 9-axis inertial measurement unit configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV2eBno055 Bno055 { get; set; } = new(); @@ -44,6 +44,7 @@ public ConfigureNeuropixelsV2eBetaHeadstage() /// The port is the physical connection to the ONIX breakout board and must be specified prior to operation. /// [Description("Specifies the physical connection of the headstage to the ONIX breakout board.")] + [Category(ConfigurationCategory)] public PortName Port { get { return port; } @@ -69,6 +70,7 @@ public PortName Port [Description("If defined, overrides automated voltage discovery and applies " + "the specified voltage to the headstage. Warning: this device requires 3.0V to 5.0V " + "for proper operation. Higher voltages can damage the headstage.")] + [Category(ConfigurationCategory)] public double? PortVoltage { get => PortControl.PortVoltage; diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs index be2fab4..ea726ab 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2eHeadstage.cs @@ -25,7 +25,7 @@ public ConfigureNeuropixelsV2eHeadstage() /// /// Gets or sets the NeuropixelsV2e configuration. /// - [Category(ConfigurationCategory)] + [Category(DevicesCategory)] [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)] + [Category(DevicesCategory)] [TypeConverter(typeof(SingleDeviceFactoryConverter))] [Description("Specifies the configuration for the Bno055 device.")] public ConfigureNeuropixelsV2eBno055 Bno055 { get; set; } = new(); @@ -45,6 +45,7 @@ public ConfigureNeuropixelsV2eHeadstage() /// The port is the physical connection to the ONIX breakout board and must be specified prior to operation. /// [Description("Specifies the physical connection of the headstage to the ONIX breakout board.")] + [Category(ConfigurationCategory)] public PortName Port { get { return port; } @@ -70,6 +71,7 @@ public PortName Port [Description("If defined, overrides automated voltage discovery and applies " + "the specified voltage to the headstage. Warning: this device requires 3.0V to 5.5V " + "for proper operation. Higher voltages can damage the headstage.")] + [Category(ConfigurationCategory)] public double? PortVoltage { get => PortControl.PortVoltage; diff --git a/OpenEphys.Onix1/ConfigureNeuropixelsV2ePortController.cs b/OpenEphys.Onix1/ConfigureNeuropixelsV2ePortController.cs index b1aff53..88fafcc 100644 --- a/OpenEphys.Onix1/ConfigureNeuropixelsV2ePortController.cs +++ b/OpenEphys.Onix1/ConfigureNeuropixelsV2ePortController.cs @@ -4,7 +4,6 @@ namespace OpenEphys.Onix1 { class ConfigureNeuropixelsV2ePortController : ConfigurePortController { - protected override bool ConfigurePortVoltage(DeviceContext device) { const double MinVoltage = 3.3; diff --git a/OpenEphys.Onix1/ConfigurePortController.cs b/OpenEphys.Onix1/ConfigurePortController.cs index dda3aca..5e5bb63 100644 --- a/OpenEphys.Onix1/ConfigurePortController.cs +++ b/OpenEphys.Onix1/ConfigurePortController.cs @@ -20,6 +20,7 @@ public ConfigurePortController() [Description("Specifies the supplied port voltage. If this value is specified, it will override automated" + "voltage discovery. Warning: Supplying excessive voltage may result in damage to devices. " + "Consult the device datasheet and documentation for allowable voltage ranges.")] + [Category(ConfigurationCategory)] public double? PortVoltage { get; set; } = null; protected virtual bool CheckLinkState(DeviceContext device) diff --git a/OpenEphys.Onix1/CreateContext.cs b/OpenEphys.Onix1/CreateContext.cs index 87b2ff8..2fb7711 100644 --- a/OpenEphys.Onix1/CreateContext.cs +++ b/OpenEphys.Onix1/CreateContext.cs @@ -18,6 +18,7 @@ public class CreateContext /// Gets or sets a string specifying the device driver used to communicate with hardware. /// [Description("Specifies the device driver used to communicate with hardware.")] + [Category(DeviceFactory.ConfigurationCategory)] public string Driver { get; set; } = ContextTask.DefaultDriver; /// @@ -30,6 +31,7 @@ public class CreateContext /// managed by the specified selected in the host computer. /// [Description("The index of the host interconnect between the ONI controller and host computer.")] + [Category(DeviceFactory.ConfigurationCategory)] public int Index { get; set; } = ContextTask.DefaultIndex; /// diff --git a/OpenEphys.Onix1/DeviceFactory.cs b/OpenEphys.Onix1/DeviceFactory.cs index f1bd6bb..443fbda 100644 --- a/OpenEphys.Onix1/DeviceFactory.cs +++ b/OpenEphys.Onix1/DeviceFactory.cs @@ -52,6 +52,7 @@ internal SingleDeviceFactory(Type deviceType) /// aggregates or virtual devices. /// [Description(DeviceNameDescription)] + [Category(ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -62,6 +63,7 @@ internal SingleDeviceFactory(Type deviceType) /// representation of a , but can also represent abstract device addresses. /// [Description(DeviceAddressDescription)] + [Category(ConfigurationCategory)] public uint DeviceAddress { get; set; } /// diff --git a/OpenEphys.Onix1/HarpSyncInputData.cs b/OpenEphys.Onix1/HarpSyncInputData.cs index 6428420..4f27246 100644 --- a/OpenEphys.Onix1/HarpSyncInputData.cs +++ b/OpenEphys.Onix1/HarpSyncInputData.cs @@ -17,6 +17,7 @@ public class HarpSyncInputData : Source /// [TypeConverter(typeof(HarpSyncInput.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs b/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs index 879f6d2..6d3145e 100644 --- a/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs +++ b/OpenEphys.Onix1/Headstage64ElectricalStimulatorTrigger.cs @@ -37,6 +37,7 @@ public class Headstage64ElectricalStimulatorTrigger: Sink /// [TypeConverter(typeof(Headstage64ElectricalStimulator.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -46,6 +47,7 @@ public class Headstage64ElectricalStimulatorTrigger: Sink /// If set to true, then the electrical stimulator circuit will respect triggers. If set to false, triggers will be ignored. /// [Description("Specifies whether the electrical stimulator will respect triggers.")] + [Category(DeviceFactory.AcquisitionCategory)] public bool Enable { get => enable.Value; @@ -62,6 +64,7 @@ public bool Enable /// in order for electrical stimuli to be delivered properly. It takes ~10 milliseconds for these supplies to stabilize. /// [Description("Stimulator power on/off.")] + [Category(DeviceFactory.AcquisitionCategory)] public bool PowerEnable { get => powerEnable.Value; @@ -73,6 +76,7 @@ public bool PowerEnable /// [Description("A delay from receiving a trigger to the start of stimulus sequence application (uSec).")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint TriggerDelay { get => triggerDelay.Value; @@ -87,6 +91,7 @@ public uint TriggerDelay [Range(-Headstage64ElectricalStimulator.AbsMaxMicroAmps, Headstage64ElectricalStimulator.AbsMaxMicroAmps)] [Editor(DesignTypes.SliderEditor, typeof(UITypeEditor))] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double PhaseOneCurrent { get => phaseOneCurrent.Value; @@ -100,6 +105,7 @@ public double PhaseOneCurrent [Range(-Headstage64ElectricalStimulator.AbsMaxMicroAmps, Headstage64ElectricalStimulator.AbsMaxMicroAmps)] [Editor(DesignTypes.SliderEditor, typeof(UITypeEditor))] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double InterPhaseCurrent { get => interPhaseCurrent.Value; @@ -113,6 +119,7 @@ public double InterPhaseCurrent [Range(-Headstage64ElectricalStimulator.AbsMaxMicroAmps, Headstage64ElectricalStimulator.AbsMaxMicroAmps)] [Editor(DesignTypes.SliderEditor, typeof(UITypeEditor))] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double PhaseTwoCurrent { get => phaseTwoCurrent.Value; @@ -124,6 +131,7 @@ public double PhaseTwoCurrent /// [Description("The duration of the first phase of each pulse in μsec.")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint PhaseOneDuration { get => phaseOneDuration.Value; @@ -135,6 +143,7 @@ public uint PhaseOneDuration /// [Description("The duration of the interphase interval of each pulse (uSec).")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint InterPhaseInterval { get => interPhaseInterval.Value; @@ -146,6 +155,7 @@ public uint InterPhaseInterval /// [Description("The duration of the second phase of each pulse (uSec).")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint PhaseTwoDuration { get => phaseTwoDuration.Value; @@ -157,6 +167,7 @@ public uint PhaseTwoDuration /// [Description("The duration of the inter-pulse interval within a single burst (uSec).")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint InterPulseInterval { get => interPulseInterval.Value; @@ -168,6 +179,7 @@ public uint InterPulseInterval /// [Description("The duration of the inter-burst interval within a stimulus train (uSec).")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint InterBurstInterval { get => interBurstInterval.Value; @@ -179,6 +191,7 @@ public uint InterBurstInterval /// [Description("The number of pulses per burst.")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint BurstPulseCount { get => burstPulseCount.Value; @@ -190,6 +203,7 @@ public uint BurstPulseCount /// [Description("The number of bursts in each train.")] [Range(0, uint.MaxValue)] + [Category(DeviceFactory.AcquisitionCategory)] public uint TrainBurstCount { get => trainBurstCount.Value; diff --git a/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs b/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs index 88a796e..c811320 100644 --- a/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs +++ b/OpenEphys.Onix1/Headstage64OpticalStimulatorTrigger.cs @@ -33,6 +33,7 @@ public class Headstage64OpticalStimulatorTrigger : Sink /// [TypeConverter(typeof(Headstage64OpticalStimulator.NameConverter))] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -42,6 +43,7 @@ public class Headstage64OpticalStimulatorTrigger : Sink /// If set to true, then the optical stimulator circuit will respect triggers. If set to false, triggers will be ignored. /// [Description("Specifies whether the optical stimulator will respect triggers.")] + [Category(DeviceFactory.AcquisitionCategory)] public bool Enable { get => enable.Value; @@ -55,6 +57,7 @@ public bool Enable [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0.0, 1000.0)] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double Delay { get => delay.Value; @@ -75,6 +78,7 @@ public double Delay [Editor(DesignTypes.SliderEditor, typeof(UITypeEditor))] [Range(0, 300)] [Precision(3, 0)] + [Category(DeviceFactory.AcquisitionCategory)] public double MaxCurrent { get => maxCurrent.Value; @@ -88,6 +92,7 @@ public double MaxCurrent [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0, 100)] [Precision(1, 12.5)] + [Category(DeviceFactory.AcquisitionCategory)] public double ChannelOneCurrent { get => channelOneCurrent.Value; @@ -101,6 +106,7 @@ public double ChannelOneCurrent [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0, 100)] [Precision(1, 12.5)] + [Category(DeviceFactory.AcquisitionCategory)] public double ChannelTwoCurrent { get => channelTwoCurrent.Value; @@ -114,6 +120,7 @@ public double ChannelTwoCurrent [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0.001, 1000.0)] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double PulseDuration { get => pulseDuration.Value; @@ -127,6 +134,7 @@ public double PulseDuration [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0.01, 10000.0)] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double PulsesPerSecond { get => pulsesPerSecond.Value; @@ -140,6 +148,7 @@ public double PulsesPerSecond [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(1, int.MaxValue)] [Precision(0, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public uint PulsesPerBurst { get => pulsesPerBurst.Value; @@ -154,6 +163,7 @@ public uint PulsesPerBurst [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(0.0, 10000.0)] [Precision(3, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public double InterBurstInterval { get => interBurstInterval.Value; @@ -167,6 +177,7 @@ public double InterBurstInterval [Editor(DesignTypes.NumericUpDownEditor, DesignTypes.UITypeEditor)] [Range(1, int.MaxValue)] [Precision(0, 1)] + [Category(DeviceFactory.AcquisitionCategory)] public uint BurstsPerTrain { get => burstsPerTrain.Value; diff --git a/OpenEphys.Onix1/HeartbeatData.cs b/OpenEphys.Onix1/HeartbeatData.cs index f4c5522..08ad193 100644 --- a/OpenEphys.Onix1/HeartbeatData.cs +++ b/OpenEphys.Onix1/HeartbeatData.cs @@ -19,6 +19,7 @@ public class HeartbeatData : Source /// [TypeConverter(typeof(Heartbeat.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/MemoryMonitorData.cs b/OpenEphys.Onix1/MemoryMonitorData.cs index ed67414..7363e3e 100644 --- a/OpenEphys.Onix1/MemoryMonitorData.cs +++ b/OpenEphys.Onix1/MemoryMonitorData.cs @@ -19,6 +19,7 @@ public class MemoryMonitorData : Source /// [TypeConverter(typeof(MemoryMonitor.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/MultiDeviceFactory.cs b/OpenEphys.Onix1/MultiDeviceFactory.cs index d7d3b3b..4477261 100644 --- a/OpenEphys.Onix1/MultiDeviceFactory.cs +++ b/OpenEphys.Onix1/MultiDeviceFactory.cs @@ -29,6 +29,8 @@ public abstract class MultiDeviceFactory : DeviceFactory, INamedElement const string BaseTypePrefix = "Configure"; string _name; + internal const string DevicesCategory = "Devices"; + internal MultiDeviceFactory() { var baseName = GetType().Name; @@ -44,6 +46,7 @@ internal MultiDeviceFactory() /// the of each device in the the group. /// [Description("The unique device group name.")] + [Category(ConfigurationCategory)] public string Name { get { return _name; } diff --git a/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs b/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs index e6f66bc..b5564d8 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eBno055Data.cs @@ -15,6 +15,7 @@ public class NeuropixelsV1eBno055Data : Source /// [TypeConverter(typeof(NeuropixelsV1eBno055.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/NeuropixelsV1eData.cs b/OpenEphys.Onix1/NeuropixelsV1eData.cs index b7513a1..b9b0cfb 100644 --- a/OpenEphys.Onix1/NeuropixelsV1eData.cs +++ b/OpenEphys.Onix1/NeuropixelsV1eData.cs @@ -17,6 +17,7 @@ public class NeuropixelsV1eData : Source /// [TypeConverter(typeof(NeuropixelsV1e.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } int bufferSize = 36; @@ -31,6 +32,7 @@ public class NeuropixelsV1eData : Source /// [Description("Number of super-frames (384 channels from spike band and 32 channels from " + "LFP band) to buffer before propagating data. Must be a multiple of 12.")] + [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get => bufferSize; diff --git a/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs b/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs index 5fd61bc..4861d05 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eBetaData.cs @@ -17,6 +17,7 @@ public class NeuropixelsV2eBetaData : Source /// [TypeConverter(typeof(NeuropixelsV2eBeta.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -26,12 +27,14 @@ public class NeuropixelsV2eBetaData : Source /// Buffer size sets the number of frames that are buffered before propagating data. /// [Description("The number of samples collected for each channel that are used to create a single NeuropixelsV2eBetaDataFrame.")] + [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get; set; } = 30; /// /// Gets or sets the probe index. /// [Description("The index of the probe from which to collect sample data")] + [Category(DeviceFactory.ConfigurationCategory)] public NeuropixelsV2Probe ProbeIndex { get; set; } /// diff --git a/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs b/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs index a376a53..28b7955 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eBno055Data.cs @@ -15,6 +15,7 @@ public class NeuropixelsV2eBno055Data : Source /// [TypeConverter(typeof(NeuropixelsV2eBno055.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/NeuropixelsV2eData.cs b/OpenEphys.Onix1/NeuropixelsV2eData.cs index 2284ce9..4891b4e 100644 --- a/OpenEphys.Onix1/NeuropixelsV2eData.cs +++ b/OpenEphys.Onix1/NeuropixelsV2eData.cs @@ -17,6 +17,7 @@ public class NeuropixelsV2eData : Source /// [TypeConverter(typeof(NeuropixelsV2e.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -29,12 +30,14 @@ public class NeuropixelsV2eData : Source /// sampled at 30 kHz, this is equivalent to 1 millisecond of data from each channel. /// [Description("The number of samples collected for each channel that are used to create a single NeuropixelsV2eDataFrame.")] + [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get; set; } = 30; /// /// Gets or sets the probe index. /// [Description("The index of the probe from which to collect sample data")] + [Category(DeviceFactory.ConfigurationCategory)] public NeuropixelsV2Probe ProbeIndex { get; set; } /// diff --git a/OpenEphys.Onix1/Rhd2164Data.cs b/OpenEphys.Onix1/Rhd2164Data.cs index de6c168..17e654e 100644 --- a/OpenEphys.Onix1/Rhd2164Data.cs +++ b/OpenEphys.Onix1/Rhd2164Data.cs @@ -22,6 +22,7 @@ public class Rhd2164Data : Source /// [TypeConverter(typeof(Rhd2164.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -34,6 +35,7 @@ public class Rhd2164Data : Source /// 30 kHz, this is equivalent to 1 millisecond of data from each channel. /// [Description("The number of samples collected for each channel that are used to create a single Rhd2164DataFrame.")] + [Category(DeviceFactory.ConfigurationCategory)] public int BufferSize { get; set; } = 30; /// diff --git a/OpenEphys.Onix1/StartAcquisition.cs b/OpenEphys.Onix1/StartAcquisition.cs index 5bc60ab..1c5d2c2 100644 --- a/OpenEphys.Onix1/StartAcquisition.cs +++ b/OpenEphys.Onix1/StartAcquisition.cs @@ -24,6 +24,7 @@ public class StartAcquisition : Combinator). /// [Description("Number of bytes read per cycle of the acquisition thread.")] + [Category(DeviceFactory.ConfigurationCategory)] public int ReadSize { get; set; } = 2048; /// @@ -37,6 +38,7 @@ public class StartAcquisition : Combinator. /// [Description("The number of bytes that are pre-allocated for writing data to hardware.")] + [Category(DeviceFactory.ConfigurationCategory)] public int WriteSize { get; set; } = 2048; /// diff --git a/OpenEphys.Onix1/TS4231V1Data.cs b/OpenEphys.Onix1/TS4231V1Data.cs index e742ec8..1b9c695 100644 --- a/OpenEphys.Onix1/TS4231V1Data.cs +++ b/OpenEphys.Onix1/TS4231V1Data.cs @@ -27,6 +27,7 @@ public class TS4231V1Data : Source /// [TypeConverter(typeof(TS4231V1.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// diff --git a/OpenEphys.Onix1/TS4231V1PositionData.cs b/OpenEphys.Onix1/TS4231V1PositionData.cs index a7d27c7..89b87b4 100644 --- a/OpenEphys.Onix1/TS4231V1PositionData.cs +++ b/OpenEphys.Onix1/TS4231V1PositionData.cs @@ -41,6 +41,7 @@ public class TS4231V1PositionData : Source /// [TypeConverter(typeof(TS4231V1.NameConverter))] [Description(SingleDeviceFactory.DeviceNameDescription)] + [Category(DeviceFactory.ConfigurationCategory)] public string DeviceName { get; set; } /// @@ -51,6 +52,7 @@ public class TS4231V1PositionData : Source /// Typically this value is used to define the origin and remains at (0, 0, 0). /// [Description("The position of the first base station in arbitrary units.")] + [Category(DeviceFactory.ConfigurationCategory)] public Point3d P { get; set; } = new(0, 0, 0); /// @@ -60,6 +62,7 @@ public class TS4231V1PositionData : Source /// The units used will determine the units of and must match those used in . /// [Description("The position of the second base station in arbitrary units.")] + [Category(DeviceFactory.ConfigurationCategory)] public Point3d Q { get; set; } = new(1, 0, 0); ///