- added FCs "BR" and "RP"

- fixed conformance problem in buffered reporting timeofEntry write access handling
pull/6/head
Michael Zillgith 10 years ago
parent 907eb0bbae
commit 108332774f

@ -1323,6 +1323,16 @@ namespace IEC61850
EX = 11,
/** Control */
CO = 12,
/** Unicast SV */
US = 13,
/** Multicast SV */
MS = 14,
/** Unbuffered report */
RP = 15,
/** Buffered report */
BR = 16,
/** All FCs - wildcard value */
ALL = 99,
NONE = -1
}

@ -140,6 +140,12 @@ namespace IEC61850
[return: MarshalAs(UnmanagedType.I1)]
static extern bool MmsValue_equals(IntPtr self, IntPtr otherValue);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern IntPtr MmsValue_newBinaryTime (bool timeOfDay);
[DllImport("iec61850", CallingConvention = CallingConvention.Cdecl)]
static extern void MmsValue_setBinaryTime (IntPtr self, UInt64 timestamp);
internal MmsValue (IntPtr value)
{
@ -229,6 +235,26 @@ namespace IEC61850
return new MmsValue(newValue, true);
}
/// <summary>
/// Create a new MmsValue instance of type MMS_BINARY_TIME
/// </summary>
/// <returns>the new MmsValue instance.</returns>
/// <param name="largeFormat">If set to <c>true</c> large 6 byte format.</param>
public static MmsValue NewBinaryTime(bool largeFormat)
{
IntPtr newValue = MmsValue_newBinaryTime (largeFormat);
return new MmsValue (newValue, true);
}
/// <summary>
/// Sets the binary time.
/// </summary>
/// <param name="timestamp">Timestamp.</param>
public void SetBinaryTime(UInt64 timestamp) {
MmsValue_setBinaryTime (this.valueReference, timestamp);
}
internal IntPtr valueReference;
private bool responsableForDeletion;

@ -637,7 +637,7 @@ IedConnection_setRCBValues(IedConnection self, IedClientError* error, ClientRepo
MmsValue* dataAccessError = (MmsValue*) accessResult->data;
if (MmsValue_getDataAccessError(dataAccessError) != DATA_ACCESS_ERROR_SUCCESS) {
*error = IED_ERROR_UNKNOWN;
*error = iedConnection_mapDataAccessErrorToIedError(MmsValue_getDataAccessError(dataAccessError));
break;
}

@ -129,6 +129,10 @@ FunctionalConstraint_toString(FunctionalConstraint fc) {
return "US";
case IEC61850_FC_MS:
return "MS";
case IEC61850_FC_RP:
return "RP";
case IEC61850_FC_BR:
return "BR";
default:
return NULL;
}
@ -157,6 +161,8 @@ FunctionalConstraint_fromString(const char* fcString)
if (fcString[0] == 'M') {
if (fcString[1] == 'X')
return IEC61850_FC_MX;
if (fcString[1] == 'S')
return IEC61850_FC_MS;
return IEC61850_FC_NONE;
}
@ -183,6 +189,8 @@ FunctionalConstraint_fromString(const char* fcString)
if (fcString[0] == 'B') {
if (fcString[1] == 'L')
return IEC61850_FC_BL;
if (fcString[1] == 'R')
return IEC61850_FC_BR;
return IEC61850_FC_NONE;
}
@ -192,6 +200,18 @@ FunctionalConstraint_fromString(const char* fcString)
return IEC61850_FC_NONE;
}
if (fcString[0] == 'U') {
if (fcString[1] == 'S')
return IEC61850_FC_US;
return IEC61850_FC_NONE;
}
if (fcString[0] == 'R') {
if (fcString[1] == 'P')
return IEC61850_FC_RP;
return IEC61850_FC_NONE;
}
return IEC61850_FC_NONE;
}

@ -229,7 +229,12 @@ typedef enum eFunctionalConstraint {
IEC61850_FC_US = 13,
/** Multicast SV */
IEC61850_FC_MS = 14,
/** Unbuffered report */
IEC61850_FC_RP = 15,
/** Buffered report */
IEC61850_FC_BR = 16,
/** All FCs - wildcard value */
IEC61850_FC_ALL = 99,
IEC61850_FC_NONE = -1
} FunctionalConstraint;

@ -1438,10 +1438,6 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
goto exit_function;
}
else if ((strcmp(elementName, "ConfRev") == 0) || (strcmp(elementName, "SqNum") == 0)) {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
}
else if (strcmp(elementName, "RptID") == 0) {
MmsValue* rptId = ReportControl_getRCBValue(rc, elementName);
@ -1452,6 +1448,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
goto exit_function;
}
else if (strcmp(elementName, "ConfRev") == 0) {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
}
else if (strcmp(elementName, "SqNum") == 0) {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
@ -1460,6 +1460,10 @@ Reporting_RCBWriteAccessHandler(MmsMapping* self, ReportControl* rc, char* eleme
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
}
else if (strcmp(elementName, "TimeofEntry") == 0) {
retVal = DATA_ACCESS_ERROR_OBJECT_ACCESS_DENIED;
goto exit_function;
}
MmsValue* rcbValue = ReportControl_getRCBValue(rc, elementName);

Loading…
Cancel
Save