Merge pull request #934 from fengzeroz/main

new type
This commit is contained in:
fengzeroz
2022-11-25 18:56:36 +08:00
committed by GitHub
5 changed files with 47 additions and 1 deletions
+9
View File
@@ -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 "";
+20
View File
@@ -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;
+9
View File
@@ -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:
+8 -1
View File
@@ -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);
+1
View File
@@ -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;