From d6cbf083615b3b98963bb35b89d2f3460dc40d5d Mon Sep 17 00:00:00 2001 From: fengzero Date: Wed, 9 Nov 2022 07:50:29 +0000 Subject: [PATCH] feat(driver): write tag with decimal --- src/adapter/driver/driver.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 37f6f4d3..8ba7379f 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -17,6 +17,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. **/ #include +#include #include #include @@ -269,6 +270,38 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, cmd->value.value.d64 = (double) cmd->value.value.u64; } } + + if (tag->decimal != 0) { + switch (tag->type) { + case NEU_TYPE_INT8: + case NEU_TYPE_UINT8: + case NEU_TYPE_INT16: + case NEU_TYPE_UINT16: + case NEU_TYPE_INT32: + case NEU_TYPE_UINT32: + case NEU_TYPE_INT64: + case NEU_TYPE_UINT64: + if (cmd->value.type == NEU_TYPE_INT64) { + cmd->value.value.u64 = cmd->value.value.u64 / tag->decimal; + } else if (cmd->value.type == NEU_TYPE_DOUBLE) { + cmd->value.value.u64 = + (uint64_t) round(cmd->value.value.d64 / tag->decimal); + } + break; + case NEU_TYPE_FLOAT: + case NEU_TYPE_DOUBLE: + if (cmd->value.type == NEU_TYPE_INT64) { + cmd->value.value.d64 = + (double) (cmd->value.value.d64 / tag->decimal); + } else if (cmd->value.type == NEU_TYPE_DOUBLE) { + cmd->value.value.d64 = cmd->value.value.d64 / tag->decimal; + } + break; + default: + break; + } + } + switch (tag->type) { case NEU_TYPE_BOOL: case NEU_TYPE_STRING: