adapter(driver): support update tag data type

This commit is contained in:
fengzero
2022-05-16 08:19:48 +00:00
parent d88cb8911b
commit 6818e2c56a
3 changed files with 43 additions and 19 deletions
+7 -1
View File
@@ -221,7 +221,13 @@ void handle_update_tags(nng_aio *aio)
code = NEU_ERR_TAG_NAME_CONFLICT;
free(tag);
} else {
updated = true;
updated = true;
neu_taggrp_config_t *config = neu_system_find_group_config(
plugin, req->node_id, req->group_config_name);
neu_taggrp_config_t *new_config =
neu_taggrp_cfg_clone(config);
neu_system_update_group_config(plugin, req->node_id,
new_config);
}
}
+6 -2
View File
@@ -118,9 +118,13 @@ void neu_driver_cache_update(neu_driver_cache_t *cache, const char *key,
assert(n_byte != 0);
assert(n_byte <= NEU_VALUE_SIZE);
elem->n_byte = n_byte;
elem->bytes = calloc(elem->n_byte, 1);
elem->bytes = calloc(elem->n_byte, n_byte);
} else {
assert(n_byte == elem->n_byte);
if (n_byte != elem->n_byte) {
elem->n_byte = n_byte;
elem->bytes = realloc(elem->bytes, n_byte);
memset(elem->bytes, 0, elem->n_byte);
}
}
memcpy(elem->bytes, bytes, elem->n_byte);
+30 -16
View File
@@ -467,56 +467,70 @@ static neu_data_val_t *read_group(neu_adapter_driver_t *driver,
continue;
}
int ret = -1;
switch (tag->type) {
case NEU_DTYPE_BOOL:
case NEU_DTYPE_BIT:
case NEU_DTYPE_INT8:
case NEU_DTYPE_UINT8:
assert(value.n_byte == sizeof(uint8_t));
if (value.n_byte == sizeof(uint8_t)) {
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) &value.value.u8);
}
neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) &value.value.u8);
break;
case NEU_DTYPE_INT16:
case NEU_DTYPE_UINT16: {
assert(value.n_byte == sizeof(uint16_t));
uint16_t v = value.value.u16;
if (value.n_byte == sizeof(uint16_t)) {
uint16_t v = value.value.u16;
neu_datatag_pack_add(val, index, tag->type, tag->id, (void *) &v);
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) &v);
}
break;
}
case NEU_DTYPE_FLOAT:
case NEU_DTYPE_INT32:
case NEU_DTYPE_UINT32: {
assert(value.n_byte == sizeof(uint32_t));
uint32_t v = value.value.u32;
if (value.n_byte == sizeof(uint32_t)) {
uint32_t v = value.value.u32;
neu_datatag_pack_add(val, index, tag->type, tag->id, (void *) &v);
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) &v);
}
break;
}
case NEU_DTYPE_INT64:
case NEU_DTYPE_UINT64:
case NEU_DTYPE_DOUBLE: {
assert(value.n_byte == sizeof(uint64_t));
uint64_t v = value.value.u64;
if (value.n_byte == sizeof(uint64_t)) {
uint64_t v = value.value.u64;
neu_datatag_pack_add(val, index, tag->type, tag->id, (void *) &v);
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) &v);
}
break;
}
case NEU_DTYPE_CSTR:
if (neu_datatag_string_is_utf8(value.value.str, value.n_byte)) {
neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) value.value.str);
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) value.value.str);
} else {
char *unknown = "?";
neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) unknown);
ret = neu_datatag_pack_add(val, index, tag->type, tag->id,
(void *) unknown);
}
break;
default:
assert(tag->type == 0);
break;
}
if (ret != 0) {
error = NEU_ERR_PLUGIN_READ_FAILURE;
neu_datatag_pack_add(val, index, NEU_DTYPE_ERRORCODE, *id,
(void *) &error);
}
}
return val;