mirror of
https://github.com/emqx/neuron.git
synced 2026-10-23 10:22:32 +08:00
fix(cid): co's address missing prefix and inst
This commit is contained in:
@@ -64,11 +64,13 @@
|
||||
|
||||
#define NEU_CID_LNCLASS_LEN 12
|
||||
#define NEU_CID_LNTYPE_LEN 32
|
||||
#define NEU_CID_LNPREFIX_LEN 10
|
||||
#define NEU_CID_LNINST_LEN 2
|
||||
#define NEU_CID_IED_NAME_LEN 32
|
||||
#define NEU_CID_LDEVICE_LEN 32
|
||||
#define NEU_CID_LNO_NAME_LEN 32
|
||||
#define NEU_CID_LNO_TYPE_LEN 32
|
||||
#define NEU_CID_INST_LEN 32
|
||||
#define NEU_CID_INST_LEN 16
|
||||
#define NEU_CID_SDI_NAME_LEN 16
|
||||
#define NEU_CID_DO_NAME_LEN 32
|
||||
#define NEU_CID_DO_ID_LEN 32
|
||||
|
||||
@@ -62,6 +62,8 @@ typedef struct {
|
||||
typedef struct {
|
||||
char lnclass[NEU_CID_LNCLASS_LEN];
|
||||
char lntype[NEU_CID_LNTYPE_LEN];
|
||||
char lnprefix[NEU_CID_LNPREFIX_LEN];
|
||||
char lninst[NEU_CID_LNINST_LEN];
|
||||
|
||||
cid_dataset_t *datasets;
|
||||
int n_datasets;
|
||||
|
||||
@@ -99,7 +99,7 @@ static void read_group_paginate(int64_t timestamp, int64_t timeout,
|
||||
neu_tag_cache_type_e cache_type,
|
||||
neu_driver_cache_t *cache, const char *group,
|
||||
UT_array *tags, UT_array *tag_values);
|
||||
static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
|
||||
static void read_report_group(int64_t timestamp, int64_t timeout,
|
||||
neu_tag_cache_type_e cache_type,
|
||||
neu_driver_cache_t *cache, const char *group,
|
||||
UT_array *tags, UT_array *tag_values);
|
||||
@@ -328,7 +328,7 @@ static void update_im(neu_adapter_t *adapter, const char *group,
|
||||
data->group = strdup(group);
|
||||
utarray_new(data->tags, neu_resp_tag_value_meta_icd());
|
||||
|
||||
read_report_group(true,global_timestamp, 0,
|
||||
read_report_group(global_timestamp, 0,
|
||||
neu_adapter_get_tag_cache_type(&driver->adapter),
|
||||
driver->cache, group, tags, data->tags);
|
||||
|
||||
@@ -2106,7 +2106,7 @@ static int report_callback(void *usr_data)
|
||||
}
|
||||
}
|
||||
|
||||
read_report_group(false, global_timestamp,
|
||||
read_report_group(global_timestamp,
|
||||
neu_group_get_interval(group->group) *
|
||||
NEU_DRIVER_TAG_CACHE_EXPIRE_TIME,
|
||||
neu_adapter_get_tag_cache_type(&group->driver->adapter),
|
||||
@@ -2348,7 +2348,7 @@ static int read_callback(void *usr_data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
|
||||
static void read_report_group(int64_t timestamp, int64_t timeout,
|
||||
neu_tag_cache_type_e cache_type,
|
||||
neu_driver_cache_t *cache, const char *group,
|
||||
UT_array *tags, UT_array *tag_values)
|
||||
@@ -2358,7 +2358,7 @@ static void read_report_group(bool sub, int64_t timestamp, int64_t timeout,
|
||||
neu_driver_cache_value_t value = { 0 };
|
||||
neu_resp_tag_value_meta_t tag_value = { 0 };
|
||||
|
||||
if (sub && neu_tag_attribute_test(tag, NEU_ATTRIBUTE_SUBSCRIBE)) {
|
||||
if (neu_tag_attribute_test(tag, NEU_ATTRIBUTE_SUBSCRIBE)) {
|
||||
if (neu_driver_cache_meta_get_changed(cache, group, tag->name,
|
||||
&value, tag_value.metas,
|
||||
NEU_TAG_META_SIZE) != 0) {
|
||||
|
||||
@@ -166,12 +166,12 @@ int neu_json_encode_read_paginate_resp(void *json_object, void *param)
|
||||
neu_json_encode_field(attributes_object, &meta_elem, 1);
|
||||
}
|
||||
|
||||
tag_elems[if_precision + 9].name = "attributes";
|
||||
tag_elems[if_precision + 9].t = NEU_JSON_OBJECT;
|
||||
tag_elems[if_precision + 9].name = "attributes";
|
||||
tag_elems[if_precision + 9].t = NEU_JSON_OBJECT;
|
||||
tag_elems[if_precision + 9].v.val_object = attributes_object;
|
||||
|
||||
tag_array = neu_json_encode_array(tag_array, tag_elems,
|
||||
10 + if_precision);
|
||||
tag_array =
|
||||
neu_json_encode_array(tag_array, tag_elems, 10 + if_precision);
|
||||
|
||||
free(p_tag->datatag.name);
|
||||
free(p_tag->datatag.address);
|
||||
|
||||
+27
-4
@@ -181,9 +181,11 @@ void neu_cid_to_msg(char *driver, cid_t *cid, neu_req_add_gtag_t *cmd)
|
||||
tag->address = calloc(1, NEU_TAG_ADDRESS_LEN);
|
||||
tag->description = strdup("");
|
||||
snprintf(tag->address, NEU_TAG_ADDRESS_LEN - 1,
|
||||
"%s%s/%s$%s$%s$%s", cid->ied.name,
|
||||
"%s%s/%s%s%s$%s$%s$%s", cid->ied.name,
|
||||
cid->ied.ldevices[i].inst,
|
||||
cid->ied.ldevices[i].lns[j].lnclass, "CO",
|
||||
cid->ied.ldevices[i].lns[j].lnprefix,
|
||||
cid->ied.ldevices[i].lns[j].lnclass,
|
||||
cid->ied.ldevices[i].lns[j].lninst, "CO",
|
||||
cid->ied.ldevices[i].lns[j].ctrls[k].do_name,
|
||||
cid->ied.ldevices[i].lns[j].ctrls[k].sdi_name);
|
||||
}
|
||||
@@ -391,11 +393,28 @@ static int parse_lnode(xmlNode *xml_ldevice, cid_ldevice_t *ldev,
|
||||
(char *) xmlGetProp(lnode, (const xmlChar *) "lnClass");
|
||||
char *ln_type =
|
||||
(char *) xmlGetProp(lnode, (const xmlChar *) "lnType");
|
||||
char *ln_prefix =
|
||||
(char *) xmlGetProp(lnode, (const xmlChar *) "prefix");
|
||||
if (NULL == ln_prefix) {
|
||||
ln_prefix = strdup("");
|
||||
}
|
||||
|
||||
char *ln_inst =
|
||||
(char *) xmlGetProp(lnode, (const xmlChar *) "inst");
|
||||
if (NULL == ln_inst) {
|
||||
ln_inst = strdup("");
|
||||
}
|
||||
|
||||
if (strlen(ln_class) >= NEU_CID_LNCLASS_LEN ||
|
||||
strlen(ln_type) >= NEU_CID_LNTYPE_LEN) {
|
||||
strlen(ln_type) >= NEU_CID_LNTYPE_LEN ||
|
||||
strlen(ln_prefix) >= NEU_CID_LNPREFIX_LEN ||
|
||||
strlen(ln_inst) >= NEU_CID_LNINST_LEN) {
|
||||
xmlFree(ln_class);
|
||||
xmlFree(ln_type);
|
||||
nlog_warn("LN class/type is too long %d", (int) lnode->line);
|
||||
xmlFree(ln_prefix);
|
||||
xmlFree(ln_inst);
|
||||
nlog_warn("LN class/type/prefix/inst is too long %d",
|
||||
(int) lnode->line);
|
||||
return -1;
|
||||
} else {
|
||||
ldev->n_lns += 1;
|
||||
@@ -412,8 +431,12 @@ static int parse_lnode(xmlNode *xml_ldevice, cid_ldevice_t *ldev,
|
||||
|
||||
strcpy(ln->lnclass, ln_class);
|
||||
strcpy(ln->lntype, ln_type);
|
||||
strcpy(ln->lnprefix, ln_prefix);
|
||||
strcpy(ln->lninst, ln_inst);
|
||||
xmlFree(ln_class);
|
||||
xmlFree(ln_type);
|
||||
xmlFree(ln_prefix);
|
||||
xmlFree(ln_inst);
|
||||
|
||||
xmlNode *child = lnode->children;
|
||||
while (child != NULL) {
|
||||
|
||||
Reference in New Issue
Block a user