Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/e1.37 5 #34

Merged
merged 4 commits into from
Sep 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -81,16 +81,22 @@ public RDMMessage BuildGetResponseMessage(GetResponse getResponseValue)
return this.buildGetResponseMessage(getResponseValue);
}

#endregion
}
public abstract class AbstractRDMGetParameterWrapperRanged<GetRequest, GetResponse> : AbstractRDMGetParameterWrapper<GetRequest, GetResponse>, IRDMGetParameterWrapperRequestRanged, IRDMGetParameterWrapperRequestRanged<GetRequest>
{
protected AbstractRDMGetParameterWrapperRanged(in ERDM_Parameter parameter) : base(parameter)
{
}
public abstract IRequestRange GetRequestRange(object value);
IRequestRange IRDMGetParameterWrapperRequest.GetRequestRange(object value)
IRequestRange IRDMGetParameterWrapperRequestRanged.GetRequestRange(object value)
{
return this.GetRequestRange(value);
}

IRequestRange<GetRequest> IRDMGetParameterWrapperRequest<GetRequest>.GetRequestRange(object value)
IRequestRange<GetRequest> IRDMGetParameterWrapperRequestRanged<GetRequest>.GetRequestRange(object value)
{
return (IRequestRange<GetRequest>)this.GetRequestRange(value);
}
#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,24 @@

namespace RDMSharp.ParameterWrapper
{
public abstract class AbstractRDMGetSetParameterWrapper<GetRequest, GetResponse, SetRequest, SetResponse> : AbstractRDMParameterWrapper<GetRequest, GetResponse, SetRequest, SetResponse>, IRDMGetParameterWrapper<GetRequest, GetResponse>, IRDMSetParameterWrapper<SetRequest, SetResponse>
public abstract class AbstractRDMGetSetParameterWrapperRanged<GetRequest, GetResponse, SetRequest, SetResponse> : AbstractRDMGetSetParameterWrapper<GetRequest, GetResponse, SetRequest, SetResponse>, IRDMGetParameterWrapperRequestRanged, IRDMGetParameterWrapperRequestRanged<GetRequest>
{
public abstract ERDM_Parameter[] DescriptiveParameters { get; }
protected AbstractRDMGetSetParameterWrapperRanged(in ERDM_Parameter parameter) : base(parameter)
{
}
public abstract IRequestRange GetRequestRange(object value);
IRequestRange IRDMGetParameterWrapperRequestRanged.GetRequestRange(object value)
{
return this.GetRequestRange(value);
}

IRequestRange<GetRequest> IRDMGetParameterWrapperRequestRanged<GetRequest>.GetRequestRange(object value)
{
return (IRequestRange<GetRequest>)this.GetRequestRange(value);
}
}
public abstract class AbstractRDMGetSetParameterWrapper<GetRequest, GetResponse, SetRequest, SetResponse> : AbstractRDMParameterWrapper<GetRequest, GetResponse, SetRequest, SetResponse>, IRDMGetParameterWrapper<GetRequest, GetResponse>, IRDMSetParameterWrapper<SetRequest, SetResponse>
{
public override sealed ERDM_CommandClass CommandClass => ERDM_CommandClass.GET | ERDM_CommandClass.SET;

Expand All @@ -14,8 +31,6 @@ public abstract class AbstractRDMGetSetParameterWrapper<GetRequest, GetResponse,

public Type SetResponseType => typeof(SetResponse);

public abstract ERDM_Parameter[] DescriptiveParameters { get; }

protected AbstractRDMGetSetParameterWrapper(in ERDM_Parameter parameter) : base(parameter)
{
}
Expand Down Expand Up @@ -96,15 +111,5 @@ public RDMMessage BuildSetResponseMessage(SetResponse setResponseValue)
return this.buildSetResponseMessage(setResponseValue);
}
#endregion
public abstract IRequestRange GetRequestRange(object value);
IRequestRange IRDMGetParameterWrapperRequest.GetRequestRange(object value)
{
return this.GetRequestRange(value);
}

IRequestRange<GetRequest> IRDMGetParameterWrapperRequest<GetRequest>.GetRequestRange(object value)
{
return (IRequestRange<GetRequest>)this.GetRequestRange(value);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace RDMSharp.ParameterWrapper
{
public abstract class AbstractRDMGetSetParameterWrapperEmptySetResponse<GetRequest, GetResponse, SetRequest> : AbstractRDMParameterWrapper<GetRequest, GetResponse, SetRequest, Empty>, IRDMGetParameterWrapper<GetRequest, GetResponse>, IRDMSetParameterWrapperRequest<SetRequest>, IRDMSetParameterWrapperWithEmptySetResponse
public abstract class AbstractRDMGetSetParameterWrapperEmptySetResponse<GetRequest, GetResponse, SetRequest> : AbstractRDMParameterWrapper<GetRequest, GetResponse, SetRequest, Empty>, IRDMGetParameterWrapper<GetRequest, GetResponse>, IRDMSetParameterWrapperRequest<SetRequest>, IRDMSetParameterWrapperWithEmptySetResponse, IRDMGetParameterWrapperRequestRanged, IRDMGetParameterWrapperRequestRanged<GetRequest>
{
public override sealed ERDM_CommandClass CommandClass => ERDM_CommandClass.GET | ERDM_CommandClass.SET;

Expand Down Expand Up @@ -96,12 +96,12 @@ public RDMMessage BuildGetResponseMessage(GetResponse getResponseValue)
}

public abstract IRequestRange GetRequestRange(object value);
IRequestRange IRDMGetParameterWrapperRequest.GetRequestRange(object value)
IRequestRange IRDMGetParameterWrapperRequestRanged.GetRequestRange(object value)
{
return this.GetRequestRange(value);
}

IRequestRange<GetRequest> IRDMGetParameterWrapperRequest<GetRequest>.GetRequestRange(object value)
IRequestRange<GetRequest> IRDMGetParameterWrapperRequestRanged<GetRequest>.GetRequestRange(object value)
{
return (IRequestRange<GetRequest>)this.GetRequestRange(value);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class DMX512PersonalityDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMDMXPersonalityDescription>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class DMX512PersonalityDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMDMXPersonalityDescription>, IRDMBlueprintDescriptionListParameterWrapper
{
public DMX512PersonalityDescriptionParameterWrapper() : base(ERDM_Parameter.DMX_PERSONALITY_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class ParameterDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<ERDM_Parameter, RDMParameterDescription>, IRDMBlueprintParameterWrapper
public sealed class ParameterDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<ERDM_Parameter, RDMParameterDescription>, IRDMBlueprintParameterWrapper
{
public override ERDM_SupportedSubDevice SupportedGetSubDevices => ERDM_SupportedSubDevice.ROOT;
public ParameterDescriptionParameterWrapper() : base(ERDM_Parameter.PARAMETER_DESCRIPTION)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class SelfTestDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMSelfTestDescription>, IRDMBlueprintParameterWrapper
public sealed class SelfTestDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMSelfTestDescription>, IRDMBlueprintParameterWrapper
{
public SelfTestDescriptionParameterWrapper() : base(ERDM_Parameter.SELF_TEST_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class SensorDefinitionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMSensorDefinition>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class SensorDefinitionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMSensorDefinition>, IRDMBlueprintDescriptionListParameterWrapper
{
public SensorDefinitionParameterWrapper() : base(ERDM_Parameter.SENSOR_DEFINITION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class SensorValueParameterWrapper : AbstractRDMGetSetParameterWrapper<byte, RDMSensorValue, byte, RDMSensorValue>
public sealed class SensorValueParameterWrapper : AbstractRDMGetSetParameterWrapperRanged<byte, RDMSensorValue, byte, RDMSensorValue>
{
public SensorValueParameterWrapper() : base(ERDM_Parameter.SENSOR_VALUE)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class SlotDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<ushort, RDMSlotDescription>, IRDMDescriptionParameterWrapper
public sealed class SlotDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<ushort, RDMSlotDescription>, IRDMDescriptionParameterWrapper
{
public SlotDescriptionParameterWrapper() : base(ERDM_Parameter.SLOT_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class StatusIdDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<ushort, string>, IRDMBlueprintParameterWrapper
public sealed class StatusIdDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<ushort, string>, IRDMBlueprintParameterWrapper
{
public override ERDM_SupportedSubDevice SupportedGetSubDevices => ERDM_SupportedSubDevice.ROOT;
public StatusIdDescriptionParameterWrapper() : base(ERDM_Parameter.STATUS_ID_DESCRIPTION)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class StatusMessageParameterWrapper : AbstractRDMGetParameterWrapper<ERDM_Status, RDMStatusMessage[]>
public sealed class StatusMessageParameterWrapper : AbstractRDMGetParameterWrapperRanged<ERDM_Status, RDMStatusMessage[]>
{
public override ERDM_SupportedSubDevice SupportedGetSubDevices => ERDM_SupportedSubDevice.ROOT;
public StatusMessageParameterWrapper() : base(ERDM_Parameter.STATUS_MESSAGES)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class CurveDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMCurveDescription>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class CurveDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMCurveDescription>, IRDMBlueprintDescriptionListParameterWrapper
{
public CurveDescriptionParameterWrapper() : base(ERDM_Parameter.CURVE_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class LockStateDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMLockStateDescription>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class LockStateDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMLockStateDescription>, IRDMBlueprintDescriptionListParameterWrapper
{
public LockStateDescriptionParameterWrapper() : base(ERDM_Parameter.LOCK_STATE_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class ModulationFrequencyDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMModulationFrequencyDescription>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class ModulationFrequencyDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMModulationFrequencyDescription>, IRDMBlueprintDescriptionListParameterWrapper
{
public ModulationFrequencyDescriptionParameterWrapper() : base(ERDM_Parameter.MODULATION_FREQUENCY_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

namespace RDMSharp.ParameterWrapper
{
public sealed class OutputResponseTimeDescriptionParameterWrapper : AbstractRDMGetParameterWrapper<byte, RDMOutputResponseTimeDescription>, IRDMBlueprintDescriptionListParameterWrapper
public sealed class OutputResponseTimeDescriptionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMOutputResponseTimeDescription>, IRDMBlueprintDescriptionListParameterWrapper
{
public OutputResponseTimeDescriptionParameterWrapper() : base(ERDM_Parameter.OUTPUT_RESPONSE_TIME_DESCRIPTION)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class HardwareAddressParameterWrapper : AbstractRDMGetParameterWrapper<uint, GetHardwareAddressResponse>
public sealed class HardwareAddressParameterWrapper : AbstractRDMGetParameterWrapperRanged<uint, GetHardwareAddressResponse>
{
public HardwareAddressParameterWrapper() : base(ERDM_Parameter.INTERFACE_HARDWARE_ADDRESS_TYPE)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class IPv4Address_NetmaskParameterWrapper : AbstractRDMGetParameterWrapper<uint, GetIPv4CurrentAddressResponse>
public sealed class IPv4Address_NetmaskParameterWrapper : AbstractRDMGetParameterWrapperRanged<uint, GetIPv4CurrentAddressResponse>
{
public IPv4Address_NetmaskParameterWrapper() : base(ERDM_Parameter.IPV4_CURRENT_ADDRESS)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class InterfaceNameParameterWrapper : AbstractRDMGetParameterWrapper<uint, GetInterfaceNameResponse>
public sealed class InterfaceNameParameterWrapper : AbstractRDMGetParameterWrapperRanged<uint, GetInterfaceNameResponse>
{
public InterfaceNameParameterWrapper() : base(ERDM_Parameter.INTERFACE_LABEL)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class AddTagParameterWrapper : AbstractRDMSetParameterWrapperEmptyResponse<string>
{
public AddTagParameterWrapper() : base(ERDM_Parameter.ADD_TAG)
{
}
public override string Name => "Add Tag";
public override string Description => "This parameter associates a tag with a Responder. If the tag already exists on the Responder, the Responder shall just return an ACK without modifying the tag in any way.";

protected override string setRequestParameterDataToValue(byte[] parameterData)
{
return Tools.DataToString(ref parameterData, 32);
}

protected override byte[] setRequestValueToParameterData(string value)
{
return Tools.ValueToData(value, 32);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class CheckTagParameterWrapper : AbstractRDMSetParameterWrapper<string,bool>
{
public CheckTagParameterWrapper() : base(ERDM_Parameter.CHECK_TAG)
{
}
public override string Name => "Check Tag";
public override string Description => "The CHECK_TAG parameter allows a Controller to test if a tag is present on a Responder.";

protected override string setRequestParameterDataToValue(byte[] parameterData)
{
return Tools.DataToString(ref parameterData, 32);
}

protected override byte[] setRequestValueToParameterData(string value)
{
return Tools.ValueToData(value, 32);
}

protected override bool setResponseParameterDataToValue(byte[] parameterData)
{
return Tools.DataToBool(ref parameterData);
}

protected override byte[] setResponseValueToParameterData(bool value)
{
return Tools.ValueToData(value);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class ClearTagsParameterWrapper : AbstractRDMSetParameterWrapperEmptyRequestResponse
{
public ClearTagsParameterWrapper() : base(ERDM_Parameter.CLEAR_TAGS)
{
}
public override string Name => "Clear Tags";
public override string Description => "This parameter removes all tags from a Responder.";

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
namespace RDMSharp.ParameterWrapper
{
public sealed class CommunicationStatusNullStartCodeParameterWrapper : AbstractRDMGetSetParameterWrapperEmptyGetRequestSetRequestSetResponse<GetCommunicationStatusNullStartCodeResponse>,IRDMBlueprintParameterWrapper
{
public CommunicationStatusNullStartCodeParameterWrapper() : base(ERDM_Parameter.COMMS_STATUS_NSC)
{
}
public override string Name => "Communication Status Null Start Code";
public override string Description => "This parameter allows a Controller to retrieve statistical packet and error counters relating to NULL START Code (NSC) packets (see [DMX], Section 8.5.1).";

protected override GetCommunicationStatusNullStartCodeResponse getResponseParameterDataToValue(byte[] parameterData)
{
return GetCommunicationStatusNullStartCodeResponse.FromPayloadData(parameterData);
}

protected override byte[] getResponseValueToParameterData(GetCommunicationStatusNullStartCodeResponse value)
{
return Tools.ValueToData(value);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
using System;

namespace RDMSharp.ParameterWrapper
{
public sealed class DMX512PersonalityIdDefinitionParameterWrapper : AbstractRDMGetParameterWrapperRanged<byte, RDMPersonalityId>, IRDMBlueprintParameterWrapper
{
public DMX512PersonalityIdDefinitionParameterWrapper() : base(ERDM_Parameter.DMX_PERSONALITY_ID)
{
}
public override string Name => "DMX512 Personality ID";
public override string Description => "A DMX512 Personality uniquely identifies a personality across different models and software versions. This allows Controllers to select the correct personality profile, even if the personality indices have changed due to additions / removals. Equivalent personalities across products from a manufacturer are required to have the same personality identifier.Any change to the DMX512 behavior of a Responder shall result in a new DMX_PERSONALITY_ID(see the major / minor descriptions below). Any manufacturers with Responders that support this parameter should publish the DMX personality identifier in the personality documentation on their website.If a Responder supports PRODUCT_URL, manufacturers are strongly encouraged to link to the personality documentation from the URL returned with PRODUCT_URL. A personality of zero means that the personality is not defined. This may mean that a custom personality is in use. For both the major and minor numbers, the values 0x0000 to 0x7FFF are manufacturer-defined, values 0x8000 to 0xFFFE are reserved. A value of 0xFFFF in both the Major Personality ID and Minor Personality ID fields indicates the personality is user-defined.For example, a media server may allow the user to define a DMX512 profile. A value of 0xFFFF in only one of the fields, but not both, is undefined, and shall be ignored.";

private static readonly ERDM_Parameter[] descriptiveParameters = new ERDM_Parameter[] { ERDM_Parameter.DEVICE_INFO };
public override ERDM_Parameter[] DescriptiveParameters => descriptiveParameters;

protected override byte[] getRequestValueToParameterData(byte parameterID)
{
return Tools.ValueToData(parameterID);
}
protected override byte getRequestParameterDataToValue(byte[] parameterData)
{
return Tools.DataToByte(ref parameterData);
}

protected override RDMPersonalityId getResponseParameterDataToValue(byte[] parameterData)
{
return RDMPersonalityId.FromPayloadData(parameterData);
}
protected override byte[] getResponseValueToParameterData(RDMPersonalityId personalityId)
{
return personalityId.ToPayloadData();
}

public override IRequestRange GetRequestRange(object value)
{
return DMX512PersonalityIdDefinitionParameterWrapper.GetRequestRangeInternal(value);
}
internal static IRequestRange GetRequestRangeInternal(object value)
{
if (value is RDMDeviceInfo deviceInfo)
return new RequestRange<byte>(1, (byte)(deviceInfo.Dmx512NumberOfPersonalities));
else if (value == null)
return new RequestRange<byte>(1, byte.MaxValue);

throw new NotSupportedException($"There is no support for the Type: {value.GetType()}");
}
}
}
Loading