From 628641cabbec0b9f8bb8b997d0bcd08821ca5800 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 10 Nov 2017 15:45:34 +0100 Subject: [PATCH 1/2] sampled values: add support for sample rate attribute --- src/sampled_values/sv_publisher.c | 10 +++++++++- src/sampled_values/sv_publisher.h | 12 ++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/sampled_values/sv_publisher.c b/src/sampled_values/sv_publisher.c index bc777fe8..58b4e5aa 100644 --- a/src/sampled_values/sv_publisher.c +++ b/src/sampled_values/sv_publisher.c @@ -59,6 +59,7 @@ struct sSV_ASDU { uint64_t refrTm; uint8_t smpMod; + uint16_t smpRate; uint8_t* smpCntBuf; @@ -369,7 +370,8 @@ SV_ASDU_encodeToBuffer(SV_ASDU self, uint8_t* buffer, int bufPos) buffer[bufPos++] = self->smpSynch; /* SmpRate */ - //TODO implement me + bufPos = BerEncoder_encodeTL(0x86, 2, buffer, bufPos); + bufPos = encodeUInt16FixedSize(self->smpRate, buffer, bufPos); /* Sample */ bufPos = BerEncoder_encodeTL(0x87, self->dataSize, buffer, bufPos); @@ -596,3 +598,9 @@ SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod) self->smpMod = smpMod; } +void +SV_ASDU_setSmpRate(SV_ASDU self, uint8_t smpRate) +{ + self->hasSmpRate = true; + self->smpRate = smpRate; +} diff --git a/src/sampled_values/sv_publisher.h b/src/sampled_values/sv_publisher.h index 458b00b2..8e843b36 100644 --- a/src/sampled_values/sv_publisher.h +++ b/src/sampled_values/sv_publisher.h @@ -121,6 +121,18 @@ SV_ASDU_setRefrTm(SV_ASDU self, uint64_t refrTm); void SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod); +/** + * \brief Set the sample rate of the ASDU. + * + * If not set the transmitted ASDU will not contain an smpRate value. + * + * \param self the SV_ASDU + * + * \param smpRate Amount of samples (default per nominal period, see SmpMod). + */ +void +SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod); + #ifdef __cplusplus } #endif From e95b321d12c84810a17ef0535a185a2543bcabd8 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 10 Nov 2017 16:50:05 +0100 Subject: [PATCH 2/2] sampled values: fix data type for smpRate --- src/sampled_values/sv_publisher.c | 2 +- src/sampled_values/sv_publisher.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sampled_values/sv_publisher.c b/src/sampled_values/sv_publisher.c index 58b4e5aa..de6e21a4 100644 --- a/src/sampled_values/sv_publisher.c +++ b/src/sampled_values/sv_publisher.c @@ -599,7 +599,7 @@ SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod) } void -SV_ASDU_setSmpRate(SV_ASDU self, uint8_t smpRate) +SV_ASDU_setSmpRate(SV_ASDU self, uint16_t smpRate) { self->hasSmpRate = true; self->smpRate = smpRate; diff --git a/src/sampled_values/sv_publisher.h b/src/sampled_values/sv_publisher.h index 8e843b36..f0954395 100644 --- a/src/sampled_values/sv_publisher.h +++ b/src/sampled_values/sv_publisher.h @@ -131,7 +131,7 @@ SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod); * \param smpRate Amount of samples (default per nominal period, see SmpMod). */ void -SV_ASDU_setSmpMod(SV_ASDU self, uint8_t smpMod); +SV_ASDU_setSmpRate(SV_ASDU self, uint16_t smpRate); #ifdef __cplusplus }