From 60c7d3a75fae124b779749795fb2fcbceef555cb Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 10 Nov 2017 15:32:40 +0100 Subject: [PATCH] sampled values: fix encoding of optional smpMod attribute: - The attribute must be encoded as an 16bit unsigned integer. The existing code encodes it as 32 bit integer. - The attribute is encoded with the ASN.1 BER encoding Tag number 8. The existing code encodes it with tag number 4 which is used for the refrTm attribute. See also: IEC 61850-9-2:2011 (page 20) --- src/sampled_values/sv_publisher.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/sampled_values/sv_publisher.c b/src/sampled_values/sv_publisher.c index bc777fe8..1ea66116 100644 --- a/src/sampled_values/sv_publisher.c +++ b/src/sampled_values/sv_publisher.c @@ -377,15 +377,11 @@ SV_ASDU_encodeToBuffer(SV_ASDU self, uint8_t* buffer, int bufPos) self->_dataBuffer = buffer + bufPos; bufPos += self->dataSize; /* data has to inserted by user before sending message */ - + /* SmpMod */ if (self->hasSmpMod) { - bufPos = BerEncoder_encodeTL(0x84, 4, buffer, bufPos); - buffer[bufPos++] = 0; - buffer[bufPos++] = 0; - buffer[bufPos++] = 0; - buffer[bufPos++] = self->smpMod; - + bufPos = BerEncoder_encodeTL(0x88, 4, buffer, bufPos); + bufPos = encodeUint16FixedSize(self->smpMod, buffer, bufPos); } return bufPos;