From e295e25fdf384d544588f97bb5f19382c4ce8e74 Mon Sep 17 00:00:00 2001 From: sunlight <2524828700@qq.com> Date: Tue, 22 Oct 2024 14:25:20 +0800 Subject: [PATCH] updata UI and add warehourse --- .settings/language.settings.xml | 4 +- release/V200/hand_acid_mainboard_ui upadte.HMI | Bin 19270797 -> 19270797 bytes uappbase/appcfg/appcfg.hpp | 8 +- uappbase/bean/config_index_enum.hpp | 85 +- uappbase/service/config_index.cpp | 91 +- uappbase/service/config_index.hpp | 2 +- uappbase/service/config_service.cpp | 2 +- uappbase/service/config_service_utils.cpp | 8 +- ui/ui.h | 1104 +++++++++++---------- ui/usrui.h | 4 +- usrc/service/app_core.cpp | 3 +- usrc/service/page/Page_login.cpp | 4 +- usrc/service/page/page.hpp | 2 + usrc/service/page/submenu/Page_muDeviceInfo.cpp | 4 +- usrc/service/page/submenu/Page_muGetAcidMgr.cpp | 223 +++-- usrc/service/page/submenu/Page_muGetAcidMgr.hpp | 4 + usrc/service/page/submenu/Page_muGetAcidRcord.cpp | 98 ++ usrc/service/page/submenu/Page_muGetAcidRcord.hpp | 25 + usrc/service/pump_ctrl_service.cpp | 7 +- 19 files changed, 935 insertions(+), 743 deletions(-) create mode 100644 usrc/service/page/submenu/Page_muGetAcidRcord.cpp create mode 100644 usrc/service/page/submenu/Page_muGetAcidRcord.hpp diff --git a/.settings/language.settings.xml b/.settings/language.settings.xml index adb54ce..5a79ae1 100644 --- a/.settings/language.settings.xml +++ b/.settings/language.settings.xml @@ -5,7 +5,7 @@ - + @@ -16,7 +16,7 @@ - + diff --git a/release/V200/hand_acid_mainboard_ui upadte.HMI b/release/V200/hand_acid_mainboard_ui upadte.HMI index e286fae65cf75087e9c62aaa00b8a4c1f90931ff..3218e5de52bbbbba84e0380d9f854a7c5f2675ff 100644 GIT binary patch delta 64102 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

AI7_B9 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 D_}1^P delta 30558 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 diff --git a/uappbase/appcfg/appcfg.hpp b/uappbase/appcfg/appcfg.hpp index 97cbf48..672728d 100644 --- a/uappbase/appcfg/appcfg.hpp +++ b/uappbase/appcfg/appcfg.hpp @@ -27,10 +27,10 @@ #define MOTOR_SHAFT false #define STEPMOTOR_IHOLD 10 #define STEPMOTOR_IHOLDDELAY 100 -#define MOTOR_VSTART 50 // 启动速度 -#define MOTOR_A1 15 // 阶段1_加速度 -#define MOTOR_AMAX 30 // 阶段2_加速度 -#define MOTOR_V1 300 // 阶段2_开始速度 +#define MOTOR_VSTART 150 // 启动速度 +#define MOTOR_A1 5 // 阶段1_加速度 +#define MOTOR_AMAX 20 // 阶段2_加速度 +#define MOTOR_V1 500 // 阶段2_开始速度 #define MOTOR_TZEROWAIT 100 // 速度零点点切换时间 #define BLENAME "AciDisp" // BLE名字 diff --git a/uappbase/bean/config_index_enum.hpp b/uappbase/bean/config_index_enum.hpp index f8c4c2b..06acdac 100644 --- a/uappbase/bean/config_index_enum.hpp +++ b/uappbase/bean/config_index_enum.hpp @@ -16,7 +16,7 @@ typedef enum { kusr_passwd2, // 用户2密码 kusr_name3, // 用户3名字 kusr_enable3, // 用户3是否使能 - kusr_passwd3, // 用户3密码 + kusr_passwd3, // 用Ppa户3密码 kusr_name4, // 用户4名字 kusr_enable4, // 用户4是否使能 kusr_passwd4, // 用户4密码 @@ -46,56 +46,6 @@ typedef enum { kcfg_acidName14, // 酸液中预设名字 kcfg_acidName15, // 酸液中预设名字 - kcfg_usr2AcidChooseName0, // 酸液0 选择的名字 - kcfg_usr2AcidChooseName1, // 酸液1 选择的名字 - kcfg_usr2AcidChooseName2, // 酸液2 选择的名字 - kcfg_usr2AcidChooseName3, // 酸液3 选择的名字 - - kcfg_usr3AcidChooseName0, // 酸液0 选择的名字 - kcfg_usr3AcidChooseName1, // 酸液1 选择的名字 - kcfg_usr3AcidChooseName2, // 酸液2 选择的名字 - kcfg_usr3AcidChooseName3, // 酸液3 选择的名字 - - kcfg_usr4AcidChooseName0, // 酸液0 选择的名字 - kcfg_usr4AcidChooseName1, // 酸液1 选择的名字 - kcfg_usr4AcidChooseName2, // 酸液2 选择的名字 - kcfg_usr4AcidChooseName3, // 酸液3 选择的名字 - - kcfg_usr5AcidChooseName0, // 酸液0 选择的名字 - kcfg_usr5AcidChooseName1, // 酸液1 选择的名字 - kcfg_usr5AcidChooseName2, // 酸液2 选择的名字 - kcfg_usr5AcidChooseName3, // 酸液3 选择的名字 - - kcfg_usr6AcidChooseName0, // 酸液0 选择的名字 - kcfg_usr6AcidChooseName1, // 酸液1 选择的名字 - kcfg_usr6AcidChooseName2, // 酸液2 选择的名字 - kcfg_usr6AcidChooseName3, // 酸液3 选择的名字 - - kcfg_usr2AcidCapacityLimite0, - kcfg_usr2AcidCapacityLimite1, - kcfg_usr2AcidCapacityLimite2, - kcfg_usr2AcidCapacityLimite3, - - kcfg_usr3AcidCapacityLimite0, - kcfg_usr3AcidCapacityLimite1, - kcfg_usr3AcidCapacityLimite2, - kcfg_usr3AcidCapacityLimite3, - - kcfg_usr4AcidCapacityLimite0, - kcfg_usr4AcidCapacityLimite1, - kcfg_usr4AcidCapacityLimite2, - kcfg_usr4AcidCapacityLimite3, - - kcfg_usr5AcidCapacityLimite0, - kcfg_usr5AcidCapacityLimite1, - kcfg_usr5AcidCapacityLimite2, - kcfg_usr5AcidCapacityLimite3, - - kcfg_usr6AcidCapacityLimite0, - kcfg_usr6AcidCapacityLimite1, - kcfg_usr6AcidCapacityLimite2, - kcfg_usr6AcidCapacityLimite3, - /*********************************************************************************************************************** * 酸液通道选择名称 * ***********************************************************************************************************************/ @@ -126,11 +76,11 @@ typedef enum { ***********************************************************************************************************************/ kcfg_lockAcidName, // 锁定酸液名称 kcfg_echDitrUpLi, // 每次分配上限设定值 each distri up-limit + kcfg_distrInterval, // 每次分配间隔时间 kcfg_pumpDefVel0, // 泵机默认速度r/min kcfg_pumpDefVel1, // 泵机默认速度r/min kcfg_pumpDefVel2, // 泵机默认速度r/min kcfg_pumpDefVel3, // 泵机默认速度r/min - kcfg_distrInterval, // 每次分配间隔时间 /*********************************************************************************************************************** * 回流参数配置 * @@ -147,6 +97,37 @@ typedef enum { kcfg_bleClientName, + kcfg_recordNum, + kcfg_grantAcidName0, + kcfg_getAcidUsr0, + kcfg_usrAcidChooseName0, // 酸液0 选择的名字 + kcfg_usrAcidCapacityLimite0, + + kcfg_grantAcidName1, + kcfg_getAcidUsr1, + kcfg_usrAcidChooseName1, + kcfg_usrAcidCapacityLimite1, + + kcfg_grantAcidName2, + kcfg_getAcidUsr2, + kcfg_usrAcidChooseName2, // 酸液0 选择的名字 + kcfg_usrAcidCapacityLimite2, + + kcfg_grantAcidName3, + kcfg_getAcidUsr3, + kcfg_usrAcidChooseName3, // 酸液0 选择的名字 + kcfg_usrAcidCapacityLimite3, + + kcfg_grantAcidName4, + kcfg_getAcidUsr4, + kcfg_usrAcidChooseName4, // 酸液0 选择的名字 + kcfg_usrAcidCapacityLimite4, + + kcfg_grantAcidName5, + kcfg_getAcidUsr5, + kcfg_usrAcidChooseName5, // 酸液0 选择的名字 + kcfg_usrAcidCapacityLimite5, + kcfg_max, } config_index_t; diff --git a/uappbase/service/config_index.cpp b/uappbase/service/config_index.cpp index 46f4268..cb191a4 100644 --- a/uappbase/service/config_index.cpp +++ b/uappbase/service/config_index.cpp @@ -56,44 +56,6 @@ static cfg_iterm_info_t cfg_iterm_infos[] = { CFG_ITERM(kcfg_acidName15, kcfgt_str, ACID_DEFAULT_NAME15), // /*********************************************************************************************************************** - * 不同用户酸液预设名称 * - ***********************************************************************************************************************/ - CFG_ITERM(kcfg_usr2AcidChooseName0, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr2AcidChooseName1, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr2AcidChooseName2, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr2AcidChooseName3, kcfgt_str, "未设置"), // - - CFG_ITERM(kcfg_usr3AcidChooseName0, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr3AcidChooseName1, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr3AcidChooseName2, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr3AcidChooseName3, kcfgt_str, "未设置"), // - - CFG_ITERM(kcfg_usr4AcidChooseName0, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr4AcidChooseName1, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr4AcidChooseName2, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr4AcidChooseName3, kcfgt_str, "未设置"), // - - CFG_ITERM(kcfg_usr5AcidChooseName0, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr5AcidChooseName1, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr5AcidChooseName2, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr5AcidChooseName3, kcfgt_str, "未设置"), // - - CFG_ITERM(kcfg_usr6AcidChooseName0, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr6AcidChooseName1, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr6AcidChooseName2, kcfgt_str, "未设置"), // - CFG_ITERM(kcfg_usr6AcidChooseName3, kcfgt_str, "未设置"), // - - CFG_ITERM(kcfg_usr2AcidCapacityLimite0, kcfgt_str, "0"), CFG_ITERM(kcfg_usr2AcidCapacityLimite1, kcfgt_str, "0"), CFG_ITERM(kcfg_usr2AcidCapacityLimite2, kcfgt_str, "0"), CFG_ITERM(kcfg_usr2AcidCapacityLimite3, kcfgt_str, "0"), - - CFG_ITERM(kcfg_usr3AcidCapacityLimite0, kcfgt_str, "0"), CFG_ITERM(kcfg_usr3AcidCapacityLimite1, kcfgt_str, "0"), CFG_ITERM(kcfg_usr3AcidCapacityLimite2, kcfgt_str, "0"), CFG_ITERM(kcfg_usr3AcidCapacityLimite3, kcfgt_str, "0"), - - CFG_ITERM(kcfg_usr4AcidCapacityLimite0, kcfgt_str, "0"), CFG_ITERM(kcfg_usr4AcidCapacityLimite1, kcfgt_str, "0"), CFG_ITERM(kcfg_usr4AcidCapacityLimite2, kcfgt_str, "0"), CFG_ITERM(kcfg_usr4AcidCapacityLimite3, kcfgt_str, "0"), - - CFG_ITERM(kcfg_usr5AcidCapacityLimite0, kcfgt_str, "0"), CFG_ITERM(kcfg_usr5AcidCapacityLimite1, kcfgt_str, "0"), CFG_ITERM(kcfg_usr5AcidCapacityLimite2, kcfgt_str, "0"), CFG_ITERM(kcfg_usr5AcidCapacityLimite3, kcfgt_str, "0"), - - CFG_ITERM(kcfg_usr6AcidCapacityLimite0, kcfgt_str, "0"), CFG_ITERM(kcfg_usr6AcidCapacityLimite1, kcfgt_str, "0"), CFG_ITERM(kcfg_usr6AcidCapacityLimite2, kcfgt_str, "0"), CFG_ITERM(kcfg_usr6AcidCapacityLimite3, kcfgt_str, "0"), - - /*********************************************************************************************************************** * 酸液通道选择名称 * ***********************************************************************************************************************/ CFG_ITERM(kcfg_acidChooseName0, kcfgt_str, "未设置"), // @@ -116,10 +78,10 @@ static cfg_iterm_info_t cfg_iterm_infos[] = { CFG_ITERM(kcfg_mLPR1, kcfgt_float, "0.6900"), // CFG_ITERM(kcfg_mLPR2, kcfgt_float, "0.1350"), // CFG_ITERM(kcfg_mLPR3, kcfgt_float, "0.1350"), // */ - CFG_ITERM(kcfg_mLPR1, kcfgt_float, "1"), // - CFG_ITERM(kcfg_mLPR0, kcfgt_float, "1"), // - CFG_ITERM(kcfg_mLPR2, kcfgt_float, "1"), // - CFG_ITERM(kcfg_mLPR3, kcfgt_float, "1"), // + CFG_ITERM(kcfg_mLPR1, kcfgt_float, "1.0"), // + CFG_ITERM(kcfg_mLPR0, kcfgt_float, "1.0"), // + CFG_ITERM(kcfg_mLPR2, kcfgt_float, "1.0"), // + CFG_ITERM(kcfg_mLPR3, kcfgt_float, "1.0"), // /*********************************************************************************************************************** * 其他配置 * @@ -134,13 +96,6 @@ static cfg_iterm_info_t cfg_iterm_infos[] = { CFG_ITERM(kcfg_pumpDefVel2, kcfgt_int32, PUMPDEFVEL), // CFG_ITERM(kcfg_pumpDefVel3, kcfgt_int32, PUMPDEFVEL), // - CFG_ITERM(kcfg_m0irun, kcfgt_int32, "22"), // - CFG_ITERM(kcfg_m1irun, kcfgt_int32, "22"), // - CFG_ITERM(kcfg_m2irun, kcfgt_int32, "22"), // - CFG_ITERM(kcfg_m3irun, kcfgt_int32, "22"), // - - CFG_ITERM(kcfg_bleClientName, kcfgt_str, ""), // - /*********************************************************************************************************************** * 回流参数配置 * ***********************************************************************************************************************/ @@ -153,6 +108,44 @@ static cfg_iterm_info_t cfg_iterm_infos[] = { CFG_ITERM(kcfg_pipeLengthML1, kcfgt_float, "35.5"), // CFG_ITERM(kcfg_pipeLengthML2, kcfgt_float, "35.5"), // CFG_ITERM(kcfg_pipeLengthML3, kcfgt_float, "35.5"), // + // + + CFG_ITERM(kcfg_m0irun, kcfgt_int32, "22"), // + CFG_ITERM(kcfg_m1irun, kcfgt_int32, "22"), // + CFG_ITERM(kcfg_m2irun, kcfgt_int32, "22"), // + CFG_ITERM(kcfg_m3irun, kcfgt_int32, "22"), // + + CFG_ITERM(kcfg_bleClientName, kcfgt_str, " "), + /*********************************************************************************************************************** + * 领酸记录 * + ***********************************************************************************************************************/ + + CFG_ITERM(kcfg_recordNum, kcfgt_int32, "0"), // + CFG_ITERM(kcfg_grantAcidName0, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr0, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName0, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite0, kcfgt_str, ""), // + CFG_ITERM(kcfg_grantAcidName1, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr1, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName1, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite1, kcfgt_str, ""), // + CFG_ITERM(kcfg_grantAcidName2, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr2, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName2, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite2, kcfgt_str, ""), // + CFG_ITERM(kcfg_grantAcidName3, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr3, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName3, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite3, kcfgt_str, ""), // + CFG_ITERM(kcfg_grantAcidName4, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr4, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName4, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite4, kcfgt_str, ""), // + CFG_ITERM(kcfg_grantAcidName5, kcfgt_str, ""), // + CFG_ITERM(kcfg_getAcidUsr5, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidChooseName5, kcfgt_str, ""), // + CFG_ITERM(kcfg_usrAcidCapacityLimite5, kcfgt_str, ""), // + }; const char *cfgName(int32_t index) { diff --git a/uappbase/service/config_index.hpp b/uappbase/service/config_index.hpp index eb6cf20..12bd09e 100644 --- a/uappbase/service/config_index.hpp +++ b/uappbase/service/config_index.hpp @@ -19,7 +19,7 @@ typedef struct { const char *initval; } cfg_iterm_info_t; -#define CFG_MAX_INDEX 104 +#define CFG_MAX_INDEX 89 const char *cfgName(int32_t index); cfg_iterm_type_t cfgType(int32_t index); diff --git a/uappbase/service/config_service.cpp b/uappbase/service/config_service.cpp index d6c6fef..18f6782 100644 --- a/uappbase/service/config_service.cpp +++ b/uappbase/service/config_service.cpp @@ -3,7 +3,7 @@ #include "uappbase\service\app_event_bus.hpp" // -#define CFG_HEADER 0x12345672 +#define CFG_HEADER 0x12345676 /** * @brief CFG内存使用 * diff --git a/uappbase/service/config_service_utils.cpp b/uappbase/service/config_service_utils.cpp index a41ebef..df35b5c 100644 --- a/uappbase/service/config_service_utils.cpp +++ b/uappbase/service/config_service_utils.cpp @@ -4,7 +4,7 @@ namespace iflytop { float getPumpAppendMl(int chid) { switch (chid) { case 0: - return CH0APPENDML; // + return CH0APPENDML; // case 1: return CH1APPENDML; case 2: @@ -194,6 +194,12 @@ const char* getPasswd(const char* usrname, CfgItermCache* cache) { memcpy(cache, &cfgcache, sizeof(CfgItermCache)); return cache->buf; } + + if (strcmp(usrname, getCfgStr(kusr_name6)) == 0) { + getCfgStr(kusr_passwd6); + memcpy(cache, &cfgcache, sizeof(CfgItermCache)); + return cache->buf; + } return NULL; } diff --git a/ui/ui.h b/ui/ui.h index f7933a9..93ac743 100644 --- a/ui/ui.h +++ b/ui/ui.h @@ -1,540 +1,564 @@ -// pages -#define pg_gvar 0 -#define pg_pStart 1 -#define pg_login 2 -#define pg_main 3 -#define pg_menuAdmin 4 -#define pg_menuAdmin2 5 -#define pg_muneWarehouse 6 -#define pg_menuUsr 7 -#define pg_muInterval 8 -#define pg_muUsrMgr 9 -#define pg_muTmrMgr 10 -#define pg_muAcidType 11 -#define pg_changePasswd 12 -#define pg_muSettings 13 -#define pg_muBleHandSett 14 -#define pg_muMotorSett 15 -#define pg_muPumpSett 16 -#define pg_muDeviceInfo 17 -#define pg_muAudit 18 -#define pg_muGetAcidMgr 19 -#define pg_muPumpTest 20 -#define pg_alert 21 -#define pg_confirm 22 -#define pg_keybAcidCh 23 -#define pg_keybdB 24 -#define pg_keybdAP 25 -#define pg_keybdA 26 -#define pg_keyPasswd 27 -// gvar.objs -#define ob_gvar_gvar 0 -#define ob_gvar_menupageid 1 -#define ob_gvar_bt0 2 -#define ob_gvar_q0 3 -// pStart.objs -#define ob_pStart_pStart 0 -#define ob_pStart_j0 1 -#define ob_pStart_tm0 2 -// login.objs -#define ob_login_login 0 -#define ob_login_blogin 1 -#define ob_login_txtPasswd 2 -#define ob_login_txtUser0 3 -#define ob_login_txtUser1 4 -#define ob_login_txtUser2 5 -#define ob_login_txtUser3 6 -#define ob_login_txtUser4 7 -#define ob_login_txtUser5 8 -#define ob_login_m0 9 -#define ob_login_chooseUsr 10 -#define ob_login_cUsrName 11 -#define ob_login_uen0 12 -#define ob_login_uen1 13 -#define ob_login_uen2 14 -#define ob_login_uen3 15 -#define ob_login_uen4 16 -#define ob_login_uen5 17 -#define ob_login_t2 18 -#define ob_login_txtUser6 19 -#define ob_login_uen6 20 -// main.objs -#define ob_main_main 0 -#define ob_main_RunMode 1 -#define ob_main_acidch0 2 -#define ob_main_MenuButton 3 -#define ob_main_acidname0 4 -#define ob_main_acideval0 5 -#define ob_main_sysInfo 6 -#define ob_main_clock 7 -#define ob_main_acidname0id 8 -#define ob_main_acidname1id 9 -#define ob_main_acidname2id 10 -#define ob_main_acidname3id 11 -#define ob_main_RemoterS 12 -#define ob_main_AcidState 13 -#define ob_main_RunModeVal 14 -#define ob_main_acidch1 15 -#define ob_main_acidname1 16 -#define ob_main_acideval1 17 -#define ob_main_acidch2 18 -#define ob_main_acidname2 19 -#define ob_main_acideval2 20 -#define ob_main_acidch3 21 -#define ob_main_acidname3 22 -#define ob_main_acideval3 23 -#define ob_main_RunModeValUint 24 -#define ob_main_sysInfo1 25 -// menuAdmin.objs -#define ob_menuAdmin_menuAdmin 0 -#define ob_menuAdmin_home 1 -#define ob_menuAdmin_muInterval 2 -#define ob_menuAdmin_changePasswd 3 -#define ob_menuAdmin_muTmrMgr 4 -#define ob_menuAdmin_muAcidType 5 -#define ob_menuAdmin_muUsrMgr 6 -#define ob_menuAdmin_muSettings 7 -#define ob_menuAdmin_muAudit 8 -#define ob_menuAdmin_muDeviceInfo 9 -#define ob_menuAdmin_unlogin 10 -// menuAdmin2.objs -#define ob_menuAdmin2_menuAdmin2 0 -#define ob_menuAdmin2_home 1 -#define ob_menuAdmin2_muInterval 2 -#define ob_menuAdmin2_changePasswd 3 -#define ob_menuAdmin2_muAcidType 4 -#define ob_menuAdmin2_muUsrMgr 5 -#define ob_menuAdmin2_muSettings 6 -#define ob_menuAdmin2_muDeviceInfo 7 -#define ob_menuAdmin2_unlogin 8 -// muneWarehouse.objs -#define ob_muneWarehouse_muneWarehouse 0 -#define ob_muneWarehouse_muAudit 1 -#define ob_muneWarehouse_changePasswd 2 -#define ob_muneWarehouse_muDeviceInfo 3 -#define ob_muneWarehouse_unlogin 4 -#define ob_muneWarehouse_getAcidMgr 5 -// menuUsr.objs -#define ob_menuUsr_menuUsr 0 -#define ob_menuUsr_home 1 -#define ob_menuUsr_muInterval 2 -#define ob_menuUsr_changePasswd 3 -#define ob_menuUsr_muDeviceInfo 4 -#define ob_menuUsr_unlogin 5 -// muInterval.objs -#define ob_muInterval_muInterval 0 -#define ob_muInterval_t0 1 -#define ob_muInterval_t1 2 -#define ob_muInterval_bak 3 -#define ob_muInterval_stAcidInte 4 -#define ob_muInterval_t2 5 -// muUsrMgr.objs -#define ob_muUsrMgr_muUsrMgr 0 -#define ob_muUsrMgr_bak 1 -#define ob_muUsrMgr_usr0name 2 -#define ob_muUsrMgr_unameCol 3 -#define ob_muUsrMgr_usr1name 4 -#define ob_muUsrMgr_usr2name 5 -#define ob_muUsrMgr_usr2en 6 -#define ob_muUsrMgr_usr3name 7 -#define ob_muUsrMgr_usr3en 8 -#define ob_muUsrMgr_usr4name 9 -#define ob_muUsrMgr_usr4en 10 -#define ob_muUsrMgr_usr1Rest 11 -#define ob_muUsrMgr_usr2Rest 12 -#define ob_muUsrMgr_usr3Rest 13 -#define ob_muUsrMgr_usr4Rest 14 -#define ob_muUsrMgr_usr5name 15 -#define ob_muUsrMgr_usr5en 16 -#define ob_muUsrMgr_usr5Rest 17 -#define ob_muUsrMgr_OperaCol 18 -#define ob_muUsrMgr_usr1ReName 19 -#define ob_muUsrMgr_usr2ReName 20 -#define ob_muUsrMgr_usr3ReName 21 -#define ob_muUsrMgr_usr4ReName 22 -#define ob_muUsrMgr_usr5ReName 23 -#define ob_muUsrMgr_t2 24 -#define ob_muUsrMgr_usr6name 25 -#define ob_muUsrMgr_usr6Rest 26 -#define ob_muUsrMgr_usr6ReName 27 -#define ob_muUsrMgr_usr6en 28 -// muTmrMgr.objs -#define ob_muTmrMgr_muTmrMgr 0 -#define ob_muTmrMgr_select0 1 -#define ob_muTmrMgr_select1 2 -#define ob_muTmrMgr_select2 3 -#define ob_muTmrMgr_bak 4 -#define ob_muTmrMgr_select3 5 -#define ob_muTmrMgr_select4 6 -#define ob_muTmrMgr_select5 7 -#define ob_muTmrMgr_b0 8 -#define ob_muTmrMgr_t0 9 -#define ob_muTmrMgr_t2 10 -// muAcidType.objs -#define ob_muAcidType_muAcidType 0 -#define ob_muAcidType_bak 1 -#define ob_muAcidType_t1 2 -#define ob_muAcidType_t2 3 -#define ob_muAcidType_t3 4 -#define ob_muAcidType_t4 5 -#define ob_muAcidType_t5 6 -#define ob_muAcidType_t6 7 -#define ob_muAcidType_t7 8 -#define ob_muAcidType_t8 9 -#define ob_muAcidType_t9 10 -#define ob_muAcidType_t10 11 -#define ob_muAcidType_t11 12 -#define ob_muAcidType_t12 13 -#define ob_muAcidType_t13 14 -#define ob_muAcidType_t14 15 -#define ob_muAcidType_t15 16 -#define ob_muAcidType_t0 17 -// changePasswd.objs -#define ob_changePasswd_changePasswd 0 -#define ob_changePasswd_newPwdTil 1 -#define ob_changePasswd_newPwd 2 -#define ob_changePasswd_newPwdCfmTil 3 -#define ob_changePasswd_newPwdCfm 4 -#define ob_changePasswd_confirm 5 -#define ob_changePasswd_bak 6 -#define ob_changePasswd_oldPwdTil 7 -#define ob_changePasswd_oldPwd 8 -#define ob_changePasswd_t0 9 -// muSettings.objs -#define ob_muSettings_muSettings 0 -#define ob_muSettings_bak 1 -#define ob_muSettings_pageTitle 2 -#define ob_muSettings_pumpTest 3 -#define ob_muSettings_pumpSett 4 -#define ob_muSettings_motorSett 5 -#define ob_muSettings_muBleHandSett 6 -// muBleHandSett.objs -#define ob_muBleHandSett_muBleHandSett 0 -#define ob_muBleHandSett_bak 1 -#define ob_muBleHandSett_pageTitle 2 -#define ob_muBleHandSett_bleCliName 3 -#define ob_muBleHandSett_bleScan 4 -// muMotorSett.objs -#define ob_muMotorSett_muMotorSett 0 -#define ob_muMotorSett_irunTil 1 -#define ob_muMotorSett_bak 2 -#define ob_muMotorSett_irun0 3 -#define ob_muMotorSett_pageTitle 4 -#define ob_muMotorSett_irun1 5 -#define ob_muMotorSett_irun2 6 -#define ob_muMotorSett_irun3 7 -#define ob_muMotorSett_t0 8 -#define ob_muMotorSett_t1 9 -#define ob_muMotorSett_t2 10 -#define ob_muMotorSett_t3 11 -// muPumpSett.objs -#define ob_muPumpSett_muPumpSett 0 -#define ob_muPumpSett_bak 1 -#define ob_muPumpSett_pageTitle 2 -#define ob_muPumpSett_pumpCoefTil 3 -#define ob_muPumpSett_pumpCoef0 4 -#define ob_muPumpSett_pumpCoef1 5 -#define ob_muPumpSett_pumpCoef2 6 -#define ob_muPumpSett_pumpCoef3 7 -#define ob_muPumpSett_pipeLenTil 8 -#define ob_muPumpSett_pipeLen3 9 -#define ob_muPumpSett_addAcidVelTil 10 -#define ob_muPumpSett_addAcidVel3 11 -#define ob_muPumpSett_addAcidVel0 12 -#define ob_muPumpSett_addAcidVel1 13 -#define ob_muPumpSett_addAcidVel2 14 -#define ob_muPumpSett_pipeLen0 15 -#define ob_muPumpSett_pipeLen2 16 -#define ob_muPumpSett_pipeLen1 17 -#define ob_muPumpSett_t0 18 -#define ob_muPumpSett_t1 19 -#define ob_muPumpSett_t2 20 -#define ob_muPumpSett_t3 21 -// muDeviceInfo.objs -#define ob_muDeviceInfo_muDeviceInfo 0 -#define ob_muDeviceInfo_bak 1 -#define ob_muDeviceInfo_softVersTil 2 -#define ob_muDeviceInfo_softVers 3 -#define ob_muDeviceInfo_deviceIdTil 4 -#define ob_muDeviceInfo_deviceId 5 -#define ob_muDeviceInfo_manufaTil 6 -#define ob_muDeviceInfo_manufa 7 -#define ob_muDeviceInfo_t0 8 -// muAudit.objs -#define ob_muAudit_muAudit 0 -#define ob_muAudit_bak 1 -#define ob_muAudit_t0 2 -#define ob_muAudit_t1 3 -#define ob_muAudit_t2 4 -#define ob_muAudit_b0 5 -#define ob_muAudit_b1 6 -#define ob_muAudit_t3 7 -#define ob_muAudit_t4 8 -#define ob_muAudit_b2 9 -// muGetAcidMgr.objs -#define ob_muGetAcidMgr_muGetAcidMgr 0 -#define ob_muGetAcidMgr_UsrName 1 -#define ob_muGetAcidMgr_AcidName 2 -#define ob_muGetAcidMgr_Capacity 3 -#define ob_muGetAcidMgr_acidname2 4 -#define ob_muGetAcidMgr_acidname3 5 -#define ob_muGetAcidMgr_acidname4 6 -#define ob_muGetAcidMgr_acidname5 7 -#define ob_muGetAcidMgr_acideval2 8 -#define ob_muGetAcidMgr_acideval3 9 -#define ob_muGetAcidMgr_acideval4 10 -#define ob_muGetAcidMgr_acideval5 11 -#define ob_muGetAcidMgr_bak 12 -#define ob_muGetAcidMgr_usrName 13 -#define ob_muGetAcidMgr_b1 14 -// muPumpTest.objs -#define ob_muPumpTest_muPumpTest 0 -#define ob_muPumpTest_frompage 1 -#define ob_muPumpTest_fromPopUpWin 2 -#define ob_muPumpTest_bak 3 -#define ob_muPumpTest_statiTrun 4 -#define ob_muPumpTest_t0 5 -#define ob_muPumpTest_statiVolum 6 -#define ob_muPumpTest_statiTrunTil 7 -#define ob_muPumpTest_statiVolumTil 8 -#define ob_muPumpTest_clearStati 9 -#define ob_muPumpTest_forward 10 -#define ob_muPumpTest_bakward 11 -#define ob_muPumpTest_stop 12 -#define ob_muPumpTest_pumpId 13 -#define ob_muPumpTest_pumpIdTil 14 -// alert.objs -#define ob_alert_alert 0 -#define ob_alert_t0 1 -#define ob_alert_confirmkey 2 -#define ob_alert_info 3 -#define ob_alert_frompage 4 -#define ob_alert_t1 5 -// confirm.objs -#define ob_confirm_confirm 0 -#define ob_confirm_t0 1 -#define ob_confirm_canclekey 2 -#define ob_confirm_info 3 -#define ob_confirm_confirmkey 4 -#define ob_confirm_frompage 5 -#define ob_confirm_t1 6 -// keybAcidCh.objs -#define ob_keybAcidCh_keybAcidCh 0 -#define ob_keybAcidCh_bak 1 -#define ob_keybAcidCh_b0 2 -#define ob_keybAcidCh_b1 3 -#define ob_keybAcidCh_b2 4 -#define ob_keybAcidCh_b3 5 -#define ob_keybAcidCh_b4 6 -#define ob_keybAcidCh_b5 7 -#define ob_keybAcidCh_b6 8 -#define ob_keybAcidCh_b7 9 -#define ob_keybAcidCh_b8 10 -#define ob_keybAcidCh_b9 11 -#define ob_keybAcidCh_b10 12 -#define ob_keybAcidCh_b11 13 -#define ob_keybAcidCh_b12 14 -#define ob_keybAcidCh_b13 15 -#define ob_keybAcidCh_b14 16 -#define ob_keybAcidCh_loadpageid 17 -#define ob_keybAcidCh_loadcmpid 18 -#define ob_keybAcidCh_loadcmname 19 -#define ob_keybAcidCh_txt 20 -#define ob_keybAcidCh_fn0 21 -// keybdB.objs -#define ob_keybdB_keybdB 0 -#define ob_keybdB_b0 1 -#define ob_keybdB_show 2 -#define ob_keybdB_b210 3 -#define ob_keybdB_b1 4 -#define ob_keybdB_b2 5 -#define ob_keybdB_b3 6 -#define ob_keybdB_b4 7 -#define ob_keybdB_b5 8 -#define ob_keybdB_b6 9 -#define ob_keybdB_b7 10 -#define ob_keybdB_b8 11 -#define ob_keybdB_b200 12 -#define ob_keybdB_b9 13 -#define ob_keybdB_t2 14 -#define ob_keybdB_b251 15 -#define ob_keybdB_b10 16 -#define ob_keybdB_b11 17 -#define ob_keybdB_b249 18 -#define ob_keybdB_m0 19 -#define ob_keybdB_loadpageid 20 -#define ob_keybdB_tm0 21 -#define ob_keybdB_loadcmpid 22 -#define ob_keybdB_input 23 -#define ob_keybdB_temp 24 -#define ob_keybdB_inputlenth 25 -#define ob_keybdB_temp2 26 -#define ob_keybdB_tempstr 27 -#define ob_keybdB_loadcmname 28 -#define ob_keybdB_clear 29 -// keybdAP.objs -#define ob_keybdAP_keybdAP 0 -#define ob_keybdAP_loadpageid 1 -#define ob_keybdAP_loadcmpid 2 -#define ob_keybdAP_b0 3 -#define ob_keybdAP_b251 4 -#define ob_keybdAP_b210 5 -#define ob_keybdAP_b1 6 -#define ob_keybdAP_b2 7 -#define ob_keybdAP_b3 8 -#define ob_keybdAP_b4 9 -#define ob_keybdAP_b5 10 -#define ob_keybdAP_b6 11 -#define ob_keybdAP_b7 12 -#define ob_keybdAP_b8 13 -#define ob_keybdAP_b200 14 -#define ob_keybdAP_b20 15 -#define ob_keybdAP_b21 16 -#define ob_keybdAP_b22 17 -#define ob_keybdAP_b23 18 -#define ob_keybdAP_b24 19 -#define ob_keybdAP_b25 20 -#define ob_keybdAP_b26 21 -#define ob_keybdAP_b27 22 -#define ob_keybdAP_b28 23 -#define ob_keybdAP_b220 24 -#define ob_keybdAP_b40 25 -#define ob_keybdAP_b41 26 -#define ob_keybdAP_b42 27 -#define ob_keybdAP_b43 28 -#define ob_keybdAP_b44 29 -#define ob_keybdAP_b45 30 -#define ob_keybdAP_b46 31 -#define ob_keybdAP_b230 32 -#define ob_keybdAP_b240 33 -#define ob_keybdAP_b242 34 -#define ob_keybdAP_b241 35 -#define ob_keybdAP_b244 36 -#define ob_keybdAP_b231 37 -#define ob_keybdAP_b245 38 -#define ob_keybdAP_refshowbu 39 -#define ob_keybdAP_tm0 40 -#define ob_keybdAP_input 41 -#define ob_keybdAP_show 42 -#define ob_keybdAP_temp 43 -#define ob_keybdAP_inputlenth 44 -#define ob_keybdAP_b249 45 -#define ob_keybdAP_b201 46 -#define ob_keybdAP_b9 47 -#define ob_keybdAP_b232 48 -#define ob_keybdAP_b243 49 -#define ob_keybdAP_pa_z 50 -#define ob_keybdAP_pa_d 51 -#define ob_keybdAP_pastr1 52 -#define ob_keybdAP_ii 53 -#define ob_keybdAP_loadpa 54 -#define ob_keybdAP_pastr0 55 -#define ob_keybdAP_bp1 56 -#define ob_keybdAP_bp2 57 -#define ob_keybdAP_bp3 58 -#define ob_keybdAP_bp4 59 -#define ob_keybdAP_bp5 60 -#define ob_keybdAP_bp6 61 -#define ob_keybdAP_bp7 62 -#define ob_keybdAP_bp8 63 -#define ob_keybdAP_bp9 64 -#define ob_keybdAP_bp10 65 -#define ob_keybdAP_bp11 66 -#define ob_keybdAP_bp12 67 -#define ob_keybdAP_bp13 68 -#define ob_keybdAP_bp14 69 -#define ob_keybdAP_bp15 70 -#define ob_keybdAP_bp16 71 -#define ob_keybdAP_bp17 72 -#define ob_keybdAP_bp18 73 -#define ob_keybdAP_b10 74 -#define ob_keybdAP_b11 75 -#define ob_keybdAP_tempstr 76 -#define ob_keybdAP_temp2 77 -#define ob_keybdAP_loadcmname 78 -#define ob_keybdAP_clear 79 -#define ob_keybdAP_m0 80 -// keybdA.objs -#define ob_keybdA_keybdA 0 -#define ob_keybdA_loadpageid 1 -#define ob_keybdA_loadcmpid 2 -#define ob_keybdA_b0 3 -#define ob_keybdA_b251 4 -#define ob_keybdA_b210 5 -#define ob_keybdA_b1 6 -#define ob_keybdA_b2 7 -#define ob_keybdA_b3 8 -#define ob_keybdA_b4 9 -#define ob_keybdA_b5 10 -#define ob_keybdA_b6 11 -#define ob_keybdA_b7 12 -#define ob_keybdA_b8 13 -#define ob_keybdA_b200 14 -#define ob_keybdA_b20 15 -#define ob_keybdA_b21 16 -#define ob_keybdA_b22 17 -#define ob_keybdA_b23 18 -#define ob_keybdA_b24 19 -#define ob_keybdA_b25 20 -#define ob_keybdA_b26 21 -#define ob_keybdA_b27 22 -#define ob_keybdA_b28 23 -#define ob_keybdA_b220 24 -#define ob_keybdA_b40 25 -#define ob_keybdA_b41 26 -#define ob_keybdA_b42 27 -#define ob_keybdA_b43 28 -#define ob_keybdA_b44 29 -#define ob_keybdA_b45 30 -#define ob_keybdA_b46 31 -#define ob_keybdA_b230 32 -#define ob_keybdA_b240 33 -#define ob_keybdA_b242 34 -#define ob_keybdA_b241 35 -#define ob_keybdA_b243 36 -#define ob_keybdA_b231 37 -#define ob_keybdA_b244 38 -#define ob_keybdA_refshow 39 -#define ob_keybdA_tm0 40 -#define ob_keybdA_input 41 -#define ob_keybdA_show 42 -#define ob_keybdA_temp 43 -#define ob_keybdA_inputlenth 44 -#define ob_keybdA_b249 45 -#define ob_keybdA_b201 46 -#define ob_keybdA_b9 47 -#define ob_keybdA_b232 48 -#define ob_keybdA_tempstr 49 -#define ob_keybdA_temp2 50 -#define ob_keybdA_loadcmname 51 -#define ob_keybdA_clear 52 -#define ob_keybdA_m0 53 -// keyPasswd.objs -#define ob_keyPasswd_keyPasswd 0 -#define ob_keyPasswd_b0 1 -#define ob_keyPasswd_show 2 -#define ob_keyPasswd_b210 3 -#define ob_keyPasswd_b1 4 -#define ob_keyPasswd_b2 5 -#define ob_keyPasswd_b3 6 -#define ob_keyPasswd_b4 7 -#define ob_keyPasswd_b5 8 -#define ob_keyPasswd_b6 9 -#define ob_keyPasswd_b7 10 -#define ob_keyPasswd_b8 11 -#define ob_keyPasswd_b200 12 -#define ob_keyPasswd_b9 13 -#define ob_keyPasswd_loadpageid 14 -#define ob_keyPasswd_tm0 15 -#define ob_keyPasswd_loadcmpid 16 -#define ob_keyPasswd_input 17 -#define ob_keyPasswd_temp 18 -#define ob_keyPasswd_inputlenth 19 -#define ob_keyPasswd_t2 20 -#define ob_keyPasswd_b251 21 -#define ob_keyPasswd_temp2 22 -#define ob_keyPasswd_tempstr 23 -#define ob_keyPasswd_b249 24 -#define ob_keyPasswd_loadcmname 25 -#define ob_keyPasswd_m0 26 -#define ob_keyPasswd_clear 27 +//pages +#define pg_gvar 0 +#define pg_pStart 1 +#define pg_login 2 +#define pg_main 3 +#define pg_menuAdmin 4 +#define pg_menuAdmin2 5 +#define pg_muneWarehouse 6 +#define pg_menuUsr 7 +#define pg_muInterval 8 +#define pg_muUsrMgr 9 +#define pg_muTmrMgr 10 +#define pg_muAcidType 11 +#define pg_changePasswd 12 +#define pg_muSettings 13 +#define pg_muBleHandSett 14 +#define pg_muMotorSett 15 +#define pg_muPumpSett 16 +#define pg_muDeviceInfo 17 +#define pg_muAudit 18 +#define pg_muGetAcidRcod 19 +#define pg_muGetAcidMgr 20 +#define pg_muPumpTest 21 +#define pg_alert 22 +#define pg_confirm 23 +#define pg_keybAcidCh 24 +#define pg_keybdB 25 +#define pg_keybdAP 26 +#define pg_keybdA 27 +#define pg_keyPasswd 28 +//gvar.objs +#define ob_gvar_gvar 0 +#define ob_gvar_menupageid 1 +#define ob_gvar_bt0 2 +#define ob_gvar_q0 3 +//pStart.objs +#define ob_pStart_pStart 0 +#define ob_pStart_j0 1 +#define ob_pStart_tm0 2 +//login.objs +#define ob_login_login 0 +#define ob_login_blogin 1 +#define ob_login_txtPasswd 2 +#define ob_login_txtUser0 3 +#define ob_login_txtUser1 4 +#define ob_login_txtUser2 5 +#define ob_login_txtUser3 6 +#define ob_login_txtUser4 7 +#define ob_login_txtUser5 8 +#define ob_login_m0 9 +#define ob_login_chooseUsr 10 +#define ob_login_cUsrName 11 +#define ob_login_uen0 12 +#define ob_login_uen1 13 +#define ob_login_uen2 14 +#define ob_login_uen3 15 +#define ob_login_uen4 16 +#define ob_login_uen5 17 +#define ob_login_t2 18 +#define ob_login_txtUser6 19 +#define ob_login_uen6 20 +//main.objs +#define ob_main_main 0 +#define ob_main_RunMode 1 +#define ob_main_acidch0 2 +#define ob_main_MenuButton 3 +#define ob_main_acidname0 4 +#define ob_main_acideval0 5 +#define ob_main_sysInfo 6 +#define ob_main_clock 7 +#define ob_main_acidname0id 8 +#define ob_main_acidname1id 9 +#define ob_main_acidname2id 10 +#define ob_main_acidname3id 11 +#define ob_main_RemoterS 12 +#define ob_main_AcidState 13 +#define ob_main_RunModeVal 14 +#define ob_main_acidch1 15 +#define ob_main_acidname1 16 +#define ob_main_acideval1 17 +#define ob_main_acidch2 18 +#define ob_main_acidname2 19 +#define ob_main_acideval2 20 +#define ob_main_acidch3 21 +#define ob_main_acidname3 22 +#define ob_main_acideval3 23 +#define ob_main_RunModeValUint 24 +#define ob_main_sysInfo1 25 +//menuAdmin.objs +#define ob_menuAdmin_menuAdmin 0 +#define ob_menuAdmin_home 1 +#define ob_menuAdmin_muInterval 2 +#define ob_menuAdmin_changePasswd 3 +#define ob_menuAdmin_muTmrMgr 4 +#define ob_menuAdmin_muAcidType 5 +#define ob_menuAdmin_muUsrMgr 6 +#define ob_menuAdmin_muSettings 7 +#define ob_menuAdmin_muAudit 8 +#define ob_menuAdmin_muDeviceInfo 9 +#define ob_menuAdmin_unlogin 10 +//menuAdmin2.objs +#define ob_menuAdmin2_menuAdmin2 0 +#define ob_menuAdmin2_home 1 +#define ob_menuAdmin2_muInterval 2 +#define ob_menuAdmin2_changePasswd 3 +#define ob_menuAdmin2_muAcidType 4 +#define ob_menuAdmin2_muUsrMgr 5 +#define ob_menuAdmin2_muSettings 6 +#define ob_menuAdmin2_muDeviceInfo 7 +#define ob_menuAdmin2_unlogin 8 +//muneWarehouse.objs +#define ob_muneWarehouse_muneWarehouse 0 +#define ob_muneWarehouse_muAudit 1 +#define ob_muneWarehouse_changePasswd 2 +#define ob_muneWarehouse_muDeviceInfo 3 +#define ob_muneWarehouse_unlogin 4 +#define ob_muneWarehouse_getAcidMgr 5 +//menuUsr.objs +#define ob_menuUsr_menuUsr 0 +#define ob_menuUsr_home 1 +#define ob_menuUsr_muInterval 2 +#define ob_menuUsr_changePasswd 3 +#define ob_menuUsr_muDeviceInfo 4 +#define ob_menuUsr_unlogin 5 +//muInterval.objs +#define ob_muInterval_muInterval 0 +#define ob_muInterval_t0 1 +#define ob_muInterval_t1 2 +#define ob_muInterval_bak 3 +#define ob_muInterval_stAcidInte 4 +#define ob_muInterval_t2 5 +//muUsrMgr.objs +#define ob_muUsrMgr_muUsrMgr 0 +#define ob_muUsrMgr_bak 1 +#define ob_muUsrMgr_usr0name 2 +#define ob_muUsrMgr_unameCol 3 +#define ob_muUsrMgr_usr1name 4 +#define ob_muUsrMgr_usr2name 5 +#define ob_muUsrMgr_usr2en 6 +#define ob_muUsrMgr_usr3name 7 +#define ob_muUsrMgr_usr3en 8 +#define ob_muUsrMgr_usr4name 9 +#define ob_muUsrMgr_usr4en 10 +#define ob_muUsrMgr_usr1Rest 11 +#define ob_muUsrMgr_usr2Rest 12 +#define ob_muUsrMgr_usr3Rest 13 +#define ob_muUsrMgr_usr4Rest 14 +#define ob_muUsrMgr_usr5name 15 +#define ob_muUsrMgr_usr5en 16 +#define ob_muUsrMgr_usr5Rest 17 +#define ob_muUsrMgr_OperaCol 18 +#define ob_muUsrMgr_usr1ReName 19 +#define ob_muUsrMgr_usr2ReName 20 +#define ob_muUsrMgr_usr3ReName 21 +#define ob_muUsrMgr_usr4ReName 22 +#define ob_muUsrMgr_usr5ReName 23 +#define ob_muUsrMgr_t2 24 +#define ob_muUsrMgr_usr6name 25 +#define ob_muUsrMgr_usr6Rest 26 +#define ob_muUsrMgr_usr6ReName 27 +#define ob_muUsrMgr_usr6en 28 +//muTmrMgr.objs +#define ob_muTmrMgr_muTmrMgr 0 +#define ob_muTmrMgr_select0 1 +#define ob_muTmrMgr_select1 2 +#define ob_muTmrMgr_select2 3 +#define ob_muTmrMgr_bak 4 +#define ob_muTmrMgr_select3 5 +#define ob_muTmrMgr_select4 6 +#define ob_muTmrMgr_select5 7 +#define ob_muTmrMgr_b0 8 +#define ob_muTmrMgr_t0 9 +#define ob_muTmrMgr_t2 10 +//muAcidType.objs +#define ob_muAcidType_muAcidType 0 +#define ob_muAcidType_bak 1 +#define ob_muAcidType_t1 2 +#define ob_muAcidType_t2 3 +#define ob_muAcidType_t3 4 +#define ob_muAcidType_t4 5 +#define ob_muAcidType_t5 6 +#define ob_muAcidType_t6 7 +#define ob_muAcidType_t7 8 +#define ob_muAcidType_t8 9 +#define ob_muAcidType_t9 10 +#define ob_muAcidType_t10 11 +#define ob_muAcidType_t11 12 +#define ob_muAcidType_t12 13 +#define ob_muAcidType_t13 14 +#define ob_muAcidType_t14 15 +#define ob_muAcidType_t15 16 +#define ob_muAcidType_t0 17 +//changePasswd.objs +#define ob_changePasswd_changePasswd 0 +#define ob_changePasswd_newPwdTil 1 +#define ob_changePasswd_newPwd 2 +#define ob_changePasswd_newPwdCfmTil 3 +#define ob_changePasswd_newPwdCfm 4 +#define ob_changePasswd_confirm 5 +#define ob_changePasswd_bak 6 +#define ob_changePasswd_oldPwdTil 7 +#define ob_changePasswd_oldPwd 8 +#define ob_changePasswd_t0 9 +//muSettings.objs +#define ob_muSettings_muSettings 0 +#define ob_muSettings_bak 1 +#define ob_muSettings_pageTitle 2 +#define ob_muSettings_pumpTest 3 +#define ob_muSettings_pumpSett 4 +#define ob_muSettings_motorSett 5 +#define ob_muSettings_muBleHandSett 6 +//muBleHandSett.objs +#define ob_muBleHandSett_muBleHandSett 0 +#define ob_muBleHandSett_bak 1 +#define ob_muBleHandSett_pageTitle 2 +#define ob_muBleHandSett_bleCliName 3 +#define ob_muBleHandSett_bleScan 4 +//muMotorSett.objs +#define ob_muMotorSett_muMotorSett 0 +#define ob_muMotorSett_irunTil 1 +#define ob_muMotorSett_bak 2 +#define ob_muMotorSett_irun0 3 +#define ob_muMotorSett_pageTitle 4 +#define ob_muMotorSett_irun1 5 +#define ob_muMotorSett_irun2 6 +#define ob_muMotorSett_irun3 7 +#define ob_muMotorSett_t0 8 +#define ob_muMotorSett_t1 9 +#define ob_muMotorSett_t2 10 +#define ob_muMotorSett_t3 11 +//muPumpSett.objs +#define ob_muPumpSett_muPumpSett 0 +#define ob_muPumpSett_bak 1 +#define ob_muPumpSett_pageTitle 2 +#define ob_muPumpSett_pumpCoefTil 3 +#define ob_muPumpSett_pumpCoef0 4 +#define ob_muPumpSett_pumpCoef1 5 +#define ob_muPumpSett_pumpCoef2 6 +#define ob_muPumpSett_pumpCoef3 7 +#define ob_muPumpSett_pipeLenTil 8 +#define ob_muPumpSett_pipeLen3 9 +#define ob_muPumpSett_addAcidVelTil 10 +#define ob_muPumpSett_addAcidVel3 11 +#define ob_muPumpSett_addAcidVel0 12 +#define ob_muPumpSett_addAcidVel1 13 +#define ob_muPumpSett_addAcidVel2 14 +#define ob_muPumpSett_pipeLen0 15 +#define ob_muPumpSett_pipeLen2 16 +#define ob_muPumpSett_pipeLen1 17 +#define ob_muPumpSett_t0 18 +#define ob_muPumpSett_t1 19 +#define ob_muPumpSett_t2 20 +#define ob_muPumpSett_t3 21 +//muDeviceInfo.objs +#define ob_muDeviceInfo_muDeviceInfo 0 +#define ob_muDeviceInfo_bak 1 +#define ob_muDeviceInfo_softVersTil 2 +#define ob_muDeviceInfo_softVers 3 +#define ob_muDeviceInfo_deviceIdTil 4 +#define ob_muDeviceInfo_deviceId 5 +#define ob_muDeviceInfo_manufaTil 6 +#define ob_muDeviceInfo_manufa 7 +#define ob_muDeviceInfo_t0 8 +//muAudit.objs +#define ob_muAudit_muAudit 0 +#define ob_muAudit_bak 1 +#define ob_muAudit_t0 2 +#define ob_muAudit_t1 3 +#define ob_muAudit_t2 4 +#define ob_muAudit_b0 5 +#define ob_muAudit_b1 6 +#define ob_muAudit_t3 7 +#define ob_muAudit_t4 8 +#define ob_muAudit_b2 9 +//muGetAcidRcod.objs +#define ob_muGetAcidRcod_muGetAcidRcod 0 +#define ob_muGetAcidRcod_name0 1 +#define ob_muGetAcidRcod_usrname0 2 +#define ob_muGetAcidRcod_acidname0 3 +#define ob_muGetAcidRcod_acideval0 4 +#define ob_muGetAcidRcod_bak 5 +#define ob_muGetAcidRcod_t1 6 +#define ob_muGetAcidRcod_t2 7 +#define ob_muGetAcidRcod_t4 8 +#define ob_muGetAcidRcod_t0 9 +#define ob_muGetAcidRcod_acidname1 10 +#define ob_muGetAcidRcod_acidname2 11 +#define ob_muGetAcidRcod_acidname3 12 +#define ob_muGetAcidRcod_acideval1 13 +#define ob_muGetAcidRcod_acideval2 14 +#define ob_muGetAcidRcod_acideval3 15 +#define ob_muGetAcidRcod_usrname1 16 +#define ob_muGetAcidRcod_usrname2 17 +#define ob_muGetAcidRcod_usrname3 18 +#define ob_muGetAcidRcod_usrname4 19 +#define ob_muGetAcidRcod_name1 20 +#define ob_muGetAcidRcod_name2 21 +#define ob_muGetAcidRcod_name3 22 +#define ob_muGetAcidRcod_name4 23 +#define ob_muGetAcidRcod_acidname4 24 +#define ob_muGetAcidRcod_acideval4 25 +#define ob_muGetAcidRcod_clear 26 +//muGetAcidMgr.objs +#define ob_muGetAcidMgr_muGetAcidMgr 0 +#define ob_muGetAcidMgr_UsrName 1 +#define ob_muGetAcidMgr_AcidName 2 +#define ob_muGetAcidMgr_Cap 3 +#define ob_muGetAcidMgr_acidname0 4 +#define ob_muGetAcidMgr_acideval0 5 +#define ob_muGetAcidMgr_bak 6 +#define ob_muGetAcidMgr_usrName 7 +#define ob_muGetAcidMgr_choose_flag 8 +#define ob_muGetAcidMgr_sure 9 +//muPumpTest.objs +#define ob_muPumpTest_muPumpTest 0 +#define ob_muPumpTest_frompage 1 +#define ob_muPumpTest_fromPopUpWin 2 +#define ob_muPumpTest_statiTrun 3 +#define ob_muPumpTest_t0 4 +#define ob_muPumpTest_statiVolum 5 +#define ob_muPumpTest_statiTrunTil 6 +#define ob_muPumpTest_statiVolumTil 7 +#define ob_muPumpTest_clearStati 8 +#define ob_muPumpTest_forward 9 +#define ob_muPumpTest_bakward 10 +#define ob_muPumpTest_stop 11 +#define ob_muPumpTest_pumpId 12 +#define ob_muPumpTest_pumpIdTil 13 +#define ob_muPumpTest_bak 14 +//alert.objs +#define ob_alert_alert 0 +#define ob_alert_t0 1 +#define ob_alert_confirmkey 2 +#define ob_alert_info 3 +#define ob_alert_frompage 4 +#define ob_alert_t1 5 +//confirm.objs +#define ob_confirm_confirm 0 +#define ob_confirm_t0 1 +#define ob_confirm_canclekey 2 +#define ob_confirm_info 3 +#define ob_confirm_confirmkey 4 +#define ob_confirm_frompage 5 +#define ob_confirm_t1 6 +//keybAcidCh.objs +#define ob_keybAcidCh_keybAcidCh 0 +#define ob_keybAcidCh_bak 1 +#define ob_keybAcidCh_b0 2 +#define ob_keybAcidCh_b1 3 +#define ob_keybAcidCh_b2 4 +#define ob_keybAcidCh_b3 5 +#define ob_keybAcidCh_b4 6 +#define ob_keybAcidCh_b5 7 +#define ob_keybAcidCh_b6 8 +#define ob_keybAcidCh_b7 9 +#define ob_keybAcidCh_b8 10 +#define ob_keybAcidCh_b9 11 +#define ob_keybAcidCh_b10 12 +#define ob_keybAcidCh_b11 13 +#define ob_keybAcidCh_b12 14 +#define ob_keybAcidCh_b13 15 +#define ob_keybAcidCh_b14 16 +#define ob_keybAcidCh_loadpageid 17 +#define ob_keybAcidCh_loadcmpid 18 +#define ob_keybAcidCh_loadcmname 19 +#define ob_keybAcidCh_txt 20 +#define ob_keybAcidCh_fn0 21 +//keybdB.objs +#define ob_keybdB_keybdB 0 +#define ob_keybdB_b0 1 +#define ob_keybdB_show 2 +#define ob_keybdB_b210 3 +#define ob_keybdB_b1 4 +#define ob_keybdB_b2 5 +#define ob_keybdB_b3 6 +#define ob_keybdB_b4 7 +#define ob_keybdB_b5 8 +#define ob_keybdB_b6 9 +#define ob_keybdB_b7 10 +#define ob_keybdB_b8 11 +#define ob_keybdB_b200 12 +#define ob_keybdB_b9 13 +#define ob_keybdB_t2 14 +#define ob_keybdB_b251 15 +#define ob_keybdB_b10 16 +#define ob_keybdB_b11 17 +#define ob_keybdB_b249 18 +#define ob_keybdB_m0 19 +#define ob_keybdB_loadpageid 20 +#define ob_keybdB_tm0 21 +#define ob_keybdB_loadcmpid 22 +#define ob_keybdB_input 23 +#define ob_keybdB_temp 24 +#define ob_keybdB_inputlenth 25 +#define ob_keybdB_temp2 26 +#define ob_keybdB_tempstr 27 +#define ob_keybdB_loadcmname 28 +#define ob_keybdB_clear 29 +//keybdAP.objs +#define ob_keybdAP_keybdAP 0 +#define ob_keybdAP_loadpageid 1 +#define ob_keybdAP_loadcmpid 2 +#define ob_keybdAP_b0 3 +#define ob_keybdAP_b251 4 +#define ob_keybdAP_b210 5 +#define ob_keybdAP_b1 6 +#define ob_keybdAP_b2 7 +#define ob_keybdAP_b3 8 +#define ob_keybdAP_b4 9 +#define ob_keybdAP_b5 10 +#define ob_keybdAP_b6 11 +#define ob_keybdAP_b7 12 +#define ob_keybdAP_b8 13 +#define ob_keybdAP_b200 14 +#define ob_keybdAP_b20 15 +#define ob_keybdAP_b21 16 +#define ob_keybdAP_b22 17 +#define ob_keybdAP_b23 18 +#define ob_keybdAP_b24 19 +#define ob_keybdAP_b25 20 +#define ob_keybdAP_b26 21 +#define ob_keybdAP_b27 22 +#define ob_keybdAP_b28 23 +#define ob_keybdAP_b220 24 +#define ob_keybdAP_b40 25 +#define ob_keybdAP_b41 26 +#define ob_keybdAP_b42 27 +#define ob_keybdAP_b43 28 +#define ob_keybdAP_b44 29 +#define ob_keybdAP_b45 30 +#define ob_keybdAP_b46 31 +#define ob_keybdAP_b230 32 +#define ob_keybdAP_b240 33 +#define ob_keybdAP_b242 34 +#define ob_keybdAP_b241 35 +#define ob_keybdAP_b244 36 +#define ob_keybdAP_b231 37 +#define ob_keybdAP_b245 38 +#define ob_keybdAP_refshowbu 39 +#define ob_keybdAP_tm0 40 +#define ob_keybdAP_input 41 +#define ob_keybdAP_show 42 +#define ob_keybdAP_temp 43 +#define ob_keybdAP_inputlenth 44 +#define ob_keybdAP_b249 45 +#define ob_keybdAP_b201 46 +#define ob_keybdAP_b9 47 +#define ob_keybdAP_b232 48 +#define ob_keybdAP_b243 49 +#define ob_keybdAP_pa_z 50 +#define ob_keybdAP_pa_d 51 +#define ob_keybdAP_pastr1 52 +#define ob_keybdAP_ii 53 +#define ob_keybdAP_loadpa 54 +#define ob_keybdAP_pastr0 55 +#define ob_keybdAP_bp1 56 +#define ob_keybdAP_bp2 57 +#define ob_keybdAP_bp3 58 +#define ob_keybdAP_bp4 59 +#define ob_keybdAP_bp5 60 +#define ob_keybdAP_bp6 61 +#define ob_keybdAP_bp7 62 +#define ob_keybdAP_bp8 63 +#define ob_keybdAP_bp9 64 +#define ob_keybdAP_bp10 65 +#define ob_keybdAP_bp11 66 +#define ob_keybdAP_bp12 67 +#define ob_keybdAP_bp13 68 +#define ob_keybdAP_bp14 69 +#define ob_keybdAP_bp15 70 +#define ob_keybdAP_bp16 71 +#define ob_keybdAP_bp17 72 +#define ob_keybdAP_bp18 73 +#define ob_keybdAP_b10 74 +#define ob_keybdAP_b11 75 +#define ob_keybdAP_tempstr 76 +#define ob_keybdAP_temp2 77 +#define ob_keybdAP_loadcmname 78 +#define ob_keybdAP_clear 79 +#define ob_keybdAP_m0 80 +//keybdA.objs +#define ob_keybdA_keybdA 0 +#define ob_keybdA_loadpageid 1 +#define ob_keybdA_loadcmpid 2 +#define ob_keybdA_b0 3 +#define ob_keybdA_b251 4 +#define ob_keybdA_b210 5 +#define ob_keybdA_b1 6 +#define ob_keybdA_b2 7 +#define ob_keybdA_b3 8 +#define ob_keybdA_b4 9 +#define ob_keybdA_b5 10 +#define ob_keybdA_b6 11 +#define ob_keybdA_b7 12 +#define ob_keybdA_b8 13 +#define ob_keybdA_b200 14 +#define ob_keybdA_b20 15 +#define ob_keybdA_b21 16 +#define ob_keybdA_b22 17 +#define ob_keybdA_b23 18 +#define ob_keybdA_b24 19 +#define ob_keybdA_b25 20 +#define ob_keybdA_b26 21 +#define ob_keybdA_b27 22 +#define ob_keybdA_b28 23 +#define ob_keybdA_b220 24 +#define ob_keybdA_b40 25 +#define ob_keybdA_b41 26 +#define ob_keybdA_b42 27 +#define ob_keybdA_b43 28 +#define ob_keybdA_b44 29 +#define ob_keybdA_b45 30 +#define ob_keybdA_b46 31 +#define ob_keybdA_b230 32 +#define ob_keybdA_b240 33 +#define ob_keybdA_b242 34 +#define ob_keybdA_b241 35 +#define ob_keybdA_b243 36 +#define ob_keybdA_b231 37 +#define ob_keybdA_b244 38 +#define ob_keybdA_refshow 39 +#define ob_keybdA_tm0 40 +#define ob_keybdA_input 41 +#define ob_keybdA_show 42 +#define ob_keybdA_temp 43 +#define ob_keybdA_inputlenth 44 +#define ob_keybdA_b249 45 +#define ob_keybdA_b201 46 +#define ob_keybdA_b9 47 +#define ob_keybdA_b232 48 +#define ob_keybdA_tempstr 49 +#define ob_keybdA_temp2 50 +#define ob_keybdA_loadcmname 51 +#define ob_keybdA_clear 52 +#define ob_keybdA_m0 53 +//keyPasswd.objs +#define ob_keyPasswd_keyPasswd 0 +#define ob_keyPasswd_b0 1 +#define ob_keyPasswd_show 2 +#define ob_keyPasswd_b210 3 +#define ob_keyPasswd_b1 4 +#define ob_keyPasswd_b2 5 +#define ob_keyPasswd_b3 6 +#define ob_keyPasswd_b4 7 +#define ob_keyPasswd_b5 8 +#define ob_keyPasswd_b6 9 +#define ob_keyPasswd_b7 10 +#define ob_keyPasswd_b8 11 +#define ob_keyPasswd_b200 12 +#define ob_keyPasswd_b9 13 +#define ob_keyPasswd_loadpageid 14 +#define ob_keyPasswd_tm0 15 +#define ob_keyPasswd_loadcmpid 16 +#define ob_keyPasswd_input 17 +#define ob_keyPasswd_temp 18 +#define ob_keyPasswd_inputlenth 19 +#define ob_keyPasswd_t2 20 +#define ob_keyPasswd_b251 21 +#define ob_keyPasswd_temp2 22 +#define ob_keyPasswd_tempstr 23 +#define ob_keyPasswd_b249 24 +#define ob_keyPasswd_loadcmname 25 +#define ob_keyPasswd_m0 26 +#define ob_keyPasswd_clear 27 diff --git a/ui/usrui.h b/ui/usrui.h index a3f1cd9..6e6209b 100644 --- a/ui/usrui.h +++ b/ui/usrui.h @@ -1,4 +1,4 @@ #pragma once -#define pic_jog_mode 26 -#define pic_continuous_mode 27 +#define pic_jog_mode 27 +#define pic_continuous_mode 28 diff --git a/usrc/service/app_core.cpp b/usrc/service/app_core.cpp index 5d4597b..16b8550 100644 --- a/usrc/service/app_core.cpp +++ b/usrc/service/app_core.cpp @@ -90,8 +90,9 @@ void AppCore::appsetup() { Page_muSettings::ins()->initialize(); Page_muUsrMgr::ins()->initialize(); Page_muDeviceInfo::ins()->initialize(); - Page_muAudit::ins()->initialize(); + // Page_muAudit::ins()->initialize(); Page_muGetAcidMgr::ins()->initialize(); + Page_muGetAcidRcord::ins()->initialize(); Page_muPumpTest::ins()->initialize(); // EventProcesser Page_muPumpSett::ins()->initialize(); diff --git a/usrc/service/page/Page_login.cpp b/usrc/service/page/Page_login.cpp index 83d7422..8c804f0 100644 --- a/usrc/service/page/Page_login.cpp +++ b/usrc/service/page/Page_login.cpp @@ -8,7 +8,7 @@ using namespace iflytop; #define OBJ(name) ob_login_##name #define TAG "Page_login" static CfgItermCache cfgcache; - +// UIS->sendcmd("p[%d].b[%d].picc=%d", PAGE, OBJ(txtUser##i), 2); #define EN_USR(i, enable) \ if (enable) { \ UIS->setTxt(PAGE, OBJ(txtUser##i), usrName[i]); \ @@ -52,6 +52,8 @@ void Page_login::OnPageLoad(OnPageLoadContext* cxt) { UIS->setTxt(PAGE, OBJ(cUsrName), getCfgStr((config_index_t)(kusr_name0))); UIS->setTxt(PAGE, OBJ(txtPasswd), ""); } + + UIS->sendcmd("click m0,0"); } void Page_login::OnInputFieldContentChange(uint8_t bid, const char* text) { if (bid == OBJ(txtPasswd)) { diff --git a/usrc/service/page/page.hpp b/usrc/service/page/page.hpp index 40da6f4..68facda 100644 --- a/usrc/service/page/page.hpp +++ b/usrc/service/page/page.hpp @@ -9,11 +9,13 @@ #include "submenu/Page_muAudit.hpp" #include "submenu/Page_muDeviceInfo.hpp" #include "submenu/Page_muGetAcidMgr.hpp" +#include "submenu/Page_muGetAcidRcord.hpp" #include "submenu/Page_muInterval.hpp" #include "submenu/Page_muPumpTest.hpp" #include "submenu/Page_muSettings.hpp" #include "submenu/Page_muUsrMgr.hpp" + // #include "submenu/Page_muBleHandSett.hpp" #include "submenu/Page_muMotorSett.hpp" diff --git a/usrc/service/page/submenu/Page_muDeviceInfo.cpp b/usrc/service/page/submenu/Page_muDeviceInfo.cpp index 1efd4fa..d558232 100644 --- a/usrc/service/page/submenu/Page_muDeviceInfo.cpp +++ b/usrc/service/page/submenu/Page_muDeviceInfo.cpp @@ -6,8 +6,8 @@ using namespace iflytop; #define TAG "Page_muDeviceInfo" bool Page_muDeviceInfo::isBelongThisPage(int page) { return page == PAGE; } -void Page_muDeviceInfo::OnPageLoad(OnPageLoadContext*cxt) { - UIS->setTxt(PAGE, ob_muDeviceInfo_deviceId, "SN000000"); +void Page_muDeviceInfo::OnPageLoad(OnPageLoadContext* cxt) { + UIS->setTxt(PAGE, ob_muDeviceInfo_deviceId, "SN000001"); UIS->setTxt(PAGE, ob_muDeviceInfo_manufa, "中国黄金"); UIS->setTxt(PAGE, ob_muDeviceInfo_softVers, APP_VERSION); } diff --git a/usrc/service/page/submenu/Page_muGetAcidMgr.cpp b/usrc/service/page/submenu/Page_muGetAcidMgr.cpp index f93d892..a159242 100644 --- a/usrc/service/page/submenu/Page_muGetAcidMgr.cpp +++ b/usrc/service/page/submenu/Page_muGetAcidMgr.cpp @@ -1,100 +1,157 @@ #include "Page_muGetAcidMgr.hpp" using namespace iflytop; -#define PAGE pg_muGetAcidMgr -#define OBJ(name) ob_muGetAcidMgr_##name -#define TAG "Page_muGetAcidMgr" -static CfgItermCache cfgcache; +#define PAGE pg_muGetAcidMgr +#define TAG "Page_muGetAcidMgr" + +typedef struct { + char usrName[20]; + char usr_acid_name[20]; + char usr_acid_cap[20]; +} usr_acid_record_t; -static uint8_t id; +static const char* fmt(const char* fmt, ...) { + static char buf[128]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + return buf; +} +static CfgItermCache cfgcache; -bool Page_muGetAcidMgr::isBelongThisPage(int page) { return page == PAGE; } +static int32_t num; +static usr_acid_record_t usr; +static char buf[2] = {0x5c, 0x72}; +bool Page_muGetAcidMgr::isBelongThisPage(int page) { return page == PAGE; } void Page_muGetAcidMgr::OnPageLoad(OnPageLoadContext* cxt) { // - if (id == 1) { - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr2AcidChooseName0)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr2AcidChooseName1)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr2AcidChooseName2)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr2AcidChooseName3)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval2, getCfgStr(kcfg_usr2AcidCapacityLimite0)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval3, getCfgStr(kcfg_usr2AcidCapacityLimite1)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval4, getCfgStr(kcfg_usr2AcidCapacityLimite2)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval5, getCfgStr(kcfg_usr2AcidCapacityLimite3)); + UIS->sendcmd("b[%d].path=\"\"", ob_muGetAcidMgr_usrName); + if (CS->getBool(kusr_enable2)) { + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, getCfgStr(kusr_name2)); + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, buf); + } + if (CS->getBool(kusr_enable3)) { + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, getCfgStr(kusr_name3)); + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, buf); + } + if (CS->getBool(kusr_enable4)) { + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, getCfgStr(kusr_name4)); + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, buf); + } + if (CS->getBool(kusr_enable5)) { + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, getCfgStr(kusr_name5)); + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, buf); + } + if (CS->getBool(kusr_enable6)) { + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, getCfgStr(kusr_name6)); + UIS->sendcmd("b[%d].path+=\"%s\"", ob_muGetAcidMgr_usrName, buf); + } + + UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname0, usr.usr_acid_name); + UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval0, usr.usr_acid_cap); + if (strcmp(usr.usrName, getCfgStr(kusr_name2)) == 0 || // + strcmp(usr.usrName, getCfgStr(kusr_name3)) == 0 || // + strcmp(usr.usrName, getCfgStr(kusr_name4)) == 0 || // + strcmp(usr.usrName, getCfgStr(kusr_name5)) == 0 || // + strcmp(usr.usrName, getCfgStr(kusr_name6)) == 0) { + UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, usr.usrName); } - // UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, getCfgStr(kusr_name2)); - // UIS->sendcmd("b[%d].path+=%s", ob_muGetAcidMgr_usrName, buf); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, getCfgStr(kusr_name3), buf); - // UIS->sendcmd("b[%d].path+=%s", ob_muGetAcidMgr_usrName); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, getCfgStr(kusr_name4), buf); - // UIS->sendcmd("b[%d].path+=%s", ob_muGetAcidMgr_usrName); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, getCfgStr(kusr_name5), buf); - // UIS->sendcmd("b[%d].path+=%s", ob_muGetAcidMgr_usrName); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_usrName, getCfgStr(kusr_name6), buf); - // UIS->sendcmd("b[%d].path+=%s", ob_muGetAcidMgr_usrName); }; void Page_muGetAcidMgr::OnInputFieldContentChange(uint8_t bid, const char* text) { // if (bid == ob_muGetAcidMgr_usrName) { - if (atoi(text) == 1) { - id = 1; - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr2AcidChooseName0)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr2AcidChooseName1)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr2AcidChooseName2)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr2AcidChooseName3)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval2, getCfgStr(kcfg_usr2AcidCapacityLimite0)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval3, getCfgStr(kcfg_usr2AcidCapacityLimite1)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval4, getCfgStr(kcfg_usr2AcidCapacityLimite2)); - UIS->setTxt(PAGE, ob_muGetAcidMgr_acideval5, getCfgStr(kcfg_usr2AcidCapacityLimite3)); - // } else if (atoi(text) == 2) { - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr3AcidChooseName0)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr3AcidChooseName1)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr3AcidChooseName2)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr3AcidChooseName3)); - // } else if (atoi(text) == 3) { - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr4AcidChooseName0)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr4AcidChooseName1)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr4AcidChooseName2)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr4AcidChooseName3)); - // } else if (atoi(text) == 4) { - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr5AcidChooseName0)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr5AcidChooseName1)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr5AcidChooseName2)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr5AcidChooseName3)); - // } else if (atoi(text) == 5) { - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname2, getCfgStr(kcfg_usr6AcidChooseName0)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname3, getCfgStr(kcfg_usr6AcidChooseName1)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname4, getCfgStr(kcfg_usr6AcidChooseName2)); - // UIS->setTxt(PAGE, ob_muGetAcidMgr_acidname5, getCfgStr(kcfg_usr6AcidChooseName3)); - // } - } + usrSwitching(text); } - if (id == 1) { - if (bid == ob_muGetAcidMgr_acidname2) { - UIS->setTxt(PAGE, bid, text); - CS->setcfgAndFlush(kcfg_usr2AcidChooseName0, text); - } else if (bid == ob_muGetAcidMgr_acidname3) { - UIS->setTxt(PAGE, bid, text); - CS->setcfgAndFlush(kcfg_usr2AcidChooseName1, text); - } else if (bid == ob_muGetAcidMgr_acidname4) { - UIS->setTxt(PAGE, bid, text); - CS->setcfgAndFlush(kcfg_usr2AcidChooseName2, text); - } else if (bid == ob_muGetAcidMgr_acidname5) { - UIS->setTxt(PAGE, bid, text); - CS->setcfgAndFlush(kcfg_usr2AcidChooseName3, text); - } else if (bid == ob_muGetAcidMgr_acideval2) { - UIS->setTxt(PAGE, bid, text); - CS->setcfgAndFlush(kcfg_usr2AcidCapacityLimite0, text); - } else if (bid == ob_muGetAcidMgr_acideval3) { - CS->setcfgAndFlush(kcfg_usr2AcidCapacityLimite1, text); - } else if (bid == ob_muGetAcidMgr_acideval4) { - CS->setcfgAndFlush(kcfg_usr2AcidCapacityLimite2, text); - } else if (bid == ob_muGetAcidMgr_acideval5) { - CS->setcfgAndFlush(kcfg_usr2AcidCapacityLimite3, text); + if (bid == ob_muGetAcidMgr_acideval0) { + float add_ml = atof(text); + if (add_ml < 0.009) { + UIS->alert("设定值不能小于0"); + return; + } else if (add_ml > 5000) { + UIS->alert("设定值不能大于5000"); + return; } } + + if (bid == ob_muGetAcidMgr_acidname0) { + UIS->setTxt(PAGE, bid, text); + memcpy(usr.usr_acid_name, text, 20); + } else if (bid == ob_muGetAcidMgr_acideval0) { + UIS->setTxt(PAGE, bid, text); + memcpy(usr.usr_acid_cap, text, 20); + } } void Page_muGetAcidMgr::OnButton(uint8_t bid, uint8_t val) { // - // if (bid == OBJ(bak)) { - // UIS->chpage(GSM->getMenuPage()); - // } -}; \ No newline at end of file + if (bid == ob_muGetAcidMgr_bak) { + memcpy(usr.usrName, 0, 20); + memcpy(usr.usr_acid_name, 0, 20); + memcpy(usr.usr_acid_cap, 0, 20); + UIS->setVal(PAGE, ob_muGetAcidMgr_choose_flag, 0); + UIS->chpage(GSM->getMenuPage()); + } + if (bid == ob_muGetAcidMgr_sure) { + ZLOGI(TAG, "%d", getCfgInt(kcfg_recordNum)); + switch (getCfgInt(kcfg_recordNum)) { + case 0: + CS->setcfgAndFlush(kcfg_grantAcidName0, getCfgStr(kusr_name1)); + CS->setcfgAndFlush(kcfg_getAcidUsr0, usr.usrName); + CS->setcfgAndFlush(kcfg_usrAcidChooseName0, usr.usr_acid_name); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite0, usr.usr_acid_cap); + break; + case 1: + CS->setcfgAndFlush(kcfg_grantAcidName1, getCfgStr(kusr_name1)); + CS->setcfgAndFlush(kcfg_getAcidUsr1, usr.usrName); + CS->setcfgAndFlush(kcfg_usrAcidChooseName1, usr.usr_acid_name); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite1, usr.usr_acid_cap); + break; + case 2: + CS->setcfgAndFlush(kcfg_grantAcidName2, getCfgStr(kusr_name1)); + CS->setcfgAndFlush(kcfg_getAcidUsr2, usr.usrName); + CS->setcfgAndFlush(kcfg_usrAcidChooseName2, usr.usr_acid_name); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite2, usr.usr_acid_cap); + break; + case 3: + CS->setcfgAndFlush(kcfg_grantAcidName3, getCfgStr(kusr_name1)); + CS->setcfgAndFlush(kcfg_getAcidUsr3, usr.usrName); + CS->setcfgAndFlush(kcfg_usrAcidChooseName3, usr.usr_acid_name); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite3, usr.usr_acid_cap); + break; + case 4: + CS->setcfgAndFlush(kcfg_grantAcidName4, getCfgStr(kusr_name1)); + CS->setcfgAndFlush(kcfg_getAcidUsr4, usr.usrName); + CS->setcfgAndFlush(kcfg_usrAcidChooseName4, usr.usr_acid_name); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite4, usr.usr_acid_cap); + break; + } + UIS->confirmNoCancle("领取成功"); + num++; + CS->setcfgAndFlush(kcfg_recordNum, num); + } +}; + +int32_t Page_muGetAcidMgr::getUsrName(uint8_t id) { + switch (id) {} +} + +void Page_muGetAcidMgr::usrSwitching(const char* usrname) { + if (strcmp(usrname, getCfgStr(kusr_name2)) == 0) { + memcpy(usr.usrName, usrname, 20); + + } else if (strcmp(usrname, getCfgStr(kusr_name3)) == 0) { + memcpy(usr.usrName, usrname, 20); + + } else if (strcmp(usrname, getCfgStr(kusr_name4)) == 0) { + memcpy(usr.usrName, usrname, 20); + + } else if (strcmp(usrname, getCfgStr(kusr_name5)) == 0) { + memcpy(usr.usrName, usrname, 20); + + } else if (strcmp(usrname, getCfgStr(kusr_name6)) == 0) { + memcpy(usr.usrName, usrname, 20); + } + + if (strcmp(usrname, "未选择") != 0) { + UIS->setVal(PAGE, ob_muGetAcidMgr_choose_flag, 1); + } +} \ No newline at end of file diff --git a/usrc/service/page/submenu/Page_muGetAcidMgr.hpp b/usrc/service/page/submenu/Page_muGetAcidMgr.hpp index d2be647..6f4908e 100644 --- a/usrc/service/page/submenu/Page_muGetAcidMgr.hpp +++ b/usrc/service/page/submenu/Page_muGetAcidMgr.hpp @@ -21,5 +21,9 @@ class Page_muGetAcidMgr : public IPageProcesser { virtual void OnPageLoad(OnPageLoadContext* cxt) override; virtual void OnInputFieldContentChange(uint8_t bid, const char* text) override; virtual void OnButton(uint8_t bid, uint8_t val) override; + + private: + int32_t getUsrName(uint8_t id); + void usrSwitching(const char* usrname); }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/service/page/submenu/Page_muGetAcidRcord.cpp b/usrc/service/page/submenu/Page_muGetAcidRcord.cpp new file mode 100644 index 0000000..b0d51a6 --- /dev/null +++ b/usrc/service/page/submenu/Page_muGetAcidRcord.cpp @@ -0,0 +1,98 @@ +#include "Page_muGetAcidRcord.hpp" +using namespace iflytop; + +#define PAGE pg_muGetAcidRcod +#define TAG "Page_muGetAcidRcord" + +typedef struct { + char usrName[20]; + int32_t usr_acid_name[5]; + int32_t usr_acid_cap[5]; +} usr_acid_record_t; + +static const char* fmt(const char* fmt, ...) { + static char buf[128]; + va_list args; + va_start(args, fmt); + vsnprintf(buf, sizeof(buf), fmt, args); + va_end(args); + return buf; +} +static CfgItermCache cfgcache; + +static int32_t id; +static usr_acid_record_t usr; +static char buf[2] = {0x5c, 0x72}; // "\r" + +bool Page_muGetAcidRcord::isBelongThisPage(int page) { return page == PAGE; } + +void Page_muGetAcidRcord::OnPageLoad(OnPageLoadContext* cxt) { // + + UIS->setTxt(PAGE, ob_muGetAcidRcod_name0, getCfgStr(kcfg_grantAcidName0)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_usrname0, getCfgStr(kcfg_getAcidUsr0)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acidname0, getCfgStr(kcfg_usrAcidChooseName0)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acideval0, getCfgStr(kcfg_usrAcidCapacityLimite0)); + + UIS->setTxt(PAGE, ob_muGetAcidRcod_name1, getCfgStr(kcfg_grantAcidName1)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_usrname1, getCfgStr(kcfg_getAcidUsr1)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acidname1, getCfgStr(kcfg_usrAcidChooseName1)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acideval1, getCfgStr(kcfg_usrAcidCapacityLimite1)); + + UIS->setTxt(PAGE, ob_muGetAcidRcod_name2, getCfgStr(kcfg_grantAcidName2)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_usrname2, getCfgStr(kcfg_getAcidUsr2)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acidname2, getCfgStr(kcfg_usrAcidChooseName2)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acideval2, getCfgStr(kcfg_usrAcidCapacityLimite2)); + + UIS->setTxt(PAGE, ob_muGetAcidRcod_name3, getCfgStr(kcfg_grantAcidName3)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_usrname3, getCfgStr(kcfg_getAcidUsr3)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acidname3, getCfgStr(kcfg_usrAcidChooseName3)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acideval3, getCfgStr(kcfg_usrAcidCapacityLimite3)); + + UIS->setTxt(PAGE, ob_muGetAcidRcod_name4, getCfgStr(kcfg_grantAcidName4)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_usrname4, getCfgStr(kcfg_getAcidUsr4)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acidname4, getCfgStr(kcfg_usrAcidChooseName4)); + UIS->setTxt(PAGE, ob_muGetAcidRcod_acideval4, getCfgStr(kcfg_usrAcidCapacityLimite4)); +} + +void Page_muGetAcidRcord::OnInputFieldContentChange(uint8_t bid, const char* text) { // +} +void Page_muGetAcidRcord::OnButton(uint8_t bid, uint8_t val) { // + if (bid == ob_muGetAcidRcod_bak) { + UIS->chpage(GSM->getMenuPage()); + } + if (bid == ob_muGetAcidRcod_clear) { + UIS->alertNoConfirm("清除中...."); + CS->setcfgAndFlush(kcfg_recordNum, "0"); + CS->setcfgAndFlush(kcfg_grantAcidName0, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr0, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName0, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite0, ""); + + CS->setcfgAndFlush(kcfg_grantAcidName1, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr1, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName1, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite1, ""); + + CS->setcfgAndFlush(kcfg_grantAcidName2, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr2, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName2, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite2, ""); + + CS->setcfgAndFlush(kcfg_grantAcidName3, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr3, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName3, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite3, ""); + + CS->setcfgAndFlush(kcfg_grantAcidName4, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr4, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName4, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite4, ""); + + CS->setcfgAndFlush(kcfg_grantAcidName5, ""); + CS->setcfgAndFlush(kcfg_getAcidUsr5, ""); + CS->setcfgAndFlush(kcfg_usrAcidChooseName5, ""); + CS->setcfgAndFlush(kcfg_usrAcidCapacityLimite5, ""); + UIS->chpage(pg_muGetAcidRcod); + UIS->sendcmd("sendme"); + } +}; diff --git a/usrc/service/page/submenu/Page_muGetAcidRcord.hpp b/usrc/service/page/submenu/Page_muGetAcidRcord.hpp new file mode 100644 index 0000000..cc0b32d --- /dev/null +++ b/usrc/service/page/submenu/Page_muGetAcidRcord.hpp @@ -0,0 +1,25 @@ +#pragma once +// +#include "../page_processer.hpp" + +namespace iflytop { +using namespace std; +// page: keybAcidCh +class Page_muGetAcidRcord : public IPageProcesser { + private: + /* data */ + + public: + static Page_muGetAcidRcord* ins() { + static Page_muGetAcidRcord instance; + return &instance; + } + + private: + virtual bool isBelongThisPage(int page) override; + + virtual void OnPageLoad(OnPageLoadContext* cxt) override; + virtual void OnInputFieldContentChange(uint8_t bid, const char* text) override; + virtual void OnButton(uint8_t bid, uint8_t val) override; +}; +} // namespace iflytop \ No newline at end of file diff --git a/usrc/service/pump_ctrl_service.cpp b/usrc/service/pump_ctrl_service.cpp index d4fcf96..53bc3c5 100644 --- a/usrc/service/pump_ctrl_service.cpp +++ b/usrc/service/pump_ctrl_service.cpp @@ -33,7 +33,7 @@ void PumpCtrlService::initialize() { } } }); -m_monitor_thread.init("PumpCtrlServiceMonitor", 1024); + m_monitor_thread.init("PumpCtrlServiceMonitor", 1024); m_monitor_thread.start([this]() { for (size_t i = 0; i < 4; i++) { TMC51X0* motor = m_motors[i]; @@ -76,7 +76,6 @@ m_monitor_thread.init("PumpCtrlServiceMonitor", 1024); } } }); - } #define WAIT_FOR_MOTOR_STOP() \ @@ -245,11 +244,11 @@ void PumpCtrlService::rotate(int32_t mid, int32_t direction) { ZLOGE(TAG, "rotate fail, PumpCtrlService isWorking"); return; } - + tryUpdateMotorSetting(); ValveStateSyncService::ins()->setValveState(1); TMC51X0* cur_motor = m_motors[mid]; // cur_motor->rotate(direction > 0 ? getMxRunRPM(mid) : -getMxRunRPM(mid)); - cur_motor->moveToEnd(direction > 0 ? 1 : -1,getMxRunRPM(mid)); + cur_motor->moveToEnd(direction > 0 ? 1 : -1, getMxRunRPM(mid)); } void PumpCtrlService::stopRotate() { if (isWorking()) {