From a98e9ae904bb1eb3043f5ae90188d46ab2489417 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Thu, 21 Mar 2024 18:12:30 +0800 Subject: [PATCH] feat(core): add NEU_TYPE_TIME and NEU_TYPE_DATA_AND_TIME --- include/neuron/msg.h | 2 ++ include/neuron/type.h | 48 +++++++++++++++++++++---------------- src/adapter/driver/cache.c | 6 +++++ src/adapter/driver/driver.c | 2 ++ src/base/tag.c | 7 +++++- src/parser/neu_json_rw.c | 2 ++ src/parser/neu_json_tag.c | 2 ++ 7 files changed, 48 insertions(+), 21 deletions(-) diff --git a/include/neuron/msg.h b/include/neuron/msg.h index 10cd8025..83d3a578 100644 --- a/include/neuron/msg.h +++ b/include/neuron/msg.h @@ -859,6 +859,8 @@ static inline void neu_tag_value_to_json(neu_resp_tag_value_meta_t *tag_value, tag_json->value.val_bit = tag_value->value.value.u8; break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: tag_json->t = NEU_JSON_STR; tag_json->value.val_str = tag_value->value.value.str; break; diff --git a/include/neuron/type.h b/include/neuron/type.h index d8a95aed..64682ddb 100644 --- a/include/neuron/type.h +++ b/include/neuron/type.h @@ -31,25 +31,27 @@ extern "C" { #include typedef enum { - NEU_TYPE_INT8 = 1, - NEU_TYPE_UINT8 = 2, - NEU_TYPE_INT16 = 3, - NEU_TYPE_UINT16 = 4, - NEU_TYPE_INT32 = 5, - NEU_TYPE_UINT32 = 6, - NEU_TYPE_INT64 = 7, - NEU_TYPE_UINT64 = 8, - NEU_TYPE_FLOAT = 9, - NEU_TYPE_DOUBLE = 10, - NEU_TYPE_BIT = 11, - NEU_TYPE_BOOL = 12, - NEU_TYPE_STRING = 13, - NEU_TYPE_BYTES = 14, - NEU_TYPE_ERROR = 15, - NEU_TYPE_WORD = 16, - NEU_TYPE_DWORD = 17, - NEU_TYPE_LWORD = 18, - NEU_TYPE_PTR = 19, + NEU_TYPE_INT8 = 1, + NEU_TYPE_UINT8 = 2, + NEU_TYPE_INT16 = 3, + NEU_TYPE_UINT16 = 4, + NEU_TYPE_INT32 = 5, + NEU_TYPE_UINT32 = 6, + NEU_TYPE_INT64 = 7, + NEU_TYPE_UINT64 = 8, + NEU_TYPE_FLOAT = 9, + NEU_TYPE_DOUBLE = 10, + NEU_TYPE_BIT = 11, + NEU_TYPE_BOOL = 12, + NEU_TYPE_STRING = 13, + NEU_TYPE_BYTES = 14, + NEU_TYPE_ERROR = 15, + NEU_TYPE_WORD = 16, + NEU_TYPE_DWORD = 17, + NEU_TYPE_LWORD = 18, + NEU_TYPE_PTR = 19, + NEU_TYPE_TIME = 20, + NEU_TYPE_DATA_AND_TIME = 21, } neu_type_e; inline static const char *neu_type_string(neu_type_e type) @@ -93,6 +95,10 @@ inline static const char *neu_type_string(neu_type_e type) return "NEU_TYPE_LWORD"; case NEU_TYPE_PTR: return "NEU_TYPE_PTR"; + case NEU_TYPE_TIME: + return "NEU_TYPE_TIME"; + case NEU_TYPE_DATA_AND_TIME: + return "NEU_TYPE_DATA_AND_TIME"; } return ""; @@ -188,7 +194,9 @@ static inline char *neu_value_str(neu_type_e type, neu_value_u value) snprintf(str, sizeof(str), "type: %s, value: %u", neu_type_string(type), value.boolean); break; - case NEU_TYPE_STRING: { + case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: { snprintf(str, sizeof(str), "type: %s, value: %c%c%c", neu_type_string(type), value.str[0], value.str[1], value.str[2]); diff --git a/src/adapter/driver/cache.c b/src/adapter/driver/cache.c index cfc694d3..ed9c76ef 100644 --- a/src/adapter/driver/cache.c +++ b/src/adapter/driver/cache.c @@ -157,6 +157,8 @@ void neu_driver_cache_update_change(neu_driver_cache_t *cache, case NEU_TYPE_BIT: case NEU_TYPE_BOOL: case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: case NEU_TYPE_WORD: case NEU_TYPE_DWORD: case NEU_TYPE_LWORD: @@ -299,6 +301,8 @@ int neu_driver_cache_meta_get(neu_driver_cache_t *cache, const char *group, value->value.value.boolean = elem->value.value.boolean; break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: memcpy(value->value.value.str, elem->value.value.str, sizeof(elem->value.value.str)); break; @@ -381,6 +385,8 @@ int neu_driver_cache_meta_get_changed(neu_driver_cache_t *cache, value->value.value.boolean = elem->value.value.boolean; break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: memcpy(value->value.value.str, elem->value.value.str, sizeof(elem->value.value.str)); break; diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 97672f5e..27e10238 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -472,6 +472,8 @@ static void fix_value(neu_datatag_t *tag, neu_type_e value_type, switch (tag->type) { case NEU_TYPE_BOOL: case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: case NEU_TYPE_BYTES: break; case NEU_TYPE_BIT: diff --git a/src/base/tag.c b/src/base/tag.c index 79c0c395..9fb29601 100644 --- a/src/base/tag.c +++ b/src/base/tag.c @@ -523,6 +523,8 @@ int neu_tag_get_static_value_json(neu_datatag_t *tag, neu_json_type_e *t, v->val_double = value->d64; break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: *t = NEU_JSON_STR; v->val_str = value->str; break; @@ -625,7 +627,8 @@ int neu_tag_set_static_value_json(neu_datatag_t *tag, neu_json_type_e t, break; } case NEU_JSON_STR: { - if (NEU_TYPE_STRING == tag->type) { + if (NEU_TYPE_STRING == tag->type || NEU_TYPE_TIME == tag->type || + NEU_TYPE_DATA_AND_TIME == tag->type) { snprintf(value.str, sizeof(value.str), "%s", v->val_str); } else { rv = -1; @@ -695,6 +698,8 @@ char *neu_tag_dump_static_value(const neu_datatag_t *tag) jval = json_real(value.d64); break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: jval = json_string(value.str); break; default: diff --git a/src/parser/neu_json_rw.c b/src/parser/neu_json_rw.c index 344ea14a..708b1637 100644 --- a/src/parser/neu_json_rw.c +++ b/src/parser/neu_json_rw.c @@ -579,6 +579,8 @@ void neu_json_metas_to_json(neu_tag_meta_t *metas, int n_meta, json_tag->metas[k].value.val_bit = metas[k].value.value.u8; break; case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: json_tag->metas[k].t = NEU_JSON_STR; json_tag->metas[k].value.val_str = metas[k].value.value.str; break; diff --git a/src/parser/neu_json_tag.c b/src/parser/neu_json_tag.c index a80af544..e29052ca 100644 --- a/src/parser/neu_json_tag.c +++ b/src/parser/neu_json_tag.c @@ -199,6 +199,8 @@ int neu_json_tag_check_type(neu_json_tag_t *tag) return NEU_JSON_BOOL == tag->t; case NEU_TYPE_BYTES: case NEU_TYPE_STRING: + case NEU_TYPE_TIME: + case NEU_TYPE_DATA_AND_TIME: return NEU_JSON_STR == tag->t && strlen(tag->value.val_str) <= NEU_VALUE_SIZE; }