From 88b2c6c78da055d4238088119bf9ce338c752431 Mon Sep 17 00:00:00 2001 From: Roman Date: Sun, 10 Jan 2016 21:13:30 +0100 Subject: [PATCH] blockparam: added support for external parameter copy --- src/modules/controllib/block/BlockParam.cpp | 22 +++++++++++++++++---- src/modules/controllib/block/BlockParam.hpp | 3 ++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/modules/controllib/block/BlockParam.cpp b/src/modules/controllib/block/BlockParam.cpp index b560d7999e..c3ed27a572 100644 --- a/src/modules/controllib/block/BlockParam.cpp +++ b/src/modules/controllib/block/BlockParam.cpp @@ -82,9 +82,10 @@ BlockParamBase::BlockParamBase(Block *parent, const char *name, bool parent_pref template BlockParam::BlockParam(Block *block, const char *name, - bool parent_prefix) : + bool parent_prefix, T *extern_address) : BlockParamBase(block, name, parent_prefix), - _val() + _val(), + _extern_address(extern_address) { update(); } @@ -93,12 +94,25 @@ template T BlockParam::get() { return _val; } template -void BlockParam::set(T val) { _val = val; } +void BlockParam::set(T val) +{ + _val = val; + + if (_extern_address != NULL) { + *_extern_address = val; + } +} template void BlockParam::update() { - if (_handle != PARAM_INVALID) { param_get(_handle, &_val); } + if (_handle != PARAM_INVALID) { + param_get(_handle, &_val); + + if (_extern_address != NULL) { + *_extern_address = _val; + } + } } template diff --git a/src/modules/controllib/block/BlockParam.hpp b/src/modules/controllib/block/BlockParam.hpp index db035f9f91..693a8ec3b2 100644 --- a/src/modules/controllib/block/BlockParam.hpp +++ b/src/modules/controllib/block/BlockParam.hpp @@ -77,7 +77,7 @@ class BlockParam : public BlockParamBase { public: BlockParam(Block *block, const char *name, - bool parent_prefix = true); + bool parent_prefix = true, T *extern_address = NULL); T get(); void commit(); void set(T val); @@ -85,6 +85,7 @@ public: virtual ~BlockParam(); protected: T _val; + T *_extern_address; }; typedef BlockParam BlockParamFloat;