<修改>
1、调整mms_m库中,创建数据时,赋初值; 2、数据中心的数据表中不存放控制数据,控制状态逻辑由调用者申请分别传入; 3、数据中心参数注册时,存放缺省值的字符串数据; 4、数据中心遥控与参数不再初始化控制状态结构体; 5、调整配置文件目录,存入私有规约配置文件,添加iec1014的配置文件
This commit is contained in:
parent
d6dc13937e
commit
8d4c7eebb4
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -17,7 +17,8 @@ typedef struct stru_signal
|
|||
uint8_t data_type; // 数据类型
|
||||
void *p_data; // 数据指针
|
||||
std::vector<std::string> link_saddrs;
|
||||
stru_signal_ctrl ctrl; // 信号扩展信息
|
||||
// stru_signal_ctrl ctrl; // 信号扩展信息
|
||||
uint8_t ctrl_type; // 信号控制类型
|
||||
stru_signal_param param; // 信号参数信息
|
||||
std::vector<signal_change_cb> change_cb_list; // 信号变化回调函数列表
|
||||
}stru_signal;
|
||||
|
|
|
|||
|
|
@ -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(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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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<stru_ws_signal>&
|
|||
|
||||
void add_signal(const std::string& saddr, const std::string& signal_type)
|
||||
{
|
||||
std::vector<stru_ws_signal> *p_signals = NULL;
|
||||
stru_ws_signal *p = NULL;
|
||||
std::vector<stru_ws_signal> *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<stru_ws_signal> *p_signals = NULL;
|
||||
std::vector<stru_ws_signal> *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<stru_ws_signal> *p_signals = NULL;
|
||||
std::vector<stru_ws_signal> *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;
|
||||
|
|
@ -258,7 +301,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_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);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Root>
|
||||
<St>
|
||||
<Item saddr="iec1014.st.1" desc="远方遥信1-手分遥信" link="self_ptl.st.1" inf="1"/>
|
||||
<Item saddr="iec1014.st.2" desc="远方遥信2-手合遥信" link="self_ptl.st.2" inf="2"/>
|
||||
<Item saddr="iec1014.st.3" desc="远方遥信3-就地遥信" link="self_ptl.st.3" inf="3"/>
|
||||
<Item saddr="iec1014.st.4" desc="远方遥信4-远方遥信" link="self_ptl.st.4" inf="4"/>
|
||||
</St>
|
||||
<Mx>
|
||||
<Item saddr="iec1014.mx.1" desc="远方遥信1-经度" link="self_ptl.mx.1" inf="16385"/>
|
||||
<Item saddr="iec1014.mx.2" desc="远方遥信2-纬度" link="self_ptl.mx.5" inf="16386"/>
|
||||
<Item saddr="iec1014.mx.3" desc="远方遥信3-海拔" link="self_ptl.mx.9" inf="16387"/>
|
||||
<Item saddr="iec1014.mx.4" desc="计量-频率" link="self_ptl.mx.38" inf="16388"/>
|
||||
<Item saddr="iec1014.mx.5" desc="采集板温度" link="self_ptl.mx.64" inf="16390"/>
|
||||
</Mx>
|
||||
<Co>
|
||||
<Item saddr="iec1014.co.1" desc="硬遥控11-交流录波" link="self_ptl.co.11" inf="24577"/>
|
||||
</Co>
|
||||
<Dd>
|
||||
</Dd>
|
||||
<Param>
|
||||
<Item saddr="iec1014.param.1" desc="终端类型" link="self_ptl.param.INFO_DEV_TYPE" inf="32769"/>
|
||||
<Item saddr="iec1014.param.2" desc="终端操作系统" link="self_ptl.param.INFO_PLATFORM" inf="32770"/>
|
||||
<Item saddr="iec1014.param.3" desc="生产厂商" link="self_ptl.param.HD_SERIAL" inf="32771"/>
|
||||
<Item saddr="iec1014.param.4" desc="终端硬件版本" link="self_ptl.param.HD_SERIAL" inf="32772"/>
|
||||
<Item saddr="iec1014.param.5" desc="终端软件版本" link="self_ptl.param.HD_SERIAL" inf="32773"/>
|
||||
<Item saddr="iec1014.param.6" desc="终端软件版本校验码" link="self_ptl.param.RES_C24_SYS1" inf="32774"/>
|
||||
<Item saddr="iec1014.param.7" desc="终端通讯规约类型" link="self_ptl.param.INFO_PROTOCOL" inf="32775"/>
|
||||
<Item saddr="iec1014.param.8" desc="终端出厂型号" link="self_ptl.param.INFO_FACTORYMODEL" inf="32776"/>
|
||||
<Item saddr="iec1014.param.9" desc="终端ID号" link="self_ptl.param.TERM_ID" inf="32777"/>
|
||||
<Item saddr="iec1014.param.10" desc="双MAC地址" link="self_ptl.param.DoubleMac" inf="32778"/>
|
||||
|
||||
<Item saddr="iec1014.param.11" desc="遥测-交流电流死区" link="self_ptl.param.I_DEAD" inf="32800"/>
|
||||
<Item saddr="iec1014.param.12" desc="遥测-交流电压死区" link="self_ptl.param.UAC_DEAD" inf="32801"/>
|
||||
|
||||
<Item saddr="iec1014.param.13" desc="保护-故障指示灯自动复归投退" link="self_ptl.param.ALARMLED_EN_MOD" inf="34848"/>
|
||||
<Item saddr="iec1014.param.14" desc="保护-故障指示灯复归时间" link="self_ptl.param.FaultLed_Reset_T" inf="34849"/>
|
||||
</Param>
|
||||
</Root>
|
||||
Loading…
Reference in New Issue