mirror of
https://github.com/emqx/neuron.git
synced 2026-10-26 03:40:01 +08:00
@@ -45,6 +45,9 @@ typedef enum {
|
||||
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_e;
|
||||
|
||||
inline static const char *neu_type_string(neu_type_e type)
|
||||
@@ -80,6 +83,12 @@ inline static const char *neu_type_string(neu_type_e type)
|
||||
return "NEU_TYPE_BYTES";
|
||||
case NEU_TYPE_ERROR:
|
||||
return "NEU_TYPE_ERROR";
|
||||
case NEU_TYPE_WORD:
|
||||
return "NEU_TYPE_WORD";
|
||||
case NEU_TYPE_DWORD:
|
||||
return "NEU_TYPE_DWORD";
|
||||
case NEU_TYPE_LWORD:
|
||||
return "NEU_TYPE_LWORD";
|
||||
}
|
||||
|
||||
return "";
|
||||
|
||||
@@ -31,3 +31,23 @@ VALUES
|
||||
"admin",
|
||||
"$5$PwFeXpBBIBZuZdZl$fP8fFPWCLoaWcnVXVSR.3Xi8TEqCvX92gjhowNNn6S4"
|
||||
);
|
||||
|
||||
--- Add tags table ---
|
||||
ALTER TABLE tags RENAME TO old_tags;
|
||||
CREATE TABLE IF NOT EXISTS
|
||||
tags (
|
||||
driver_name TEXT NOT NULL,
|
||||
group_name TEXT NOT NULL,
|
||||
name TEXT NULL check(length(name) <= 32),
|
||||
address TEXT NULL check(length(address) <= 64),
|
||||
attribute INTEGER NOT NULL check(attribute BETWEEN 0 AND 7),
|
||||
precision INTEGER NOT NULL check(precision BETWEEN 0 AND 17),
|
||||
decimal REAL NOT NULL,
|
||||
type INTEGER NOT NULL check(type BETWEEN 0 AND 19),
|
||||
description TEXT NULL check(length(description) <= 128),
|
||||
UNIQUE (driver_name, group_name, name),
|
||||
FOREIGN KEY (driver_name, group_name) REFERENCES groups (driver_name, name) ON UPDATE CASCADE ON DELETE CASCADE
|
||||
);
|
||||
INSERT INTO tags SELECT * FROM old_tags;
|
||||
DROP TABLE old_tags;
|
||||
COMMIT;
|
||||
@@ -150,6 +150,9 @@ void neu_driver_cache_update(neu_driver_cache_t *cache, const char *group,
|
||||
case NEU_TYPE_BOOL:
|
||||
case NEU_TYPE_STRING:
|
||||
case NEU_TYPE_BYTES:
|
||||
case NEU_TYPE_WORD:
|
||||
case NEU_TYPE_DWORD:
|
||||
case NEU_TYPE_LWORD:
|
||||
if (memcmp(&elem->value.value, &value.value,
|
||||
sizeof(value.value)) != 0) {
|
||||
elem->changed = true;
|
||||
@@ -212,10 +215,12 @@ int neu_driver_cache_get(neu_driver_cache_t *cache, const char *group,
|
||||
break;
|
||||
case NEU_TYPE_INT16:
|
||||
case NEU_TYPE_UINT16:
|
||||
case NEU_TYPE_WORD:
|
||||
value->value.value.u16 = elem->value.value.u16;
|
||||
break;
|
||||
case NEU_TYPE_INT32:
|
||||
case NEU_TYPE_UINT32:
|
||||
case NEU_TYPE_DWORD:
|
||||
case NEU_TYPE_FLOAT:
|
||||
case NEU_TYPE_ERROR:
|
||||
value->value.value.u32 = elem->value.value.u32;
|
||||
@@ -223,6 +228,7 @@ int neu_driver_cache_get(neu_driver_cache_t *cache, const char *group,
|
||||
case NEU_TYPE_INT64:
|
||||
case NEU_TYPE_UINT64:
|
||||
case NEU_TYPE_DOUBLE:
|
||||
case NEU_TYPE_LWORD:
|
||||
value->value.value.u64 = elem->value.value.u64;
|
||||
break;
|
||||
case NEU_TYPE_BOOL:
|
||||
@@ -267,17 +273,20 @@ int neu_driver_cache_get_changed(neu_driver_cache_t *cache, const char *group,
|
||||
break;
|
||||
case NEU_TYPE_INT16:
|
||||
case NEU_TYPE_UINT16:
|
||||
case NEU_TYPE_WORD:
|
||||
value->value.value.u16 = elem->value.value.u16;
|
||||
break;
|
||||
case NEU_TYPE_INT32:
|
||||
case NEU_TYPE_UINT32:
|
||||
case NEU_TYPE_FLOAT:
|
||||
case NEU_TYPE_ERROR:
|
||||
case NEU_TYPE_DWORD:
|
||||
value->value.value.u32 = elem->value.value.u32;
|
||||
break;
|
||||
case NEU_TYPE_INT64:
|
||||
case NEU_TYPE_UINT64:
|
||||
case NEU_TYPE_DOUBLE:
|
||||
case NEU_TYPE_LWORD:
|
||||
value->value.value.u64 = elem->value.value.u64;
|
||||
break;
|
||||
case NEU_TYPE_BOOL:
|
||||
|
||||
@@ -281,7 +281,11 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
case NEU_TYPE_UINT32:
|
||||
case NEU_TYPE_INT64:
|
||||
case NEU_TYPE_UINT64:
|
||||
if (cmd->value.type == NEU_TYPE_INT64) {
|
||||
case NEU_TYPE_WORD:
|
||||
case NEU_TYPE_LWORD:
|
||||
case NEU_TYPE_DWORD:
|
||||
if (cmd->value.type == NEU_TYPE_INT64 ||
|
||||
cmd->value.type == NEU_TYPE_LWORD) {
|
||||
cmd->value.value.u64 = cmd->value.value.u64 / tag->decimal;
|
||||
} else if (cmd->value.type == NEU_TYPE_DOUBLE) {
|
||||
cmd->value.value.u64 =
|
||||
@@ -317,6 +321,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
break;
|
||||
case NEU_TYPE_INT16:
|
||||
case NEU_TYPE_UINT16:
|
||||
case NEU_TYPE_WORD:
|
||||
cmd->value.type = NEU_TYPE_UINT16;
|
||||
cmd->value.value.u16 = (uint16_t) cmd->value.value.u64;
|
||||
switch (tag->option.value16.endian) {
|
||||
@@ -330,6 +335,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
break;
|
||||
case NEU_TYPE_UINT32:
|
||||
case NEU_TYPE_INT32:
|
||||
case NEU_TYPE_DWORD:
|
||||
cmd->value.type = NEU_TYPE_UINT32;
|
||||
cmd->value.value.u32 = (uint32_t) cmd->value.value.u64;
|
||||
switch (tag->option.value32.endian) {
|
||||
@@ -374,6 +380,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver,
|
||||
case NEU_TYPE_DOUBLE:
|
||||
case NEU_TYPE_UINT64:
|
||||
case NEU_TYPE_INT64:
|
||||
case NEU_TYPE_LWORD:
|
||||
switch (tag->option.value64.endian) {
|
||||
case NEU_DATATAG_ENDIAN_B64:
|
||||
cmd->value.value.u64 = neu_ntohll(cmd->value.value.u64);
|
||||
|
||||
@@ -243,6 +243,7 @@ neu_datatag_t *neu_group_find_tag(neu_group_t *group, const char *tag)
|
||||
result->name = strdup(find->tag->name);
|
||||
result->address = strdup(find->tag->address);
|
||||
result->description = strdup(find->tag->description);
|
||||
memcpy(result->meta, find->tag->meta, sizeof(find->tag->meta));
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user