From 7549032700cb3f7d6154e8b723155686eb4865c5 Mon Sep 17 00:00:00 2001 From: ypc <15051963820@163.com> Date: Fri, 5 Jun 2026 15:55:14 +0800 Subject: [PATCH] =?UTF-8?q?<=E4=BF=AE=E6=94=B9>=201=E3=80=81=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E8=8E=B7=E5=8F=96=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=B7=AF=E5=BE=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 2 +- release/build.sh | 1 + release/inc/myFunc.h | 1 + release/linux.mk | 4 + src/public/libfunc/src/myFunc.c | 26 + src/public/libfunc/src/myLog.c | 32 +- src/system/RTU/src/main.cpp | 20 +- src/system/libdatacenter/inc/dc_param.h | 10 +- src/system/libdatacenter/inc/dc_signal.h | 2 +- src/system/libdatacenter/src/datacenter.cpp | 29 +- src/system/libdatacenter/src/dc_param.cpp | 12 +- src/system/libdatacenter/src/dc_signal.cpp | 12 +- src/system/libiec/src/iec.cpp | 11 +- src/system/libiec61850m/src/iec61850m.cpp | 22 +- src/system/libiec61850s/src/iec61850s.cpp | 33 +- src/system/libself_ptl/src/method.cpp | 17 +- src/system/libself_ptl/src/self_ptl.cpp | 4 +- src/system/libweb_server/src/web_server.cpp | 18 +- test/config/{ => IEC60870}/iec1014.xml | 0 test/{file => config}/PARAM/param.xml | 1881 ++++++++++--------- test/config/{ => SELF_PTL}/self_ptl.xml | 0 21 files changed, 1147 insertions(+), 990 deletions(-) rename test/config/{ => IEC60870}/iec1014.xml (100%) rename test/{file => config}/PARAM/param.xml (83%) rename test/config/{ => SELF_PTL}/self_ptl.xml (100%) diff --git a/.vscode/launch.json b/.vscode/launch.json index 122d8ef..e946247 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -5,7 +5,7 @@ "name": "Debug", "type": "cppdbg", "request": "launch", - "program": "${workspaceFolder}/release/x86/exe/RTU", + "program": "${workspaceFolder}/test/RTU", // "program": "${workspaceFolder}/release/x86/exe/FTU_cfg_parse", "args": [], "stopAtEntry": false, diff --git a/release/build.sh b/release/build.sh index 4d68e31..2e46c89 100755 --- a/release/build.sh +++ b/release/build.sh @@ -22,6 +22,7 @@ else echo "=====================================" echo " 本地 X86 编译 开始" echo "=====================================" + rm -f "$(dirname "$0")/../test/RTU" make clean make fi diff --git a/release/inc/myFunc.h b/release/inc/myFunc.h index a219fb9..0955d95 100644 --- a/release/inc/myFunc.h +++ b/release/inc/myFunc.h @@ -139,6 +139,7 @@ int func_get_process_pid_by_name(const char *proc_name); int func_process_exist_by_pid(int pid); int func_get_process_path_by_pid(int pid, char *path, uint32_t len); int func_get_process_self_path(char *path, uint32_t len); +int func_get_process_self_dir(char *path, uint32_t len); /*************************************************************************/ diff --git a/release/linux.mk b/release/linux.mk index d0949b4..0fb37c0 100644 --- a/release/linux.mk +++ b/release/linux.mk @@ -60,6 +60,9 @@ endif LIB_REL = $(REL_ROOT_DIR)/lib EXE_REL = $(REL_ROOT_DIR)/exe +# test目录(仅x86编译时复制产物用) +TEST_DIR = $(ROOT_DIR)/test + # 导出环境变量 export CC export CPP @@ -75,3 +78,4 @@ export LIB_REL_MY export LIB_REL export EXE_REL export LIB_61850 +export TEST_DIR diff --git a/src/public/libfunc/src/myFunc.c b/src/public/libfunc/src/myFunc.c index 15298cf..27310b8 100644 --- a/src/public/libfunc/src/myFunc.c +++ b/src/public/libfunc/src/myFunc.c @@ -1272,6 +1272,32 @@ int func_get_process_self_path(char *path, uint32_t len) return 0; } +// 获取当前进程所在目录 +int func_get_process_self_dir(char *path, uint32_t len) +{ + if((path == NULL) || (len == 0)) + { + LOG_E("func_get_process_self_dir input invalid, path=%p, len=%d", path, len); + return -1; + } + + if(func_get_process_self_path(path, len) != 0) + { + LOG_E("func_get_process_self_dir func_get_process_self_path failed"); + return -1; + } + + char *p_ch = strrchr(path, '/'); + if(NULL == p_ch) + { + LOG_E("func_get_process_self_dir strrchr failed, path=%s", path); + return -1; + } + *(p_ch + 1) = '\0'; + + return 0; +} + /*************************************************************************/ // 环境变量操作函数 diff --git a/src/public/libfunc/src/myLog.c b/src/public/libfunc/src/myLog.c index 9966d26..895a14c 100644 --- a/src/public/libfunc/src/myLog.c +++ b/src/public/libfunc/src/myLog.c @@ -1,5 +1,6 @@ #include "myLog.h" #include "myBase.h" +#include "myFunc.h" #include #include #include @@ -39,7 +40,7 @@ #define CLRLINE "\r\e[K" //or "\e[1K\r" // 日志配置 -#define LOG_FILE_PATH "/mnt/RTU/release/exe/logs" +static char g_log_path[256] = {0}; #define LOG_FILE_NAME "app.log" #define LOG_FILE_MAX_SIZE (10 * 1024 * 1024) #define LOG_FILE_MAX_COUNT 5 @@ -243,28 +244,41 @@ static void get_log_file_path(char* path, size_t size, int index) { if (index == 0) { - snprintf(path, size, "%s/%s", LOG_FILE_PATH, LOG_FILE_NAME); + snprintf(path, size, "%s/%s", g_log_path, LOG_FILE_NAME); } else { - snprintf(path, size, "%s/%s.%d", LOG_FILE_PATH, LOG_FILE_NAME, index); + snprintf(path, size, "%s/%s.%d", g_log_path, LOG_FILE_NAME, index); } } // 初始化日志目录 -static int init_log_directory(void) +static int init_log_directory(void) { + if (g_log_path[0] == '\0') + { + char proc_dir[256] = {0}; + if (func_get_process_self_dir(proc_dir, sizeof(proc_dir)) == 0) + { + snprintf(g_log_path, sizeof(g_log_path), "%slogs", proc_dir); + } + else + { + snprintf(g_log_path, sizeof(g_log_path), "/tmp/logs"); + } + } + struct stat st = {0}; - if (stat(LOG_FILE_PATH, &st) == -1) + if (stat(g_log_path, &st) == -1) { - LOG_E("Failed to stat log directory %s", LOG_FILE_PATH); - if (mkdir(LOG_FILE_PATH, 0755) == -1) + LOG_E("Failed to stat log directory %s", g_log_path); + if (mkdir(g_log_path, 0755) == -1) { - LOG_E("Failed to create log directory %s", LOG_FILE_PATH); + LOG_E("Failed to create log directory %s", g_log_path); return -1; } } - LOG_I("Log directory %s create success", LOG_FILE_PATH); + LOG_I("Log directory %s create success", g_log_path); return 0; } diff --git a/src/system/RTU/src/main.cpp b/src/system/RTU/src/main.cpp index b62654d..621859f 100644 --- a/src/system/RTU/src/main.cpp +++ b/src/system/RTU/src/main.cpp @@ -1,16 +1,34 @@ #include "myBase.h" #include "myLog.h" +#include "myFunc.h" #include "myTask.h" #include "app_sys.h" #include "mySystem.h" -LOCAL std::string path = "/mnt/RTU/test/config/"; +LOCAL std::string get_config_path() +{ + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + MY_LOG_E("func_get_process_self_dir failed"); + return ""; + } + return std::string(proc_dir) + "config/SELF_PTL/"; +} + LOCAL std::string self_ptl_cfg = "self_ptl.xml"; int app_cfg_parse() { + std::string path = get_config_path(); + if(path.empty()) + { + MY_LOG_E("get_config_path failed, cannot get config directory"); + return -1; + } + if(0 != self_ptl_cfg_parse(path + self_ptl_cfg)) { MY_LOG_E("self_ptl_cfg_parse failed, path:%s", (path + self_ptl_cfg).c_str()); diff --git a/src/system/libdatacenter/inc/dc_param.h b/src/system/libdatacenter/inc/dc_param.h index 2bf1471..74fa7f3 100644 --- a/src/system/libdatacenter/inc/dc_param.h +++ b/src/system/libdatacenter/inc/dc_param.h @@ -6,12 +6,6 @@ #include -#define DC_PARAM_PATH "/mnt/RTU/test/file/PARAM/param.xml" -void dc_param_cfg_parse(); - -// 洢Ԫݵdc_param_cfg_parse ڴźǰã -void dc_param_metadata_store(const std::string &saddr, const stru_signal_param ¶m); - -// saddr ҲԪݣҵ true򷵻 false -bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_param); +int dc_param_cfg_parse(const std::string &path);void dc_param_metadata_store(const std::string &saddr, const stru_signal_param ¶m); +bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_param); \ No newline at end of file diff --git a/src/system/libdatacenter/inc/dc_signal.h b/src/system/libdatacenter/inc/dc_signal.h index 4024301..457d5f0 100644 --- a/src/system/libdatacenter/inc/dc_signal.h +++ b/src/system/libdatacenter/inc/dc_signal.h @@ -37,7 +37,7 @@ typedef struct stru_signal bool dc_get_param_cfg_change(); void dc_set_param_cfg_change(bool change); -void dc_param_cfg_check(); +void dc_param_cfg_check(const std::string &path); void dc_signal_out_change_check(); diff --git a/src/system/libdatacenter/src/datacenter.cpp b/src/system/libdatacenter/src/datacenter.cpp index 134ef23..c5312b4 100644 --- a/src/system/libdatacenter/src/datacenter.cpp +++ b/src/system/libdatacenter/src/datacenter.cpp @@ -4,14 +4,35 @@ #include "dc_param.h" #include "dc_signal.h" #include "dc_event.h" +#include "myFunc.h" - - +LOCAL std::string g_param_path = ""; +LOCAL std::string datacenter_get_param_path() +{ + char proc_dir[256] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + MY_LOG_E("func_get_process_self_dir failed"); + return ""; + } + return std::string(proc_dir) + "config/PARAM/param.xml"; +} int datacenter_init() { - dc_param_cfg_parse(); + std::string path = datacenter_get_param_path(); + if(path.empty()) + { + MY_LOG_E("datacenter_get_param_path failed, cannot get param path"); + return -1; + } + if(0 != dc_param_cfg_parse(path)) + { + MY_LOG_E("dc_param_cfg_parse failed, path:%s", path.c_str()); + return -1; + } + g_param_path = path; return 0; } @@ -25,6 +46,6 @@ void datacenter_run_100ms() void datacenter_run_1000ms() { - dc_param_cfg_check(); + dc_param_cfg_check(g_param_path); } diff --git a/src/system/libdatacenter/src/dc_param.cpp b/src/system/libdatacenter/src/dc_param.cpp index d136889..98c1a74 100644 --- a/src/system/libdatacenter/src/dc_param.cpp +++ b/src/system/libdatacenter/src/dc_param.cpp @@ -20,22 +20,22 @@ bool dc_param_metadata_lookup(const std::string &saddr, stru_signal_param &out_p return false; } -void dc_param_cfg_parse() +int dc_param_cfg_parse(const std::string &path) { using namespace tinyxml2; XMLDocument doc; - if (XML_SUCCESS != doc.LoadFile(DC_PARAM_PATH)) + if (XML_SUCCESS != doc.LoadFile(path.c_str())) { - MY_LOG_E("failed to load param file: %s", DC_PARAM_PATH); - return; + MY_LOG_E("failed to load param file: %s", path.c_str()); + return -1; } XMLElement *root = doc.RootElement(); if (nullptr == root) { MY_LOG_E("param file has no root element"); - return; + return -1; } // 解析 Ao 段:单值参数(一份值 + 一份缺省值) @@ -185,5 +185,5 @@ void dc_param_cfg_parse() } } - + return 0; } diff --git a/src/system/libdatacenter/src/dc_signal.cpp b/src/system/libdatacenter/src/dc_signal.cpp index 80fdc81..0ca7f20 100644 --- a/src/system/libdatacenter/src/dc_signal.cpp +++ b/src/system/libdatacenter/src/dc_signal.cpp @@ -411,8 +411,6 @@ LOCAL bool dc_signal_ao_add_check(stru_signal *p_signal, const std::string &desc change = true; } - } - if(p_signal->ctrl_type != ctrl_type) { p_signal->ctrl_type = ctrl_type; @@ -443,8 +441,6 @@ LOCAL bool dc_signal_param_add_check(stru_signal *p_signal, const std::string &d change = true; } - } - if(p_signal->ctrl_type != ctrl_type) { p_signal->ctrl_type = ctrl_type; @@ -2101,7 +2097,7 @@ LOCAL stru_signal *dc_find_signal_by_id(uint32_t id, stru_signal_map &dc_signal_ } -void dc_param_cfg_check() +void dc_param_cfg_check(const std::string &path) { if (false == dc_get_param_cfg_change()) return; @@ -2181,14 +2177,14 @@ void dc_param_cfg_check() root->InsertEndChild(ao_elem); root->InsertEndChild(param_elem); - if (XML_SUCCESS == doc.SaveFile(DC_PARAM_PATH)) + if (XML_SUCCESS == doc.SaveFile(path.c_str())) { dc_set_param_cfg_change(false); - MY_LOG_I("param config file saved to %s", DC_PARAM_PATH); + MY_LOG_I("param config file saved to %s", path.c_str()); } else { - MY_LOG_E("failed to save param config file to %s", DC_PARAM_PATH); + MY_LOG_E("failed to save param config file to %s", path.c_str()); } } diff --git a/src/system/libiec/src/iec.cpp b/src/system/libiec/src/iec.cpp index 31ac0ed..6d9b1b7 100644 --- a/src/system/libiec/src/iec.cpp +++ b/src/system/libiec/src/iec.cpp @@ -1,5 +1,6 @@ #include "mySystem.h" #include "myLog.h" +#include "myFunc.h" #include "myCmd.h" #include "iec.h" #include "iec_method.h" @@ -394,7 +395,15 @@ void iec60870_task(uint16_t usGap) int app_iec_init1(void *arg) { - if(0 != iec_cfg_parse("/mnt/RTU/test/config/iec1014.xml")) + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + MY_LOG_E("func_get_process_self_dir failed"); + return -1; + } + std::string cfg_path = std::string(proc_dir) + "config/IEC60870/iec1014.xml"; + + if(0 != iec_cfg_parse(cfg_path.c_str())) { MY_LOG_E("app_iec_init1 iec_cfg_parse failed"); return -1; diff --git a/src/system/libiec61850m/src/iec61850m.cpp b/src/system/libiec61850m/src/iec61850m.cpp index 760feb1..71eb0ca 100644 --- a/src/system/libiec61850m/src/iec61850m.cpp +++ b/src/system/libiec61850m/src/iec61850m.cpp @@ -1,5 +1,6 @@ #include "iec61850m.h" #include "myLog.h" +#include "myFunc.h" #include "myCmd.h" #include "iec61850_client.h" #include "myDatacenter.h" @@ -8,7 +9,18 @@ LOCAL void mms_event_back(void *arg, int ret); -LOCAL const char *g_61850m_prj_path = "/mnt/RTU/test/config/MMS/"; +LOCAL std::string get_base_path() +{ + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + MY_LOG_E("func_get_process_self_dir failed"); + return ""; + } + return std::string(proc_dir); +} + +LOCAL std::string g_61850m_prj_path; typedef struct { @@ -559,6 +571,14 @@ int app_iec61850m_init1(void *arg) dc_signal_out("iec61850m.run_cnt", "iec61850m.run_cnt", DATA_TYPE_U32, &p_app->run_cnt); + std::string base_path = get_base_path(); + if(base_path.empty()) + { + MY_LOG_E("get_base_path failed, cannot get process directory"); + return -1; + } + g_61850m_prj_path = base_path + "config/MMS/"; + if(0 != iec61850m_init()) { LOG_E("iec61850m_init failed"); diff --git a/src/system/libiec61850s/src/iec61850s.cpp b/src/system/libiec61850s/src/iec61850s.cpp index bd86adc..a22fccd 100644 --- a/src/system/libiec61850s/src/iec61850s.cpp +++ b/src/system/libiec61850s/src/iec61850s.cpp @@ -1,10 +1,22 @@ #include "iec61850_common.h" #include "iec61850s.h" #include "myLog.h" +#include "myFunc.h" #include "myCmd.h" #include "myDatacenter.h" #include "parse_xml.h" +LOCAL std::string get_base_path() +{ + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + MY_LOG_E("func_get_process_self_dir failed"); + return ""; + } + return std::string(proc_dir); +} + typedef struct { stru_mms_s_signal_base base; @@ -379,7 +391,15 @@ int iec61850s_signals_init() int app_iec61850s_init1(void *arg) { - if(0 != parse_mms_xml("/mnt/RTU/test/config/MMS/mms_s.xml")) + std::string base_path = get_base_path(); + if(base_path.empty()) + { + MY_LOG_E("get_base_path failed, cannot get process directory"); + return -1; + } + std::string mms_cfg_path = base_path + "config/MMS/mms_s.xml"; + + if(0 != parse_mms_xml(mms_cfg_path.c_str())) { MY_LOG_E("parse_mms_xml failed"); return -1; @@ -387,7 +407,7 @@ int app_iec61850s_init1(void *arg) mms_s_dbg_switch(true); - mms_s_file_path_set("/mnt/RTU/test/"); + mms_s_file_path_set(base_path.c_str()); mms_s_value_update_register(&g_mms_s_value_update_cb); if(NULL == g_mms_s_value_update_cb) { @@ -406,7 +426,14 @@ int app_iec61850s_init2(void *arg) return -1; } - if(0 != mms_s_init("/mnt/RTU/test/config/MMS/PCS.icd", 102)) + std::string base_path = get_base_path(); + if(base_path.empty()) + { + MY_LOG_E("get_base_path failed, cannot get process directory"); + return -1; + } + std::string mms_icd_path = base_path + "config/MMS/PCS.icd"; + if(0 != mms_s_init(mms_icd_path.c_str(), 102)) { MY_LOG_E("mms_s_init failed"); return -1; diff --git a/src/system/libself_ptl/src/method.cpp b/src/system/libself_ptl/src/method.cpp index 979e6b0..9ac8488 100644 --- a/src/system/libself_ptl/src/method.cpp +++ b/src/system/libself_ptl/src/method.cpp @@ -1,6 +1,7 @@ #include "method.h" #include "myIcp67.h" #include "myLog.h" +#include "myFunc.h" #include "myMd5.h" #include "myCmd.h" @@ -9,6 +10,7 @@ #include #include #include +#include #include #include @@ -21,10 +23,21 @@ LOCAL std::vector g_dir_info_vec; -LOCAL std::string g_file_path = "/mnt/RTU/test/file/"; +LOCAL std::string get_base_path() +{ + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + LOG_E("func_get_process_self_dir failed, cannot get process directory, abort"); + exit(1); + } + return std::string(proc_dir); +} + +LOCAL std::string g_file_path = get_base_path() + "file/"; LOCAL std::string g_down_path = "DOWN"; -LOCAL std::string g_zip_path = "/mnt/RTU/test/zip/"; +LOCAL std::string g_zip_path = get_base_path() + "zip/"; LOCAL std::string g_file_name = ""; LOCAL std::string g_zip_name = ""; diff --git a/src/system/libself_ptl/src/self_ptl.cpp b/src/system/libself_ptl/src/self_ptl.cpp index f4be853..ab15927 100644 --- a/src/system/libself_ptl/src/self_ptl.cpp +++ b/src/system/libself_ptl/src/self_ptl.cpp @@ -897,7 +897,7 @@ int self_ptl_do_signal_out(stru_app *p_app) param.max = safeStringToFloat(p_ao->p_param->max); param.step = safeStringToFloat(p_ao->p_param->step); param.unit = p_ao->p_param->unit; - dc_param_metadata_store(p_ao->p_param->base.saddr, param); + // dc_param_metadata_store(p_ao->p_param->base.saddr, param); ret |= dc_signal_ao(p_ao->p_param->base.saddr, p_ao->p_param->base.desc, p_ao->p_param->type, SIGNAL_CTRL_TYPE::SBO_NORMAL, p_ao->vec_p_data[0], p_ao->vec_p_default_data[0], self_ptl_signal_change_callback); } @@ -918,7 +918,7 @@ int self_ptl_do_signal_out(stru_app *p_app) param.max = safeStringToFloat(p_param->p_param->max); param.step = safeStringToFloat(p_param->p_param->step); param.unit = p_param->p_param->unit; - dc_param_metadata_store(p_param->p_param->base.saddr, param); + // dc_param_metadata_store(p_param->p_param->base.saddr, param); ret |= dc_signal_param(p_param->p_param->base.saddr, p_param->p_param->base.desc, p_param->p_param->type, SIGNAL_CTRL_TYPE::SBO_NORMAL, p_param->vec_p_data.data(), p_param->vec_p_default_data.data(), p_param->p_param->num, self_ptl_signal_change_callback); diff --git a/src/system/libweb_server/src/web_server.cpp b/src/system/libweb_server/src/web_server.cpp index 7a34c25..ed58c15 100644 --- a/src/system/libweb_server/src/web_server.cpp +++ b/src/system/libweb_server/src/web_server.cpp @@ -1,6 +1,7 @@ #include "web_server.h" #include "ws_method.h" #include "myLog.h" +#include "myFunc.h" #include "mongoose.h" @@ -83,9 +84,15 @@ LOCAL void *web_server_run(void *arg) } -LOCAL void web_server_init() +LOCAL int web_server_init() { - g_web_root = "/mnt/RTU/test/" + std::string(s_web_root); + char proc_dir[512] = {0}; + if(0 != func_get_process_self_dir(proc_dir, sizeof(proc_dir))) + { + LOG_E("func_get_process_self_dir failed, cannot get process directory"); + return -1; + } + g_web_root = std::string(proc_dir) + s_web_root; mg_mgr_init(&mgr); @@ -94,12 +101,17 @@ LOCAL void web_server_init() pthread_create(&thread_id, NULL, web_server_run, NULL); LOG_I("web_server_init done"); + return 0; } int app_web_server_init1(void *arg) { - web_server_init(); + if(0 != web_server_init()) + { + LOG_E("web_server_init failed"); + return -1; + } return 0; } diff --git a/test/config/iec1014.xml b/test/config/IEC60870/iec1014.xml similarity index 100% rename from test/config/iec1014.xml rename to test/config/IEC60870/iec1014.xml diff --git a/test/file/PARAM/param.xml b/test/config/PARAM/param.xml similarity index 83% rename from test/file/PARAM/param.xml rename to test/config/PARAM/param.xml index beb9ea4..5320328 100644 --- a/test/file/PARAM/param.xml +++ b/test/config/PARAM/param.xml @@ -1,94 +1,94 @@ - + - + - + - + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -96,22 +96,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -128,13 +128,13 @@ - - - - - - - + + + + + + + @@ -143,69 +143,69 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -214,49 +214,49 @@ - - - - - + + + + + - - + + - + - - + + - + - + - + - + - - + + - + @@ -283,19 +283,19 @@ - + - + - + - + - + @@ -329,24 +329,24 @@ - + - - + + - + - + - + @@ -368,8 +368,8 @@ - - + + @@ -377,21 +377,21 @@ - + - + - + @@ -419,12 +419,12 @@ - + - + - - + + @@ -441,18 +441,18 @@ - + - - - + + + - + @@ -463,12 +463,12 @@ - + - + @@ -478,17 +478,17 @@ - - - - + + + + - + - - + + @@ -501,94 +501,94 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - + + - - + + - - + + - - + + - - - - + + + + - - - + + + - + - - - - + + + + - - + + @@ -597,32 +597,32 @@ - + - - - - - + + + + + - - + + - - + + - + - + @@ -656,43 +656,43 @@ - + - - - - - + + + + + - - + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + @@ -704,15 +704,15 @@ - - - - - - - - - + + + + + + + + + @@ -743,77 +743,77 @@ - - - - - - + + + + + + - - - - - - - + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + + @@ -970,81 +970,81 @@ - + - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -1060,513 +1060,514 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - + + + + + + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - + + + + + + - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/test/config/self_ptl.xml b/test/config/SELF_PTL/self_ptl.xml similarity index 100% rename from test/config/self_ptl.xml rename to test/config/SELF_PTL/self_ptl.xml