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: