From 44aada7d38532c45bbdb4b5ec1c35eceea1d8838 Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 7 Nov 2024 02:16:11 +0000 Subject: [PATCH] uint8 array --- include/neuron/msg.h | 12 +++++ include/neuron/type.h | 27 ++++++---- src/adapter/driver/cache.c | 32 ++++++++++++ src/adapter/driver/driver.c | 98 +++++++++++++++++++++++++++++++++++++ 4 files changed, 160 insertions(+), 9 deletions(-) diff --git a/include/neuron/msg.h b/include/neuron/msg.h index 40edd79a..6a714bc6 100644 --- a/include/neuron/msg.h +++ b/include/neuron/msg.h @@ -983,6 +983,12 @@ static inline void neu_tag_value_to_json(neu_resp_tag_value_meta_t *tag_value, tag_value->value.value.i8s.length; tag_json->value.val_array_int8.i8s = tag_value->value.value.i8s.i8s; break; + case NEU_TYPE_ARRAY_UINT8: + tag_json->t = NEU_JSON_ARRAY_UINT8; + tag_json->value.val_array_uint8.length = + tag_value->value.value.u8s.length; + tag_json->value.val_array_uint8.u8s = tag_value->value.value.u8s.u8s; + break; case NEU_TYPE_ARRAY_INT16: tag_json->t = NEU_JSON_ARRAY_INT16; tag_json->value.val_array_int16.length = @@ -1168,6 +1174,12 @@ neu_tag_value_to_json_paginate(neu_resp_tag_value_meta_paginate_t *tag_value, tag_value->value.value.i8s.length; tag_json->value.val_array_int8.i8s = tag_value->value.value.i8s.i8s; break; + case NEU_TYPE_ARRAY_UINT8: + tag_json->t = NEU_JSON_ARRAY_UINT8; + tag_json->value.val_array_uint8.length = + tag_value->value.value.u8s.length; + tag_json->value.val_array_uint8.u8s = tag_value->value.value.u8s.u8s; + break; case NEU_TYPE_ARRAY_INT16: tag_json->t = NEU_JSON_ARRAY_INT16; tag_json->value.val_array_int16.length = diff --git a/include/neuron/type.h b/include/neuron/type.h index 881a8c7a..1fffca05 100644 --- a/include/neuron/type.h +++ b/include/neuron/type.h @@ -54,15 +54,16 @@ typedef enum { NEU_TYPE_DATA_AND_TIME = 21, NEU_TYPE_ARRAY_CHAR = 22, NEU_TYPE_ARRAY_INT8 = 23, - NEU_TYPE_ARRAY_INT16 = 24, - NEU_TYPE_ARRAY_UINT16 = 25, - NEU_TYPE_ARRAY_INT32 = 26, - NEU_TYPE_ARRAY_UINT32 = 27, - NEU_TYPE_ARRAY_INT64 = 28, - NEU_TYPE_ARRAY_UINT64 = 29, - NEU_TYPE_ARRAY_FLOAT = 30, - NEU_TYPE_ARRAY_DOUBLE = 31, - NEU_TYPE_ARRAY_BOOL = 32, + NEU_TYPE_ARRAY_UINT8 = 24, + NEU_TYPE_ARRAY_INT16 = 25, + NEU_TYPE_ARRAY_UINT16 = 26, + NEU_TYPE_ARRAY_INT32 = 27, + NEU_TYPE_ARRAY_UINT32 = 28, + NEU_TYPE_ARRAY_INT64 = 29, + NEU_TYPE_ARRAY_UINT64 = 30, + NEU_TYPE_ARRAY_FLOAT = 31, + NEU_TYPE_ARRAY_DOUBLE = 32, + NEU_TYPE_ARRAY_BOOL = 33, } neu_type_e; inline static const char *neu_type_string(neu_type_e type) @@ -114,6 +115,8 @@ inline static const char *neu_type_string(neu_type_e type) return "NEU_TYPE_ARRAY_CHAR"; case NEU_TYPE_ARRAY_INT8: return "NEU_TYPE_ARRAY_INT8"; + case NEU_TYPE_ARRAY_UINT8: + return "NEU_TYPE_ARRAY_UINT8"; case NEU_TYPE_ARRAY_INT16: return "NEU_TYPE_ARRAY_INT16"; case NEU_TYPE_ARRAY_UINT16: @@ -155,6 +158,11 @@ typedef struct { uint8_t length; } neu_value_array_int8_t; +typedef struct { + uint8_t u8s[NEU_VALUE_SIZE]; + uint8_t length; +} neu_value_array_uint8_t; + typedef struct { int16_t i16s[NEU_VALUE_SIZE]; uint8_t length; @@ -216,6 +224,7 @@ typedef union { neu_value_bytes_t bytes; neu_value_ptr_t ptr; neu_value_array_int8_t i8s; + neu_value_array_uint8_t u8s; neu_value_array_int16_t i16s; neu_value_array_uint16_t u16s; neu_value_array_int32_t i32s; diff --git a/src/adapter/driver/cache.c b/src/adapter/driver/cache.c index 29c058c1..7ad9a455 100644 --- a/src/adapter/driver/cache.c +++ b/src/adapter/driver/cache.c @@ -277,6 +277,18 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache, } } break; + case NEU_TYPE_ARRAY_UINT8: + if (elem->value_old.value.u8s.length != + value.value.u8s.length) { + elem->changed = true; + } else { + if (memcmp(elem->value_old.value.u8s.u8s, + value.value.u8s.u8s, + value.value.u8s.length) != 0) { + elem->changed = true; + } + } + break; case NEU_TYPE_ARRAY_INT16: if (elem->value_old.value.i16s.length != value.value.i16s.length) { @@ -477,6 +489,16 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache, } } break; + case NEU_TYPE_ARRAY_UINT8: + if (elem->value.value.u8s.length != value.value.u8s.length) { + elem->changed = true; + } else { + if (memcmp(elem->value.value.u8s.u8s, value.value.u8s.u8s, + value.value.u8s.length) != 0) { + elem->changed = true; + } + } + break; case NEU_TYPE_ARRAY_INT16: if (elem->value.value.i16s.length != value.value.i16s.length) { elem->changed = true; @@ -718,6 +740,11 @@ int neu_driver_cache_meta_get(neu_driver_cache_t *cache, const char *group, memcpy(value->value.value.i8s.i8s, elem->value.value.i8s.i8s, elem->value.value.i8s.length); break; + case NEU_TYPE_ARRAY_UINT8: + value->value.value.u8s.length = elem->value.value.u8s.length; + memcpy(value->value.value.u8s.u8s, elem->value.value.u8s.u8s, + elem->value.value.u8s.length); + break; case NEU_TYPE_ARRAY_INT16: value->value.value.i16s.length = elem->value.value.i16s.length; memcpy(value->value.value.i16s.i16s, elem->value.value.i16s.i16s, @@ -854,6 +881,11 @@ int neu_driver_cache_meta_get_changed(neu_driver_cache_t *cache, memcpy(value->value.value.i8s.i8s, elem->value.value.i8s.i8s, elem->value.value.i8s.length); break; + case NEU_TYPE_ARRAY_UINT8: + value->value.value.u8s.length = elem->value.value.u8s.length; + memcpy(value->value.value.u8s.u8s, elem->value.value.u8s.u8s, + elem->value.value.u8s.length); + break; case NEU_TYPE_ARRAY_INT16: value->value.value.i16s.length = elem->value.value.i16s.length; memcpy(value->value.value.i16s.i16s, elem->value.value.i16s.i16s, diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 176e2de9..8f215971 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -1122,6 +1122,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_BYTES) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.bytes.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.bytes.bytes[j] = @@ -1135,6 +1137,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_INT8) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.i8s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.i8s.i8s[j] = @@ -1146,8 +1150,25 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } } } + if (tag->type == NEU_TYPE_ARRAY_UINT8) { + if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.u8s.length = + cmd->tags[i].value.value.i64s.length; + for (int j = 0; j < cmd->tags[i].value.value.i64s.length; + j++) { + cmd->tags[i].value.value.u8s.u8s[j] = + (int8_t) cmd->tags[i].value.value.i64s.i64s[j]; + } + for (int j = cmd->tags[i].value.value.i64s.length; + j < NEU_VALUE_SIZE; j++) { + cmd->tags[i].value.value.u8s.u8s[j] = 0; + } + } + } if (tag->type == NEU_TYPE_ARRAY_INT16) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.i16s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.i16s.i16s[j] = @@ -1161,6 +1182,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT16) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.u16s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.u16s.u16s[j] = @@ -1174,6 +1197,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_INT32) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.i32s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.i32s.i32s[j] = @@ -1187,6 +1212,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT32) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.u32s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.u32s.u32s[j] = @@ -1200,6 +1227,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT64) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.u64s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.u64s.u64s[i] = @@ -1213,6 +1242,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_FLOAT) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_DOUBLE) { + cmd->tags[i].value.value.f32s.length = + cmd->tags[i].value.value.f64s.length; for (int j = 0; j < cmd->tags[i].value.value.f64s.length; j++) { cmd->tags[i].value.value.f32s.f32s[j] = @@ -1224,6 +1255,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } } if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.f32s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.f64s.length; j++) { cmd->tags[i].value.value.f32s.f32s[j] = @@ -1237,6 +1270,8 @@ int neu_adapter_driver_write_tags(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_DOUBLE) { if (cmd->tags[i].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->tags[i].value.value.f64s.length = + cmd->tags[i].value.value.i64s.length; for (int j = 0; j < cmd->tags[i].value.value.i64s.length; j++) { cmd->tags[i].value.value.f64s.f64s[j] = @@ -1364,6 +1399,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_BYTES) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.bytes.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1383,6 +1420,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_INT8) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.i8s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1398,9 +1437,31 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, } } } + if (tag->type == NEU_TYPE_ARRAY_UINT8) { + if (cmd->groups[i].tags[k].value.type == + NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.u8s.length = + cmd->groups[i].tags[k].value.value.i64s.length; + for (int j = 0; + j < cmd->groups[i].tags[k].value.value.i64s.length; + j++) { + cmd->groups[i].tags[k].value.value.u8s.u8s[j] = + (int8_t) cmd->groups[i] + .tags[k] + .value.value.i64s.i64s[j]; + } + for (int j = + cmd->groups[i].tags[k].value.value.i64s.length; + j < NEU_VALUE_SIZE; j++) { + cmd->groups[i].tags[k].value.value.u8s.u8s[j] = 0; + } + } + } if (tag->type == NEU_TYPE_ARRAY_INT16) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.i16s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1419,6 +1480,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_UINT16) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.u16s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1437,6 +1500,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_INT32) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.i32s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1455,6 +1520,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_UINT32) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.u32s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1473,6 +1540,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_UINT64) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.u64s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1491,6 +1560,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_FLOAT) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_DOUBLE) { + cmd->groups[i].tags[k].value.value.f32s.length = + cmd->groups[i].tags[k].value.value.f64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.f64s.length; j++) { @@ -1507,6 +1578,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, } if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.f32s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.f64s.length; j++) { @@ -1525,6 +1598,8 @@ int neu_adapter_driver_write_gtags(neu_adapter_driver_t *driver, if (tag->type == NEU_TYPE_ARRAY_DOUBLE) { if (cmd->groups[i].tags[k].value.type == NEU_TYPE_ARRAY_INT64) { + cmd->groups[i].tags[k].value.value.f64s.length = + cmd->groups[i].tags[k].value.value.i64s.length; for (int j = 0; j < cmd->groups[i].tags[k].value.value.i64s.length; j++) { @@ -1644,6 +1719,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_BYTES) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.bytes.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.bytes.bytes[i] = (uint8_t) cmd->value.value.i64s.i64s[i]; @@ -1656,6 +1732,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_INT8) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.i8s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.i8s.i8s[i] = (int8_t) cmd->value.value.i64s.i64s[i]; @@ -1666,8 +1743,22 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } } } + if (tag->type == NEU_TYPE_ARRAY_UINT8) { + if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.u8s.length = cmd->value.value.i64s.length; + for (int i = 0; i < cmd->value.value.i64s.length; i++) { + cmd->value.value.u8s.u8s[i] = + (uint8_t) cmd->value.value.i64s.i64s[i]; + } + for (int i = cmd->value.value.i64s.length; i < NEU_VALUE_SIZE; + i++) { + cmd->value.value.u8s.u8s[i] = 0; + } + } + } if (tag->type == NEU_TYPE_ARRAY_INT16) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.i16s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.i16s.i16s[i] = (int16_t) cmd->value.value.i64s.i64s[i]; @@ -1680,6 +1771,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT16) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.u16s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.u16s.u16s[i] = (uint16_t) cmd->value.value.i64s.i64s[i]; @@ -1692,6 +1784,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_INT32) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.i32s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.i32s.i32s[i] = (int32_t) cmd->value.value.i64s.i64s[i]; @@ -1704,6 +1797,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT32) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.u32s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.u32s.u32s[i] = (uint32_t) cmd->value.value.i64s.i64s[i]; @@ -1716,6 +1810,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_UINT64) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.u64s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.u64s.u64s[i] = (uint64_t) cmd->value.value.i64s.i64s[i]; @@ -1728,6 +1823,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_FLOAT) { if (cmd->value.type == NEU_TYPE_ARRAY_DOUBLE) { + cmd->value.value.f32s.length = cmd->value.value.f64s.length; for (int i = 0; i < cmd->value.value.f64s.length; i++) { cmd->value.value.f32s.f32s[i] = (float) cmd->value.value.f64s.f64s[i]; @@ -1738,6 +1834,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } } if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.f32s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.f64s.length; i++) { cmd->value.value.f32s.f32s[i] = (float) cmd->value.value.i64s.i64s[i]; @@ -1750,6 +1847,7 @@ int neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (tag->type == NEU_TYPE_ARRAY_DOUBLE) { if (cmd->value.type == NEU_TYPE_ARRAY_INT64) { + cmd->value.value.f64s.length = cmd->value.value.i64s.length; for (int i = 0; i < cmd->value.value.i64s.length; i++) { cmd->value.value.f64s.f64s[i] = (double) cmd->value.value.i64s.i64s[i];