diff --git a/dotnet/IEC61850forCSharp/IsoConnectionParameters.cs b/dotnet/IEC61850forCSharp/IsoConnectionParameters.cs
index 342dbc30..778048ca 100644
--- a/dotnet/IEC61850forCSharp/IsoConnectionParameters.cs
+++ b/dotnet/IEC61850forCSharp/IsoConnectionParameters.cs
@@ -50,6 +50,15 @@ namespace IEC61850
[MarshalAs(UnmanagedType.ByValArray, SizeConst=4)] public byte[] value;
}
+
+ [StructLayout(LayoutKind.Sequential)]
+ private struct NativeSSelector
+ {
+ public byte size;
+
+ [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)] public byte[] value;
+ }
+
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
private static extern void IsoConnectionParameters_destroy(IntPtr self);
@@ -57,13 +66,13 @@ namespace IEC61850
private static extern void IsoConnectionParameters_setRemoteApTitle(IntPtr self, string apTitle, int aeQualifier);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- private static extern void IsoConnectionParameters_setRemoteAddresses(IntPtr self, UInt32 pSelector, UInt16 sSelector, NativeTSelector tSelector);
+ private static extern void IsoConnectionParameters_setRemoteAddresses(IntPtr self, UInt32 pSelector, NativeSSelector sSelector, NativeTSelector tSelector);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
private static extern void IsoConnectionParameters_setLocalApTitle(IntPtr self, string apTitle, int aeQualifier);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
- private static extern void IsoConnectionParameters_setLocalAddresses(IntPtr self, UInt32 pSelector, UInt16 sSelector, NativeTSelector tSelector);
+ private static extern void IsoConnectionParameters_setLocalAddresses(IntPtr self, UInt32 pSelector, NativeSSelector sSelector, NativeTSelector tSelector);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
private static extern void IsoConnectionParameters_setAcseAuthenticationParameter(IntPtr self, IntPtr acseAuthParameter);
@@ -123,7 +132,7 @@ namespace IEC61850
///
/// ISO COTP transport layer address
///
- public void SetRemoteAddresses (UInt32 pSelector, UInt16 sSelector, byte[] tSelector)
+ public void SetRemoteAddresses (UInt32 pSelector, byte[] sSelector, byte[] tSelector)
{
if (tSelector.Length > 4)
throw new ArgumentOutOfRangeException("tSelector", "maximum size (4) exceeded");
@@ -135,7 +144,14 @@ namespace IEC61850
for (int i = 0; i < tSelector.Length; i++)
nativeTSelector.value[i] = tSelector[i];
- IsoConnectionParameters_setRemoteAddresses(self, pSelector, sSelector, nativeTSelector);
+ NativeSSelector nativeSSelector;
+ nativeSSelector.size = (byte) sSelector.Length;
+ nativeSSelector.value = new byte[16];
+
+ for (int i = 0; i < sSelector.Length; i++)
+ nativeSSelector.value [i] = sSelector [i];
+
+ IsoConnectionParameters_setRemoteAddresses(self, pSelector, nativeSSelector, nativeTSelector);
}
///
@@ -164,7 +180,7 @@ namespace IEC61850
///
/// ISO COTP transport layer address
///
- public void SetLocalAddresses (UInt32 pSelector, UInt16 sSelector, byte[] tSelector)
+ public void SetLocalAddresses (UInt32 pSelector, byte[] sSelector, byte[] tSelector)
{
if (tSelector.Length > 4)
throw new ArgumentOutOfRangeException("tSelector", "maximum size (4) exceeded");
@@ -176,7 +192,14 @@ namespace IEC61850
for (int i = 0; i < tSelector.Length; i++)
nativeTSelector.value[i] = tSelector[i];
- IsoConnectionParameters_setLocalAddresses(self, pSelector, sSelector, nativeTSelector);
+ NativeSSelector nativeSSelector;
+ nativeSSelector.size = (byte) sSelector.Length;
+ nativeSSelector.value = new byte[16];
+
+ for (int i = 0; i < sSelector.Length; i++)
+ nativeSSelector.value [i] = sSelector [i];
+
+ IsoConnectionParameters_setLocalAddresses(self, pSelector, nativeSSelector, nativeTSelector);
}
///