diff --git a/release/inc/mySystem.h b/release/inc/mySystem.h index 9138de7..1e0bb33 100644 --- a/release/inc/mySystem.h +++ b/release/inc/mySystem.h @@ -321,7 +321,8 @@ typedef struct float max; // 最大值 float step; // 步长 std::string unit; // 单位 - void *p_default; // 默认值 + std::string default_value; // 默认值字符串 + // void *p_default; // 默认值 }stru_signal_param; typedef void (*signal_change_cb)(std::string saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, void *p_data); @@ -341,7 +342,7 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d int dc_signal_param_link_with_callback(const std::string &saddr, uint8_t data_type, void **p_data, signal_change_cb cb); // 数据中心参数设置接口 -int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, void *p_data); +int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, void *p_data); int dc_signal_param_set_val_without_check(const std::string &saddr, uint8_t data_type, void *p_data); @@ -351,8 +352,8 @@ int dc_signal_yk(const std::string &saddr, const std::string &desc, uint8_t data // 数据中心遥控信号链接接口 int dc_signal_yk_link_with_callback(const std::string &saddr, uint8_t data_type, void **p_data, signal_change_cb cb); -// 数据中心遥控控制接口 -int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, void *p_data); +// 数据中心遥控控制接口(校验前置,调用前需先调 dc_yk_ctrl_valid) +int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, void *p_data); // 数据中心获取out信号信息接口 int dc_get_out_signal_info(const std::string &saddr, std::string &desc, uint8_t &data_type, void **p_data); diff --git a/src/protocol/libmms_m/src/mms_m.cpp b/src/protocol/libmms_m/src/mms_m.cpp index 466a31f..6a31ced 100644 --- a/src/protocol/libmms_m/src/mms_m.cpp +++ b/src/protocol/libmms_m/src/mms_m.cpp @@ -2031,32 +2031,68 @@ int mms_m_out_get_value(int fd, mms_m_out_value_cb p_func) void *mms_m_create_data_ptr(uint8_t type) { + uint8_t *p_u8 = nullptr; + int8_t *p_i8 = nullptr; + int16_t *p_i16 = nullptr; + uint16_t *p_u16 = nullptr; + int32_t *p_i32 = nullptr; + uint32_t *p_u32 = nullptr; + int64_t *p_i64 = nullptr; + uint64_t *p_u64 = nullptr; + float *p_f = nullptr; + double *p_d = nullptr; + char *p_str = nullptr; + switch(type) { case _MMS_M_data_type_bool: - return (void *)new uint8_t; + p_u8 = new uint8_t; + (*p_u8) = 0; + return (void *)p_u8; case _MMS_M_data_type_int8: - return (void *)new int8_t; + p_i8 = new int8_t; + (*p_i8) = 0; + return (void *)p_i8; case _MMS_M_data_type_int16: - return (void *)new int16_t; + p_i16 = new int16_t; + (*p_i16) = 0; + return (void *)p_i16; case _MMS_M_data_type_int32: - return (void *)new int32_t; + p_i32 = new int32_t; + (*p_i32) = 0; + return (void *)p_i32; case _MMS_M_data_type_int64: - return (void *)new int64_t; + p_i64 = new int64_t; + (*p_i64) = 0; + return (void *)p_i64; case _MMS_M_data_type_uint8: - return (void *)new uint8_t; + p_u8 = new uint8_t; + (*p_u8) = 0; + return (void *)p_u8; case _MMS_M_data_type_uint16: - return (void *)new uint16_t; + p_u16 = new uint16_t; + (*p_u16) = 0; + return (void *)p_u16; case _MMS_M_data_type_uint32: - return (void *)new uint32_t; + p_u32 = new uint32_t; + (*p_u32) = 0; + return (void *)p_u32; case _MMS_M_data_type_uint64: - return (void *)new uint64_t; + p_u64 = new uint64_t; + (*p_u64) = 0; + return (void *)p_u64; case _MMS_M_data_type_float: - return (void *)new float; + p_f = new float; + (*p_f) = 0.0f; + return (void *)p_f; case _MMS_M_data_type_double: - return (void *)new double; + p_d = new double; + (*p_d) = 0.0; + return (void *)p_d; case _MMS_M_data_type_string: - return (void *)new char[MMS_M_STR_LEN]; + p_str = new char[MMS_M_STR_LEN]; + memset(p_str, 0, MMS_M_STR_LEN); + return (void *)p_str; default: return NULL; } diff --git a/src/system/RTU/src/main.cpp b/src/system/RTU/src/main.cpp index e3e1192..b62654d 100644 --- a/src/system/RTU/src/main.cpp +++ b/src/system/RTU/src/main.cpp @@ -6,7 +6,7 @@ #include "mySystem.h" -LOCAL std::string path = "/mnt/RTU/test/file/SYSCONFIG/"; +LOCAL std::string path = "/mnt/RTU/test/config/"; LOCAL std::string self_ptl_cfg = "self_ptl.xml"; int app_cfg_parse() diff --git a/src/system/libcom_channel/src/com_channel.cpp b/src/system/libcom_channel/src/com_channel.cpp index 4455e52..3149a97 100644 --- a/src/system/libcom_channel/src/com_channel.cpp +++ b/src/system/libcom_channel/src/com_channel.cpp @@ -55,7 +55,7 @@ LOCAL stru_uart_para g_uart_para[ENUM_UART_MAX] = #ifdef RK356x .device = "/dev/ttyS3", #else - .device = "/dev/ttyUSB0", + .device = "/dev/ttyUSB1", #endif .baudrate = 115200, .data_bits = 8, diff --git a/src/system/libdatacenter/inc/dc_signal.h b/src/system/libdatacenter/inc/dc_signal.h index 8b0a337..dabd723 100644 --- a/src/system/libdatacenter/inc/dc_signal.h +++ b/src/system/libdatacenter/inc/dc_signal.h @@ -17,7 +17,8 @@ typedef struct stru_signal uint8_t data_type; // 数据类型 void *p_data; // 数据指针 std::vector link_saddrs; - stru_signal_ctrl ctrl; // 信号扩展信息 + // stru_signal_ctrl ctrl; // 信号扩展信息 + uint8_t ctrl_type; // 信号控制类型 stru_signal_param param; // 信号参数信息 std::vector change_cb_list; // 信号变化回调函数列表 }stru_signal; diff --git a/src/system/libdatacenter/src/dc_siganl.cpp b/src/system/libdatacenter/src/dc_siganl.cpp index 24efa11..1e75405 100644 --- a/src/system/libdatacenter/src/dc_siganl.cpp +++ b/src/system/libdatacenter/src/dc_siganl.cpp @@ -109,11 +109,8 @@ int dc_get_param_signal_info(const std::string &saddr, std::string &desc, uint8_ param.max = p_signal->param.max; param.step = p_signal->param.step; param.unit = p_signal->param.unit; - if(NULL != param.p_default && NULL != p_signal->param.p_default) - { - dc_set_signal_val(param.p_default, data_type, p_signal->param.p_default); - } - ctrl_type = p_signal->ctrl.type; + param.default_value = p_signal->param.default_value; + ctrl_type = p_signal->ctrl_type; (*p_data) = p_signal->p_data; return 0; @@ -129,7 +126,7 @@ int dc_get_yk_signal_info(const std::string &saddr, std::string &desc, uint8_t & } desc = p_signal->desc; data_type = p_signal->data_type; - ctrl_type = p_signal->ctrl.type; + ctrl_type = p_signal->ctrl_type; (*p_data) = p_signal->p_data; return 0; @@ -379,10 +376,7 @@ int dc_signal_param(const std::string &saddr, const std::string &desc, uint8_t d p_signal->change_cb_list.push_back(cb); } - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; - p_signal->ctrl.type = ctrl_type; - p_signal->ctrl.data_type = data_type; - dc_signal_ctrl_data_create(p_signal->ctrl); + p_signal->ctrl_type = ctrl_type; return 0; } @@ -570,17 +564,17 @@ LOCAL int dc_check_ctrl_val_valid(const stru_signal_ctrl &ctrl, const void *p_da return 0; } -LOCAL int dc_check_ctrl_valid(const stru_signal *p_signal, SIGNAL_CTRL_STEP step, uint8_t data_type, const void *p_data) +LOCAL int dc_check_ctrl_valid(const stru_signal *p_signal, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, const void *p_data) { // LOG_I("dc_check_ctrl_valid %s, step %d, data_type %d, p_data %d", p_signal->saddr.c_str(), step, data_type, *(uint8_t *)p_data); - if(p_signal->data_type != data_type) + if(p_signal->data_type != ctrl.data_type) { - LOG_E("%s data_type %d not match ctrl data_type %d", p_signal->saddr.c_str(), p_signal->data_type, data_type); + LOG_E("%s data_type %d not match ctrl data_type %d", p_signal->saddr.c_str(), p_signal->data_type, ctrl.data_type); return -1; } - if(p_signal->ctrl.type == SIGNAL_CTRL_TYPE::DIRECT_NORMAL) + if(ctrl.type == SIGNAL_CTRL_TYPE::DIRECT_NORMAL) { if(step == SIGNAL_CTRL_STEP::DIRECT) { @@ -588,13 +582,13 @@ LOCAL int dc_check_ctrl_valid(const stru_signal *p_signal, SIGNAL_CTRL_STEP step } else { - LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), p_signal->ctrl.type, step); + LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), ctrl.type, ctrl.step); return -1; } } - else if(p_signal->ctrl.type == SIGNAL_CTRL_TYPE::SBO_NORMAL) + else if(ctrl.type == SIGNAL_CTRL_TYPE::SBO_NORMAL) { - if(p_signal->ctrl.step == SIGNAL_CTRL_STEP::READY) + if(ctrl.step == SIGNAL_CTRL_STEP::READY) { if(step == SIGNAL_CTRL_STEP::SELECT) { @@ -602,21 +596,21 @@ LOCAL int dc_check_ctrl_valid(const stru_signal *p_signal, SIGNAL_CTRL_STEP step } else { - LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), p_signal->ctrl.type, step); + LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), ctrl.type, ctrl.step); return -1; } } - else if(p_signal->ctrl.step == SIGNAL_CTRL_STEP::SELECT) + else if(ctrl.step == SIGNAL_CTRL_STEP::SELECT) { if(step == SIGNAL_CTRL_STEP::DIRECT) { - if(0 == dc_check_ctrl_val_valid(p_signal->ctrl, p_data)) + if(0 == dc_check_ctrl_val_valid(ctrl, p_data)) { return 0; } else { - LOG_E("%s ctrl_type %d, direct value not match selected value", p_signal->saddr.c_str(), p_signal->ctrl.type); + LOG_E("%s ctrl_type %d, direct value not match selected value", p_signal->saddr.c_str(), ctrl.type); return -1; } } @@ -626,13 +620,13 @@ LOCAL int dc_check_ctrl_valid(const stru_signal *p_signal, SIGNAL_CTRL_STEP step } else { - LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), p_signal->ctrl.type, step); + LOG_E("%s ctrl_type %d, invalid ctrl step %d", p_signal->saddr.c_str(), ctrl.type, ctrl.step); return -1; } } } - LOG_E("invalid ctrl type %d", p_signal->ctrl.type); + LOG_E("invalid ctrl type %d", ctrl.type); return -1; } @@ -871,33 +865,33 @@ LOCAL int dc_check_val_valid(const stru_signal *p_signal, const void *p_data) return 0; } -int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, void *p_data) +int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, void *p_data) { XXH128_hash_t hash = XXH3_128bits(saddr.c_str(), saddr.length()); stru_signal *p_signal = dc_find_signal(hash, g_datacenter.siganl_param); - if(p_signal != nullptr) + if(p_signal != nullptr) { - if(0 == dc_check_ctrl_valid(p_signal, step, data_type, p_data)) + if(0 == dc_check_ctrl_valid(p_signal, step, ctrl, p_data)) { if(0 != dc_check_val_valid(p_signal, p_data)) { - LOG_E("set value failed, saddr: %s", saddr.c_str()); + LOG_E("invalid value for saddr %s", saddr.c_str()); return -1; } if(step == SIGNAL_CTRL_STEP::SELECT) { - dc_set_signal_val(p_signal->ctrl.p_data, data_type, p_data); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::SELECT; + dc_set_signal_val(ctrl.p_data, ctrl.data_type, p_data); + ctrl.step = SIGNAL_CTRL_STEP::SELECT; } else if(step == SIGNAL_CTRL_STEP::DIRECT) { - dc_set_signal_val(p_signal->p_data, data_type, p_data); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + dc_set_signal_val(p_signal->p_data, ctrl.data_type, p_data); + ctrl.step = SIGNAL_CTRL_STEP::READY; } else if(step == SIGNAL_CTRL_STEP::CANCEL) { - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + ctrl.step = SIGNAL_CTRL_STEP::READY; } else { @@ -909,20 +903,22 @@ int dc_signal_param_set_val(const std::string &saddr, SIGNAL_CTRL_STEP step, uin { if(cb != nullptr) { - cb(saddr, step, data_type, p_data); + cb(saddr, step, ctrl.data_type, p_data); } } + return 0; } else { - LOG_E("set ctrl failed, saddr: %s", saddr.c_str()); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + LOG_E("saddr %s ctrl invalid", saddr.c_str()); + ctrl.step = SIGNAL_CTRL_STEP::READY; return -1; } } - LOG_E("saddr %s not found in param table"); + LOG_E("saddr %s not found in param table", saddr.c_str()); + return -1; } @@ -967,10 +963,12 @@ int dc_signal_yk(const std::string &saddr, const std::string &desc, uint8_t data p_signal->change_cb_list.push_back(cb); } - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; - p_signal->ctrl.type = ctrl_type; - p_signal->ctrl.data_type = data_type; - dc_signal_ctrl_data_create(p_signal->ctrl); + // p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + // p_signal->ctrl.type = ctrl_type; + // p_signal->ctrl.data_type = data_type; + // dc_signal_ctrl_data_create(p_signal->ctrl); + + p_signal->ctrl_type = ctrl_type; return 0; } @@ -995,27 +993,27 @@ int dc_signal_yk_link_with_callback(const std::string &saddr, uint8_t data_type, return -1; } -int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, uint8_t data_type, void *p_data) +int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, stru_signal_ctrl &ctrl, void *p_data) { XXH128_hash_t hash = XXH3_128bits(saddr.c_str(), saddr.length()); stru_signal *p_signal = dc_find_signal(hash, g_datacenter.siganl_yk); if(p_signal != nullptr) { - if(0 == dc_check_ctrl_valid(p_signal, step, data_type, p_data)) + if(0 == dc_check_ctrl_valid(p_signal, step, ctrl, p_data)) { if(step == SIGNAL_CTRL_STEP::SELECT) { - dc_set_signal_val(p_signal->ctrl.p_data, data_type, p_data); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::SELECT; + dc_set_signal_val(ctrl.p_data, ctrl.data_type, p_data); + ctrl.step = SIGNAL_CTRL_STEP::SELECT; } else if(step == SIGNAL_CTRL_STEP::DIRECT) { - dc_set_signal_val(p_signal->p_data, data_type, p_data); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + dc_set_signal_val(p_signal->p_data, ctrl.data_type, p_data); + ctrl.step = SIGNAL_CTRL_STEP::READY; } else if(step == SIGNAL_CTRL_STEP::CANCEL) { - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + ctrl.step = SIGNAL_CTRL_STEP::READY; } else { @@ -1027,20 +1025,22 @@ int dc_signal_yk_set_status(const std::string &saddr, SIGNAL_CTRL_STEP step, uin { if(cb != nullptr) { - cb(saddr, step, data_type, p_data); + cb(saddr, step, ctrl.data_type, p_data); } } + return 0; } else { - LOG_E("set ctrl failed, saddr: %s", saddr.c_str()); - p_signal->ctrl.step = SIGNAL_CTRL_STEP::READY; + LOG_E("saddr %s ctrl invalid", saddr.c_str()); + ctrl.step = SIGNAL_CTRL_STEP::READY; return -1; } } - LOG_E("saddr %s not found in yk table"); + LOG_E("saddr %s not found in yk table", saddr.c_str()); + return -1; } diff --git a/src/system/libiec61850m/src/iec61850m.cpp b/src/system/libiec61850m/src/iec61850m.cpp index ac7de26..36ce4b0 100644 --- a/src/system/libiec61850m/src/iec61850m.cpp +++ b/src/system/libiec61850m/src/iec61850m.cpp @@ -273,7 +273,7 @@ int iec61850m_signal_init(stru_mms_m_config &cfg) param.max = cfg.p_ao_sig[i].max; param.step = cfg.p_ao_sig[i].step; param.unit = cfg.p_ao_sig[i].unit; - param.p_default = NULL; + param.default_value = cfg.p_ao_sig[i].p_default ? dc_get_signal_val(cfg.p_ao_sig[i].p_default, cfg.p_ao_sig[i].sig.data_type) : ""; uint8_t type_local = g_mms_m_type_to_local_type[cfg.p_ao_sig[i].sig.data_type]; ret |= dc_signal_param(cfg.p_ao_sig[i].sig.saddr, cfg.p_ao_sig[i].sig.desc, type_local, param, cfg.p_ao_sig[i].ctrl_type, cfg.p_ao_sig[i].sig.p_data, iec61850m_signal_change_callback); diff --git a/src/system/libself_ptl/inc/self_ptl.h b/src/system/libself_ptl/inc/self_ptl.h index a7c050d..0eb9dd0 100644 --- a/src/system/libself_ptl/inc/self_ptl.h +++ b/src/system/libself_ptl/inc/self_ptl.h @@ -49,6 +49,7 @@ typedef struct stru_self_ptl_cfg_base *p_base; void *p_data; void *p_last_data; + stru_signal_ctrl *p_ctrl; }stru_self_ptl_cfg_base_data; typedef struct @@ -56,6 +57,7 @@ typedef struct stru_self_ptl_cfg_param *p_param; void *p_data; void *p_default_data; + stru_signal_ctrl *p_ctrl; }stru_self_ptl_cfg_param_data; diff --git a/src/system/libself_ptl/src/self_ptl.cpp b/src/system/libself_ptl/src/self_ptl.cpp index 1c7e088..de6abd1 100644 --- a/src/system/libself_ptl/src/self_ptl.cpp +++ b/src/system/libself_ptl/src/self_ptl.cpp @@ -500,7 +500,24 @@ LOCAL int self_ptl_cfg_init() uint8_t *p_u8_last = new uint8_t; (*p_u8) = 0; (*p_u8_last) = 0; - p_cfg_data->co_vec.push_back({&p_cfg->co_vec[i], p_u8, p_u8_last}); + + stru_signal_ctrl *p_ctrl = new stru_signal_ctrl; + if(nullptr == p_ctrl) { + LOG_E("self_ptl_cfg_init new stru_signal_ctrl failed"); + return -1; + } + + p_ctrl->type = SIGNAL_CTRL_TYPE::SBO_NORMAL; + p_ctrl->step = SIGNAL_CTRL_STEP::READY; + p_ctrl->data_type = DATA_TYPE_U8; + p_ctrl->p_data = dc_create_data_ptr_by_type(DATA_TYPE_U8); + if(nullptr == p_ctrl->p_data) + { + LOG_E("self_ptl_cfg_init dc_create_data_ptr_by_type failed, type:%d", DATA_TYPE_U8); + return -1; + } + + p_cfg_data->co_vec.push_back({&p_cfg->co_vec[i], p_u8, p_u8_last, p_ctrl}); } for(uint32_t i = 0; i < p_cfg->dd_vec.size(); i++) @@ -529,7 +546,24 @@ LOCAL int self_ptl_cfg_init() return -1; } - p_cfg_data->param_vec.push_back({p_param, p_data, p_default_data}); + stru_signal_ctrl *p_ctrl = new stru_signal_ctrl; + if(nullptr == p_ctrl) + { + LOG_E("self_ptl_cfg_init dc_create_data_ptr_by_type failed, type:%d", p_param->type); + return -1; + } + + p_ctrl->type = SIGNAL_CTRL_TYPE::SBO_NORMAL; + p_ctrl->step = SIGNAL_CTRL_STEP::READY; + p_ctrl->data_type = p_param->type; + p_ctrl->p_data = dc_create_data_ptr_by_type(p_param->type); + if(nullptr == p_ctrl->p_data) + { + LOG_E("self_ptl_cfg_init dc_create_data_ptr_by_type failed, type:%d", p_param->type); + return -1; + } + + p_cfg_data->param_vec.push_back({p_param, p_data, p_default_data, p_ctrl}); } return 0; @@ -788,7 +822,7 @@ int self_ptl_do_signal_out(stru_app *p_app) param.min = safeStringToFloat(p_param->p_param->min); param.max = safeStringToFloat(p_param->p_param->max); param.step = safeStringToFloat(p_param->p_param->step); - param.p_default = p_param->p_default_data; + param.default_value = p_param->p_param->default_value; param.unit = p_param->p_param->unit; // ret(saddr, p(saddr, p->name, p->type, p->p_data); ret |= dc_signal_param(p_param->p_param->base.saddr, p_param->p_param->base.desc, p_param->p_param->type, param, SIGNAL_CTRL_TYPE::SBO_NORMAL, p_param->p_data, self_ptl_signal_change_callback); diff --git a/src/system/libweb_server/src/ws_method.cpp b/src/system/libweb_server/src/ws_method.cpp index 05ad6f6..15fbd18 100644 --- a/src/system/libweb_server/src/ws_method.cpp +++ b/src/system/libweb_server/src/ws_method.cpp @@ -10,6 +10,7 @@ typedef struct uint8_t data_type; uint8_t ctrl_type; void *p_data; + stru_signal_ctrl *p_ctrl; stru_signal_param *p_param; }stru_ws_signal; @@ -34,8 +35,8 @@ int signal_is_exist(const std::string& saddr, const std::vector& void add_signal(const std::string& saddr, const std::string& signal_type) { - std::vector *p_signals = NULL; - stru_ws_signal *p = NULL; + std::vector *p_signals = nullptr; + stru_ws_signal *p = nullptr; if(signal_type == "out") { @@ -47,12 +48,14 @@ void add_signal(const std::string& saddr, const std::string& signal_type) return; } - p_signals->push_back({saddr, "", 0, 0, NULL, NULL}); + p_signals->push_back({saddr, "", 0, 0, nullptr, nullptr, nullptr}); p = &p_signals->back(); if(0 != dc_get_out_signal_info(saddr, p->desc, p->data_type, &p->p_data)) { LOG_E("add_signals: dc_get_out_signal_info failed, saddr = %s", saddr.c_str()); + + p_signals->pop_back(); return; } } @@ -66,12 +69,13 @@ void add_signal(const std::string& saddr, const std::string& signal_type) return; } - p_signals->push_back({saddr, "", 0, 0, NULL, NULL}); + p_signals->push_back({saddr, "", 0, 0, nullptr, nullptr, nullptr}); p = &p_signals->back(); if(0 != dc_get_in_signal_info(saddr, p->desc, p->data_type, &p->p_data)) { LOG_E("add_signals: dc_get_in_signal_info failed, saddr = %s", saddr.c_str()); + p_signals->pop_back(); return; } @@ -86,12 +90,29 @@ void add_signal(const std::string& saddr, const std::string& signal_type) return; } - p_signals->push_back({saddr, "", 0, 0, NULL, NULL}); + p_signals->push_back({saddr, "", 0, 0, nullptr, nullptr, nullptr}); + p_signals->back().p_ctrl = new stru_signal_ctrl; p = &p_signals->back(); if(0 != dc_get_yk_signal_info(saddr, p->desc, p->data_type, p->ctrl_type, &p->p_data)) { LOG_E("add_signals: dc_get_yk_signal_info failed, saddr = %s", saddr.c_str()); + + delete p->p_ctrl; + p_signals->pop_back(); + return; + } + + p->p_ctrl->type = p->ctrl_type; + p->p_ctrl->step = SIGNAL_CTRL_STEP::READY; + p->p_ctrl->data_type = p->data_type; + p->p_ctrl->p_data = dc_create_data_ptr_by_type(p->data_type); + if(nullptr == p->p_ctrl->p_data) + { + LOG_E("add_signals: dc_create_data_ptr_by_type failed, saddr = %s, data_type = %d", saddr.c_str(), p->data_type); + + delete p->p_ctrl; + p_signals->pop_back(); return; } } @@ -104,13 +125,32 @@ void add_signal(const std::string& saddr, const std::string& signal_type) LOG_E("add_signals: signal is already exist, saddr = %s", saddr.c_str()); return; } - p_signals->push_back({saddr, "", 0, 0, NULL, NULL}); + p_signals->push_back({saddr, "", 0, 0, nullptr, nullptr, nullptr}); + p_signals->back().p_ctrl = new stru_signal_ctrl; p_signals->back().p_param = new stru_signal_param; p = &p_signals->back(); if(0 != dc_get_param_signal_info(saddr, p->desc, p->data_type, *p->p_param, p->ctrl_type, &p->p_data)) { LOG_E("add_signals: dc_get_param_signal_info failed, saddr = %s", saddr.c_str()); + + delete p->p_ctrl; + delete p->p_param; + p_signals->pop_back(); + return; + } + + p->p_ctrl->type = p->ctrl_type; + p->p_ctrl->step = SIGNAL_CTRL_STEP::READY; + p->p_ctrl->data_type = p->data_type; + p->p_ctrl->p_data = dc_create_data_ptr_by_type(p->data_type); + if(nullptr == p->p_ctrl->p_data) + { + LOG_E("add_signals: dc_create_data_ptr_by_type failed, saddr = %s, data_type = %d", saddr.c_str(), p->data_type); + + delete p->p_ctrl; + delete p->p_param; + p_signals->pop_back(); return; } } @@ -123,7 +163,7 @@ void add_signal(const std::string& saddr, const std::string& signal_type) void del_signal(const std::string& saddr, const std::string& signal_type) { - std::vector *p_signals = NULL; + std::vector *p_signals = nullptr; if(signal_type == "out") { @@ -152,7 +192,11 @@ void del_signal(const std::string& saddr, const std::string& signal_type) stru_ws_signal *p_signal = &p_signals->at(i); if(p_signal->saddr == saddr) { - if(signal_type == "param") + if(p_signal->p_ctrl) + { + delete p_signal->p_ctrl; + } + if(p_signal->p_param) { delete p_signal->p_param; } @@ -167,7 +211,7 @@ void del_signal(const std::string& saddr, const std::string& signal_type) void set_signal_data(const std::string& saddr, const std::string& signal_type, const std::string& signal_data) { - std::vector *p_signals = NULL; + std::vector *p_signals = nullptr; if(signal_data.empty()) { @@ -209,7 +253,7 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c { if(p_signal->ctrl_type == SIGNAL_CTRL_TYPE::DIRECT_NORMAL) { - if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::DIRECT, p_signal->data_type, (void *)&ctrl_status)) + if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::DIRECT, *p_signal->p_ctrl, (void *)&ctrl_status)) { LOG_E("set_signal_data: dc_signal_yk_set_status direct failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -220,8 +264,7 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c } else if(p_signal->ctrl_type == SIGNAL_CTRL_TYPE::SBO_NORMAL) { - // LOG_I("saddr %s, select, value %d", saddr.c_str(), ctrl_status); - if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::SELECT, p_signal->data_type, (void *)&ctrl_status)) + if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::SELECT, *p_signal->p_ctrl, (void *)&ctrl_status)) { LOG_E("set_signal_data: dc_signal_yk_set_status select failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -229,8 +272,8 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c task_sleep_ms(1000); MY_LOG_I("saddr %s, select value %d success !!!", saddr.c_str(), ctrl_status); - // LOG_I("saddr %s, direct, value %d", saddr.c_str(), ctrl_status); - if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::DIRECT, p_signal->data_type, (void *)&ctrl_status)) + + if(0 != dc_signal_yk_set_status(saddr, SIGNAL_CTRL_STEP::DIRECT, *p_signal->p_ctrl, (void *)&ctrl_status)) { LOG_E("set_signal_data: dc_signal_yk_set_status direct failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -255,10 +298,10 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c { stru_ws_signal *p_signal = &p_signals->at(i); if(p_signal->saddr == saddr) - { + { if(p_signal->ctrl_type == SIGNAL_CTRL_TYPE::DIRECT_NORMAL) { - if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::DIRECT, p_signal->data_type, (void *)signal_data.c_str())) + if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::DIRECT, *p_signal->p_ctrl, (void *)signal_data.c_str())) { LOG_E("set_signal_data: dc_signal_param_set_val direct failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -269,7 +312,7 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c } else if(p_signal->ctrl_type == SIGNAL_CTRL_TYPE::SBO_NORMAL) { - if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::SELECT, p_signal->data_type, (void *)signal_data.c_str())) + if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::SELECT, *p_signal->p_ctrl, (void *)signal_data.c_str())) { LOG_E("set_signal_data: dc_signal_param_set_val select failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -277,7 +320,7 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c LOG_I("saddr %s, select, value %s success !!!", saddr.c_str(), signal_data.c_str()); - if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::DIRECT, p_signal->data_type, (void *)signal_data.c_str())) + if(0 != dc_signal_param_set_val(saddr, SIGNAL_CTRL_STEP::DIRECT, *p_signal->p_ctrl, (void *)signal_data.c_str())) { LOG_E("set_signal_data: dc_signal_param_set_val direct failed, saddr = %s, signal_data = %s", saddr.c_str(), signal_data.c_str()); return; @@ -307,14 +350,14 @@ void set_signal_data(const std::string& saddr, const std::string& signal_type, c void ws_recv(const char* p_rx, uint16_t rx_len) { - if(NULL == p_rx || 0 == rx_len) + if(nullptr == p_rx || 0 == rx_len) { LOG_E("ws_recv: invalid parameter, p_rx = %p, rx_len = %d", p_rx, rx_len); return; } cJSON* root = cJSON_Parse(p_rx); - if(NULL == root) + if(nullptr == root) { LOG_E("ws_recv: cJSON_Parse failed, p_rx = %s", p_rx); return; @@ -400,7 +443,7 @@ void ws_task() const char ctrl_type_str[][16] = {"NONE", "DIRECT_NORMAL", "SBO_NORMAL"}; cJSON *root = cJSON_CreateObject(); - if(NULL == root) + if(nullptr == root) { LOG_E("ws_task: cJSON_CreateObject failed"); return; @@ -413,7 +456,7 @@ void ws_task() { stru_ws_signal *p_signal = &g_ws_out_signals.at(i); cJSON *item = cJSON_CreateObject(); - if(NULL == item) + if(nullptr == item) { LOG_E("ws_task: cJSON_CreateObject failed"); cJSON_Delete(root); @@ -436,7 +479,7 @@ void ws_task() { stru_ws_signal *p_signal = &g_ws_in_signals.at(i); cJSON *item = cJSON_CreateObject(); - if(NULL == item) + if(nullptr == item) { LOG_E("ws_task: cJSON_CreateObject failed"); cJSON_Delete(root); @@ -457,7 +500,7 @@ void ws_task() { stru_ws_signal *p_signal = &g_ws_yk_signals.at(i); cJSON *item = cJSON_CreateObject(); - if(NULL == item) + if(nullptr == item) { LOG_E("ws_task: cJSON_CreateObject failed"); cJSON_Delete(root); @@ -480,7 +523,7 @@ void ws_task() { stru_ws_signal *p_signal = &g_ws_param_signals.at(i); cJSON *item = cJSON_CreateObject(); - if(NULL == item) + if(nullptr == item) { LOG_E("ws_task: cJSON_CreateObject failed"); cJSON_Delete(root); @@ -499,20 +542,21 @@ void ws_task() cJSON_AddItemToObject(item, "max", cJSON_CreateString(std::to_string(p_signal->p_param->max).c_str())); cJSON_AddItemToObject(item, "step", cJSON_CreateString(std::to_string(p_signal->p_param->step).c_str())); cJSON_AddItemToObject(item, "unit", cJSON_CreateString(p_signal->p_param->unit.c_str())); - if(p_signal->p_param->p_default) - { - cJSON_AddItemToObject(item, "default", cJSON_CreateString(dc_get_signal_val(p_signal->p_param->p_default, p_signal->data_type).c_str())); - } - else - { - cJSON_AddItemToObject(item, "default", cJSON_CreateString("")); - } + cJSON_AddItemToObject(item, "default", cJSON_CreateString(p_signal->p_param->default_value.c_str())); + // if(p_signal->p_param->p_default) + // { + // cJSON_AddItemToObject(item, "default", cJSON_CreateString(dc_get_signal_val(p_signal->p_param->p_default, p_signal->data_type).c_str())); + // } + // else + // { + // cJSON_AddItemToObject(item, "default", cJSON_CreateString("")); + // } } cJSON_AddItemToArray(param_arr, item); } char *p_tx = cJSON_Print(root); - if(NULL == p_tx) + if(nullptr == p_tx) { LOG_E("ws_task: cJSON_Print failed"); cJSON_Delete(root); diff --git a/test/config/iec1014.xml b/test/config/iec1014.xml new file mode 100644 index 0000000..11c935c --- /dev/null +++ b/test/config/iec1014.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/test/file/SYSCONFIG/self_ptl.xml b/test/config/self_ptl.xml similarity index 100% rename from test/file/SYSCONFIG/self_ptl.xml rename to test/config/self_ptl.xml