From 29ea1d52251a3f3294eeedc87336a940d507807b Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 29 Nov 2024 17:18:08 +0800 Subject: [PATCH] update --- .settings/stm32cubeide.project.prefs | 4 +- Core | 2 +- FATFS/Target/ffconf.h | 4 +- STM32F407VETX_FLASH.ld | 4 +- stm32basic | 2 +- uappbase/bean/appevent.hpp | 27 ++++-- uappbase/bean/appevent_type.hpp | 12 --- uappbase/service/app_event_bus.cpp | 18 ++-- uappbase/service/app_event_bus.hpp | 4 +- uappbase/service/gstate_mgr.cpp | 6 +- uappbase/service/gstate_mgr.hpp | 1 + ui/hand_acid_mainboard_ui.HMI | Bin 19157617 -> 19157617 bytes usrc/db/dao/acid_use_record_dao.cpp | 32 +++++-- usrc/db/dao/acid_use_record_dao.hpp | 3 +- usrc/fileoperation/zusb_file_operator.cpp | 1 + usrc/service/app_core.cpp | 4 - usrc/service/pump_ctrl_service.cpp | 8 +- usrc/service/statistics_sync_service.cpp | 23 ++--- usrc/uicontroler/base/page_processer.cpp | 16 ++-- usrc/uicontroler/base/ui_state.cpp | 20 ++++- usrc/uicontroler/base/ui_state.hpp | 5 +- .../sys_event_page_id_processer.cpp | 6 +- usrc/uicontroler/page/home_page.cpp | 1 - usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp | 34 +++++--- usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp | 40 +++++---- usrc/uicontroler/page/mupage/muDateMgr_page.cpp | 3 + .../page/mupage/muReCtrlerBind_page.cpp | 6 +- usrc/uicontroler/page/mupage/muUsrMgr_page.cpp | 97 ++++++++++----------- usrc/uicontroler/page/navi_page.cpp | 30 +++---- usrc/uicontroler/page/popwin_page.cpp | 51 +++++++---- usrc/uicontroler/ui_controler.cpp | 19 +++- usrc/uicontroler/ui_controler.hpp | 15 +--- usrc/uicontroler/ui_state_mgr.cpp | 2 +- 33 files changed, 293 insertions(+), 207 deletions(-) diff --git a/.settings/stm32cubeide.project.prefs b/.settings/stm32cubeide.project.prefs index fdac5ce..98acdbe 100644 --- a/.settings/stm32cubeide.project.prefs +++ b/.settings/stm32cubeide.project.prefs @@ -1,6 +1,6 @@ -2F62501ED4689FB349E356AB974DBE57=D1D13CF78BE39097E724CD6F0136AC59 +2F62501ED4689FB349E356AB974DBE57=6DA8BC97D7B900DE3B85BFD41C1C29CC 635E684B79701B039C64EA45C3F84D30=C8B026EBE17C208F17FB66CE4235156C 66BE74F758C12D739921AEA421D593D3=1 -8DF89ED150041C4CBC7CB9A9CAA90856=D1D13CF78BE39097E724CD6F0136AC59 +8DF89ED150041C4CBC7CB9A9CAA90856=6DA8BC97D7B900DE3B85BFD41C1C29CC DC22A860405A8BF2F2C095E5B6529F12=EC6C4D369FD4F7EABFE17B3222B5F3A0 eclipse.preferences.version=1 diff --git a/Core b/Core index aaf9093..5aebdfa 160000 --- a/Core +++ b/Core @@ -1 +1 @@ -Subproject commit aaf909385c23f3ed678ad802aa9850f3be487922 +Subproject commit 5aebdfa1b7554fe613ffacf817c7d34588885a80 diff --git a/FATFS/Target/ffconf.h b/FATFS/Target/ffconf.h index acca984..8e314d7 100644 --- a/FATFS/Target/ffconf.h +++ b/FATFS/Target/ffconf.h @@ -85,7 +85,7 @@ / Locale and Namespace Configurations /-----------------------------------------------------------------------------*/ -#define _CODE_PAGE 936 +#define _CODE_PAGE 1 /* This option specifies the OEM code page to be used on the target system. / Incorrect setting of the code page can cause a file open failure. / @@ -242,7 +242,7 @@ / can be opened simultaneously under file lock control. Note that the file / lock control is independent of re-entrancy. */ -#define _FS_REENTRANT 1 /* 0:Disable or 1:Enable */ +#define _FS_REENTRANT 0 /* 0:Disable or 1:Enable */ #define _USE_MUTEX 0 /* 0:Disable or 1:Enable */ #define _FS_TIMEOUT 1000 /* Timeout period in unit of time ticks */ diff --git a/STM32F407VETX_FLASH.ld b/STM32F407VETX_FLASH.ld index c9991eb..59f5770 100644 --- a/STM32F407VETX_FLASH.ld +++ b/STM32F407VETX_FLASH.ld @@ -39,8 +39,8 @@ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */ -_Min_Heap_Size = 0x2000; /* required amount of heap */ -_Min_Stack_Size = 0x2000; /* required amount of stack */ +_Min_Heap_Size = 0x1000; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ /* Memories definition */ MEMORY diff --git a/stm32basic b/stm32basic index cba5845..f9a31c5 160000 --- a/stm32basic +++ b/stm32basic @@ -1 +1 @@ -Subproject commit cba5845768a21a847d3e2b528107f65516399c90 +Subproject commit f9a31c529c42e35ea439998f8b6292ed0f885c70 diff --git a/uappbase/bean/appevent.hpp b/uappbase/bean/appevent.hpp index e652293..bafbd9a 100644 --- a/uappbase/bean/appevent.hpp +++ b/uappbase/bean/appevent.hpp @@ -17,24 +17,39 @@ extern "C" { // typedef struct { // } AppEvent; + +struct AcidStateChangeEvent { + enum AcidStatChangeEventType subtype; + + // 添加 + uint8_t addCh; + float addChVal; + + // 使用 + float useVal[4]; +}; +typedef struct AcidStateChangeEvent AcidStateChangeEvent_t; +typedef enum AcidStatChangeEventType AcidStatChangeEventType_t; + class AppEvent { public: AppEventType_t type; - std::function onfnc = nullptr; + std::function onfnc = nullptr; + const char* onfncmask = nullptr; private: - uint8_t buf[50]; + uint8_t buf[30]; UIEvent* uieventpointer = nullptr; public: - AppEvent() { memset(buf, 0, sizeof(buf)); } + AppEvent() { + static_assert(sizeof(buf) >= sizeof(AcidStateChangeEvent_t), "buf size must be larger than AcidStateChangeEvent_t"); + memset(buf, 0, sizeof(buf)); + } public: int getBufSize() { return sizeof(buf); } - void setBleName(const char* name) { strncpy((char*)buf, name, sizeof(buf)); } - char* getBleName() { return (char*)buf; } - void setPageChangeTo(int32_t page) { *(int32_t*)buf = page; } int32_t getPageChangeTo() { return *(int32_t*)buf; } diff --git a/uappbase/bean/appevent_type.hpp b/uappbase/bean/appevent_type.hpp index 8e4581c..238904d 100644 --- a/uappbase/bean/appevent_type.hpp +++ b/uappbase/bean/appevent_type.hpp @@ -26,18 +26,6 @@ enum AppEventType { enum AcidStatChangeEventType { kACID_USE, kACID_STORAGE }; -struct AcidStateChangeEvent { - enum AcidStatChangeEventType subtype; - - // 添加 - uint8_t addCh; - float addChVal; - - // 使用 - float useVal[4]; -}; typedef enum AppEventType AppEventType_t; -typedef enum AcidStatChangeEventType AcidStatChangeEventType_t; -typedef struct AcidStateChangeEvent AcidStateChangeEvent_t; diff --git a/uappbase/service/app_event_bus.cpp b/uappbase/service/app_event_bus.cpp index 83f03ba..74a0bc3 100644 --- a/uappbase/service/app_event_bus.cpp +++ b/uappbase/service/app_event_bus.cpp @@ -7,6 +7,7 @@ using namespace iflytop; using namespace std; static QueueHandle_t xQueue; static AppEvent eventtxcache; +static const char* curOnFuncMask = nullptr; #define TAG "AppEventBus" void AppEventBus::initialize() { @@ -14,7 +15,7 @@ void AppEventBus::initialize() { thread.init("AppEventBus", 1024); int AppEventSize = sizeof(AppEvent); - xQueue = xQueueCreate(20, AppEventSize); + xQueue = xQueueCreate(10, AppEventSize); thread.start([this]() { static AppEvent eventrxcache; @@ -24,7 +25,11 @@ void AppEventBus::initialize() { if (eventrxcache.type == KAE_callOnAppEventBusLoop) { if (eventrxcache.onfnc) { + // ZLOGI(TAG, "DO FUNC CB %s", eventrxcache.onfncmask); + curOnFuncMask = eventrxcache.onfncmask; eventrxcache.onfnc(); + curOnFuncMask = nullptr; + // ZLOGI(TAG, "DO FUNC CB %s END", eventrxcache.onfncmask); } continue; } @@ -54,9 +59,9 @@ void AppEventBus::pushEvent(const AppEvent& event) { } } -void AppEventBus::pushEventBlock(AppEvent* event) { +void AppEventBus::pushEventBlock(const char* cxtmark, AppEvent* event) { bool evenProcessed = false; - callFnInEventBus([&]() { + callFnInEventBus(cxtmark, [&]() { for (int i = 0; i < cbNum; i++) { m_cbs[i](event); } @@ -81,10 +86,11 @@ void AppEventBus::pushPageChangeEvent(uint8_t toPage) { pushEvent(eventtxcache); } -void AppEventBus::callFnInEventBus(function onfnc) { +void AppEventBus::callFnInEventBus(const char* mask, function onfnc) { zlock_guard lck(lock); - eventtxcache.type = KAE_callOnAppEventBusLoop; - eventtxcache.onfnc = onfnc; + eventtxcache.type = KAE_callOnAppEventBusLoop; + eventtxcache.onfnc = onfnc; + eventtxcache.onfncmask = mask; pushEvent(eventtxcache); } diff --git a/uappbase/service/app_event_bus.hpp b/uappbase/service/app_event_bus.hpp index b69a1b7..59f0312 100644 --- a/uappbase/service/app_event_bus.hpp +++ b/uappbase/service/app_event_bus.hpp @@ -34,10 +34,10 @@ class AppEventBus { void pushAcidStatStorageEvent(uint8_t ch, float chVal); void pushAcidStatDisplayChangeEvent(); - void pushEventBlock(AppEvent* event); + void pushEventBlock(const char* cxtmark, AppEvent* event); // - void callFnInEventBus(function onfnc); + void callFnInEventBus(const char* mask,function onfnc); bool isInAppEventThread(); }; diff --git a/uappbase/service/gstate_mgr.cpp b/uappbase/service/gstate_mgr.cpp index 0508c4a..2484332 100644 --- a/uappbase/service/gstate_mgr.cpp +++ b/uappbase/service/gstate_mgr.cpp @@ -55,7 +55,6 @@ void GStateMgr::setRemoterS(int32_t state, const char* name) { ZLOGI(TAG, "on ble connect -> client name:%s", name); strncpy(m_RemoterName, name, sizeof(m_RemoterName)); // strncpy(appevent.d.bleName, name, sizeof(appevent.d.bleName)); - appevent.setBleName(name); appevent.type = kAE_RemoterConnectedEvent; } else { @@ -64,6 +63,11 @@ void GStateMgr::setRemoterS(int32_t state, const char* name) { } AppEventBus::ins()->pushEvent(appevent); } +const char* GStateMgr::getRemoterName() { + zlock_guard l(m_mutex); + return m_RemoterName; +} + void GStateMgr::setRunMode(hand_acid_mode_t mode) { zlock_guard l(m_mutex); if (m_RunMode != mode) { diff --git a/uappbase/service/gstate_mgr.hpp b/uappbase/service/gstate_mgr.hpp index 0533b60..f629c5e 100644 --- a/uappbase/service/gstate_mgr.hpp +++ b/uappbase/service/gstate_mgr.hpp @@ -76,6 +76,7 @@ class GStateMgr { */ void setRemoterS(int32_t state, const char* name); + const char* getRemoterName(); /** * @brief 设备工作状态 diff --git a/ui/hand_acid_mainboard_ui.HMI b/ui/hand_acid_mainboard_ui.HMI index 8536dea9bd4138df7cb1573caafc5f6dd8e75777..3e89ec4c750632fb532aac99486df7f95c7b6a07 100644 GIT binary patch delta 2745 zcmeIyc~n$Y90%}whhZ6D8WCndG$CUS7Gj`y1Vy$AwbUjnC~XnU(sFrE2Zcmj<_Dyv z;(}MyKnwQ`!+g0Qic2P`X=SLGU}=_xl3MQdy?`C{^hba6hn>?q=kuL;_uV(|zVn@P z>x*X^>VYS%=S4g&&cGNyP{oF&3>n_ONAI4j>DU#lFnNs~tYXYC>w#8X20AsIV@Mya zup}4Ux8KBP*YK@D4L^dDdna}up|IXg@&P7Zx?Q)>DUx+;ucX|520rrxRF)Wk8Nez` zJa31I*EK!vc#O&lG0d$UQcLH!xOvXL>}49yhMpV4+}mMXy62YBzUi#mwegk?o!Sq< zjK7Y)0qN|Fsqr-Yo@GQnmd@Pe5~Q6~Yyi|5BAtsncXUeVlg^?s%&pa_tiu29HD=-B zz(<Pyej^Yj8GQ8K+qFHt}0PcPFe^eVkZ z11N=3X&}8$gXj%$$$pY>+UgEx*}^kHmV)41Ztn19pvDJ>ZzQR_dlt5DjG)QhZsikCJ$P%ZJ~ zCj`GR!7PS5?3SWlSB%^sdd4b7F(Fj7@MLYh!=A&%0Arf7$U9~C;=M#|f#Mx~c+19H zdv8|mI&gZ&)jcOmD!1+4xAvco39pW-k66=LwaiU+WQn?bGHW3@_6_=?q{T+=BaTL> z)jUDO$0}w~*-5pC+K6n6SXA#gFT&jH^NR9p9+yZUnPHf-y2fr1 zfl+EZ5gMc##N<%bsHH}!Lv=h_9I`2KTqh=aq?vi9n3wPG({A%eL^#Vq&Oj z<^=*TJYR&xWsffkoMq$=5!Nb4FIvZ_p>oA3V${yu!rY8l6-L4+utOS*)-qzpTwJAJ zUYfB)8#{^oL-2l4b5Gh!HSEU~zUF-)H@eH+^>2E$H}!NL8}sd6SKraAc1N!fcl6rl zU+PuV6ew-~tDTgsaJUN3tn5yjE4hr9%e117jf*#z7X0hY2tdCV>M8 zvLOd@;a!*vQ(!8*2h(6W%z!+Y3A11}%z=EE3j*dr0nCR5un^vdLMVbouoymo51|;A zz*1NS%V7nqgjKK_*1%d=2PLo`K7vx%03X9f(BKo;1e;+CY=tt|2Ia6Fc0dK}gk7*3 z_Q0pG7e0f1Pzj&IemDRJ;R`qfhv7^33ciLT@C{VKQ8)(2p&CxWw{Q|_pcYQSckn%& zhBNR3oP{6ZCpZT`!!J+==ivg>!>@1=F2QB^4St6!a22k>b+`dH;THTcHPOarfDD}s zCmDJf&N5tNxXN&oVUXc2!$XFr45N$(WSC?$li?+!xeRX^J~GTQEHZp$_{nG?!(T>A e8LebID5JHE02zTY9+J^U#>2ck(H6u*bbkUJoQlx^ delta 14828 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 KczPGkiS{4X^w}l= diff --git a/usrc/db/dao/acid_use_record_dao.cpp b/usrc/db/dao/acid_use_record_dao.cpp index f2c44b4..1cef3e2 100644 --- a/usrc/db/dao/acid_use_record_dao.cpp +++ b/usrc/db/dao/acid_use_record_dao.cpp @@ -73,7 +73,7 @@ void AcidUseRecordDao::addRecord(const acid_use_record_t& record) { m_table->recordNum, ACIDUSERCORD_RECORD_NUM); } -void AcidUseRecordDao::updateLastRecord(uint16_t val0, uint16_t val1, uint16_t val2, uint16_t val3) { +void AcidUseRecordDao::updateLastRecord(float val0, float val1, float val2, float val3) { zlock_guard l(lock); int recordNum = m_table->recordNum - 1; if (recordNum < 0) { @@ -86,10 +86,32 @@ void AcidUseRecordDao::updateLastRecord(uint16_t val0, uint16_t val1, uint16_t v return; } - m_table->record[recordNum].ch0take0p1ml = val0; - m_table->record[recordNum].ch1take0p1ml = val1; - m_table->record[recordNum].ch2take0p1ml = val2; - m_table->record[recordNum].ch3take0p1ml = val3; + m_table->record[recordNum].ch0take0p1ml = val0 * 10 + 0.5; + m_table->record[recordNum].ch1take0p1ml = val1 * 10 + 0.5; + m_table->record[recordNum].ch2take0p1ml = val2 * 10 + 0.5; + m_table->record[recordNum].ch3take0p1ml = val3 * 10 + 0.5; + + ZLOGI(TAG, " [%d/%d]", m_table->recordNum, ACIDUSERCORD_RECORD_NUM); + + // ZLOGI(TAG, "update record %d/%d/%d %02d:%02d:%02d %d %d %d %d %d (%d/%d)", // + // m_table->record[recordNum].date.year, m_table->record[recordNum].date.month, m_table->record[recordNum].date.day, m_table->record[recordNum].date.hours, + // m_table->record[recordNum].date.minutes, m_table->record[recordNum].date.seconds, m_table->record[recordNum].usrid, m_table->record[recordNum].ch0take0p1ml, + // m_table->record[recordNum].ch1take0p1ml, m_table->record[recordNum].ch2take0p1ml, m_table->record[recordNum].ch3take0p1ml, m_table->recordNum, ACIDUSERCORD_RECORD_NUM); +} + +void AcidUseRecordDao::updateTheLastRecordDate(zdate_t* date) { + zlock_guard l(lock); + int recordNum = m_table->recordNum - 1; + if (recordNum < 0) { + ZLOGW(TAG, "no record to update"); + return; + } + + if (m_table->record[recordNum].dirty == 0) { + ZLOGW(TAG, "record not dirty"); + return; + } + m_table->record[recordNum].date = *date; } void AcidUseRecordDao::syncTheLastRecord() { diff --git a/usrc/db/dao/acid_use_record_dao.hpp b/usrc/db/dao/acid_use_record_dao.hpp index cd97cef..9dc42d3 100644 --- a/usrc/db/dao/acid_use_record_dao.hpp +++ b/usrc/db/dao/acid_use_record_dao.hpp @@ -31,7 +31,8 @@ class AcidUseRecordDao { static acid_use_record_table_t* getRecordTable(); static void addRecord(const acid_use_record_t& record); - static void updateLastRecord(uint16_t val0, uint16_t val1, uint16_t val2, uint16_t val3); + static void updateTheLastRecordDate(zdate_t* date); + static void updateLastRecord(float volml0, float volml1, float volml2, float volml3); static void setDirtyRecordClean(); static void syncTheLastRecord(); diff --git a/usrc/fileoperation/zusb_file_operator.cpp b/usrc/fileoperation/zusb_file_operator.cpp index 3da23e1..b8ee821 100644 --- a/usrc/fileoperation/zusb_file_operator.cpp +++ b/usrc/fileoperation/zusb_file_operator.cpp @@ -77,6 +77,7 @@ static const char* FRESULT_TO_STR(FRESULT result) { static void setErrorInfo(bool suc, const char* info) { memset(m_errorInfo, 0, sizeof(m_errorInfo)); strncpy(m_errorInfo, info, sizeof(m_errorInfo)); + m_operationSuc = suc; } void ZUSBFileOperator::mount() { diff --git a/usrc/service/app_core.cpp b/usrc/service/app_core.cpp index a261002..8437ca9 100644 --- a/usrc/service/app_core.cpp +++ b/usrc/service/app_core.cpp @@ -146,7 +146,6 @@ void AppCore::initialize() { MX_FATFS_Init(); MX_USB_HOST_Init(); - ZUSBFileOperator::mount(); /*********************************************************************************************************************** * 开始蓝牙扫描 * @@ -170,9 +169,6 @@ void AppCore::initialize() { if (suc) break; } } - - GStateMgr::ins()->setLogin(0, "admin", kadmin); - AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); UIControler::ins()->chpage(pg_login, true); /*********************************************************************************************************************** diff --git a/usrc/service/pump_ctrl_service.cpp b/usrc/service/pump_ctrl_service.cpp index 9ab6437..92a361c 100644 --- a/usrc/service/pump_ctrl_service.cpp +++ b/usrc/service/pump_ctrl_service.cpp @@ -287,11 +287,11 @@ void PumpCtrlService::setCurrentPosAsZero(int32_t mid) { void PumpCtrlService::doMotorsMoveByOnce() { int32_t step[MOTOR_NUM] = {0}; float distriVal[MOTOR_NUM] = {0}; - for (size_t i = 0; i < MOTOR_NUM; i++) { - step[i] = AcidChCfgDao::getCfg(i)->acidEachDistriVal * 1000 + AcidChCfgDao::getCfg(i)->chAppendMl * 1000; - distriVal[i] = AcidChCfgDao::getCfg(i)->acidEachDistriVal; - if (!GSM->getPumpSelectState(i)) { + if (GSM->getPumpSelectState(i)) { + step[i] = AcidChCfgDao::getCfg(i)->acidEachDistriVal * 1000 + AcidChCfgDao::getCfg(i)->chAppendMl * 1000; + distriVal[i] = AcidChCfgDao::getCfg(i)->acidEachDistriVal; + } else { step[i] = 0; distriVal[i] = 0; } diff --git a/usrc/service/statistics_sync_service.cpp b/usrc/service/statistics_sync_service.cpp index 7a551bc..fcf5ba8 100644 --- a/usrc/service/statistics_sync_service.cpp +++ b/usrc/service/statistics_sync_service.cpp @@ -56,7 +56,7 @@ void StatisticsSyncService::onLogin() { GStateMgr::ins()->setAcidUsed(3, 0); acid_use_record_t record = {0}; - AppHal::rtc_set(&record.date); + AppHal::rtc_get(&record.date); record.usrid = GStateMgr::ins()->getUserId(); record.dirty = 1; @@ -69,7 +69,7 @@ void StatisticsSyncService::doSyncOnUnLoginOrPowerOff() { */ if (!AppEventBus::ins()->isInAppEventThread()) { bool callfinished = false; - AppEventBus::ins()->callFnInEventBus([&]() { + AppEventBus::ins()->callFnInEventBus("SYNC ON UNLOGIN OR POWEROFF", [&]() { doSyncOnUnLoginOrPowerOff(); callfinished = true; }); @@ -77,6 +77,7 @@ void StatisticsSyncService::doSyncOnUnLoginOrPowerOff() { while (!callfinished) { osDelay(30); } + return; } float used0 = GStateMgr::ins()->getAcidUsed(0); @@ -99,6 +100,7 @@ void StatisticsSyncService::doSyncOnUnLoginOrPowerOff() { } else { ZLOGI(TAG, "updateLastRecordSync : %f %f %f %f", used0, used1, used2, used3); AcidUseRecordDao::updateLastRecord(used0, used1, used2, used3); + AcidUseRecordDao::setDirtyRecordClean(); AcidUseRecordDao::syncTheLastRecord(); } @@ -126,6 +128,8 @@ void StatisticsSyncService::onAddAcidStorage(int ch, float addChVal) { AppEventBus::ins()->pushAcidStatDisplayChangeEvent(); } void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal2, float useVal3) { + ZLOGI(TAG, "use acid %.2f %.2f %.2f %.2f", useVal0, useVal1, useVal2, useVal3); + float now0 = GStateMgr::ins()->getAcidUsed(0); float now1 = GStateMgr::ins()->getAcidUsed(1); float now2 = GStateMgr::ins()->getAcidUsed(2); @@ -146,19 +150,18 @@ void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal GStateMgr::ins()->setAcidRemain(2, remain2 - useVal2 > 0 ? remain2 - useVal2 : 0); GStateMgr::ins()->setAcidRemain(3, remain3 - useVal3 > 0 ? remain3 - useVal3 : 0); - // AcidUseRecordDao::updateLastRecord(now0 + useVal0, now1 + useVal1, now2 + useVal2, now3 + useVal3); - // DeviceAcidVolumeDao::updateAcidVolume(0, GStateMgr::ins()->getAcidRemain(0)); - // DeviceAcidVolumeDao::updateAcidVolume(1, GStateMgr::ins()->getAcidRemain(1)); - // DeviceAcidVolumeDao::updateAcidVolume(2, GStateMgr::ins()->getAcidRemain(2)); - // DeviceAcidVolumeDao::updateAcidVolume(3, GStateMgr::ins()->getAcidRemain(3)); - - // m_dataIsDirty = true; + AcidUseRecordDao::updateLastRecord(now0 + useVal0, now1 + useVal1, now2 + useVal2, now3 + useVal3); + DeviceAcidVolumeDao::updateAcidVolume(0, GStateMgr::ins()->getAcidRemain(0)); + DeviceAcidVolumeDao::updateAcidVolume(1, GStateMgr::ins()->getAcidRemain(1)); + DeviceAcidVolumeDao::updateAcidVolume(2, GStateMgr::ins()->getAcidRemain(2)); + DeviceAcidVolumeDao::updateAcidVolume(3, GStateMgr::ins()->getAcidRemain(3)); + m_dataIsDirty = true; AppEventBus::ins()->pushAcidStatDisplayChangeEvent(); } static void syncTimer(const void* tid) { - AppEventBus::ins()->callFnInEventBus([]() { + AppEventBus::ins()->callFnInEventBus("SYNC USAGE", []() { if (m_dataIsDirty) { AcidUseRecordDao::syncTheLastRecord(); DeviceAcidVolumeDao::sync(); diff --git a/usrc/uicontroler/base/page_processer.cpp b/usrc/uicontroler/base/page_processer.cpp index ddb1ad2..d544e60 100644 --- a/usrc/uicontroler/base/page_processer.cpp +++ b/usrc/uicontroler/base/page_processer.cpp @@ -1,11 +1,13 @@ #include "page_processer.hpp" using namespace iflytop; -#define TAG "PageMgr" +#define TAG "PageProcesser" IPageProcesser* m_pages[50]; int m_pageNum; +static bool enDebugFlag = false; + static void regPage(IPageProcesser* page) { if (m_pageNum > 50) { return; @@ -39,22 +41,22 @@ void IPageProcesser::initialize() { if (uiEvent->eventId == kpt_sys_event_page_id) { OnPageLoadContext cxt = {0}; - ZLOGI(TAG, "page %s(%d)-%d load", pageName, thisPage, uiEvent->bid); + ZLOGD(TAG, "[%s(%d)-%d] onLoad", pageName, thisPage, uiEvent->bid); onPageLoad(&cxt); } else if (uiEvent->eventId == kpt_button_event) { - ZLOGI(TAG, "page %s(%d)-%d onClickRelease(button),val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); + ZLOGD(TAG, "[%s(%d)-%d] onClickRelease(button),val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); onClickRelease(uiEvent->bid, uiEvent->val, uiEvent->text); } else if (uiEvent->eventId == kpt_usr_def_clik_release_event) { - ZLOGI(TAG, "page %s(%d)-%d onClickRelease(usrDef),val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); + ZLOGD(TAG, "[%s(%d)-%d] onClickRelease(usrDef),val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); onClickRelease(uiEvent->bid, uiEvent->val, uiEvent->text); } else if (uiEvent->eventId == kpt_page_back_event) { - ZLOGI(TAG, "page %s(%d)-%d onBackKey", pageName, thisPage, uiEvent->bid); + ZLOGD(TAG, "[%s(%d)-%d] onBackKey", pageName, thisPage, uiEvent->bid); onBackKey(); } else if (uiEvent->eventId == kpt_inputfield_content_selected_change_event) { - ZLOGI(TAG, "page %s(%d)-%d onInputFieldContentChange val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); + ZLOGD(TAG, "[%s(%d)-%d] onInputFieldContentChange val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); onInputFieldContentChange(uiEvent->bid, uiEvent->val, uiEvent->text); } else if (uiEvent->eventId == kpt_inputfield_content_change_event) { - ZLOGI(TAG, "page %s(%d)-%d onInputFieldContentChange val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); + ZLOGD(TAG, "[%s(%d)-%d] onInputFieldContentChange val %d text %s", pageName, thisPage, uiEvent->bid, uiEvent->val, uiEvent->text); onInputFieldContentChange(uiEvent->bid, uiEvent->val, uiEvent->text); } // diff --git a/usrc/uicontroler/base/ui_state.cpp b/usrc/uicontroler/base/ui_state.cpp index 215e4e5..d4f23f9 100644 --- a/usrc/uicontroler/base/ui_state.cpp +++ b/usrc/uicontroler/base/ui_state.cpp @@ -4,6 +4,7 @@ using namespace iflytop; static QueueHandle_t xQueue; static int popInfoNum; static bool loadingState; +static const char* loadingInfo = ""; static zmutex lock = {"UIPublicState-Lock"}; #define TAG "UIPublicState" @@ -42,7 +43,20 @@ bool UIPublicState::popUIPopInfoBlock(UIPopInfo_t* info) { int UIPublicState::getPopInfoNum() { return popInfoNum; } -bool UIPublicState::setLoadingState(bool state) { loadingState = state; - return true; +bool UIPublicState::setLoadingState(bool state, const char* info) { + zlock_guard guard(lock); + loadingState = state; + loadingInfo = info; + if (!state) { + loadingInfo = ""; + } + return true; +} +bool UIPublicState::getLoadingState() { + zlock_guard guard(lock); + return loadingState; +} +const char* UIPublicState::getLoadingInfo() { + zlock_guard guard(lock); + return loadingInfo; } -bool UIPublicState::getLoadingState() { return loadingState; } diff --git a/usrc/uicontroler/base/ui_state.hpp b/usrc/uicontroler/base/ui_state.hpp index 3c01b93..dc0891f 100644 --- a/usrc/uicontroler/base/ui_state.hpp +++ b/usrc/uicontroler/base/ui_state.hpp @@ -24,7 +24,8 @@ class UIPublicState { static bool popUIPopInfoBlock(UIPopInfo_t* info); static int getPopInfoNum(); - static bool setLoadingState(bool state); - static bool getLoadingState(); + static bool setLoadingState(bool state, const char* info); + static bool getLoadingState(); + static const char* getLoadingInfo() ; }; } // namespace iflytop \ No newline at end of file diff --git a/usrc/uicontroler/event_proceesser/sys_event_page_id_processer.cpp b/usrc/uicontroler/event_proceesser/sys_event_page_id_processer.cpp index db50763..edb49b9 100644 --- a/usrc/uicontroler/event_proceesser/sys_event_page_id_processer.cpp +++ b/usrc/uicontroler/event_proceesser/sys_event_page_id_processer.cpp @@ -13,8 +13,8 @@ void SysEventPageIdProcesser::process(uint8_t* indata, size_t len, UIEvent* resu if (UIStateMgr::ins()->nowPage == indata[1]) { // page not change } else { - UIStateMgr::ins()->lastPage = UIStateMgr::ins()->nowPage; - UIStateMgr::ins()->nowPage = indata[1]; - ZLOGI(TAG, "page change from %d to %d ", UIStateMgr::ins()->lastPage, UIStateMgr::ins()->nowPage); + // UIStateMgr::ins()->lastPage = UIStateMgr::ins()->nowPage; + // UIStateMgr::ins()->nowPage = indata[1]; + // ZLOGI(TAG, "page change from %d to %d ", UIStateMgr::ins()->lastPage, UIStateMgr::ins()->nowPage); } } diff --git a/usrc/uicontroler/page/home_page.cpp b/usrc/uicontroler/page/home_page.cpp index 60817f8..f4df1b5 100644 --- a/usrc/uicontroler/page/home_page.cpp +++ b/usrc/uicontroler/page/home_page.cpp @@ -82,7 +82,6 @@ class HomePage : public IPageProcesser { } virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { - ZLOGI(TAG, "OnButton bid:%d val:%d", bid, val); if (PumpCtrlService::ins()->isWorking()) { UIS->popWarningWin("工作中,请稍后再操作"); return; diff --git a/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp index cf2a0be..db8d868 100644 --- a/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp +++ b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp @@ -116,8 +116,7 @@ class MuAcidDistMgrPage : public IPageProcesser { return; } - { - UILoadingCxt ctx; + UIControler::ins()->doBlockWork("添加记录中...", [this]() { acid_distrubt_record_t record; AppHal::rtc_get(&record.date); record.distrubtAcidUsrid = GStateMgr::ins()->getUserId(); @@ -130,7 +129,7 @@ class MuAcidDistMgrPage : public IPageProcesser { GStateMgr::ins()->setAcidRemain(m_chId, m_volumeVal); AppEventBus::ins()->pushAcidStatStorageEvent(m_chId, m_volumeVal); resetForm(); - } + }); } /*********************************************************************************************************************** @@ -140,15 +139,16 @@ class MuAcidDistMgrPage : public IPageProcesser { if (bid == ob_muAcidDistMgr_clearRecord) { UIControler::ins()->popConfirmWin("您确定要清空领酸记录?", [this](bool isOk) { if (isOk) { - UILoadingCxt loadingCxt; - AcidDistrubtRecordDao::clearRecord(); - resetForm(); - updateTableVolume(); + UIControler::ins()->doBlockWork("清空领酸记录...", [this]() { + AcidDistrubtRecordDao::clearRecord(); + UIControler::ins()->chpage(thisPage, true); + }); } }); } if (bid == ob_muAcidDistMgr_export) { + UIControler::ins()->doBlockWork("导出数据...", [this]() { doExportData(); }); } } virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override { @@ -238,11 +238,16 @@ class MuAcidDistMgrPage : public IPageProcesser { AppHal::rtc_get(&date); auto* table = AcidDistrubtRecordDao::getRecordTable(); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "挂载U盘..."); + osDelay(300); ZUSBFileOperator::mount(); CHECK_USB_FILE_OPERATION(); - // ZUSBFileOperator::openNew("%04d%02d%02d%02d%02d%02d_ACID_DIST_RECORD.csv", date.year, date.month, date.day, date.hours, date.minutes, date.seconds); - ZUSBFileOperator::openNew("ACID_DIST_RECORD.csv"); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "创建文件..."); + osDelay(300); + // https://www.jyshare.com/front-end/3602/ + // ZUSBFileOperator::openNew("\u9886\u9178\u8bb0\u5f55.csv"); + ZUSBFileOperator::openNew("1.csv"); CHECK_USB_FILE_OPERATION(); ZUSBFileOperator::write("ID,时间,发放人,领酸人,酸液名称,容量\n"); @@ -251,10 +256,11 @@ class MuAcidDistMgrPage : public IPageProcesser { for (int i = 0; i < table->recordNum; i++) { auto* record = &table->record[i]; + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "导出记录(%d/%d)...", i + 1, table->recordNum); + osDelay(3); ZUSBFileOperator::write( // - "%d,%d/%d/%d %02d:%02d:%02d,%s,%s,%s,%d\n", // - record->id, // + "%d/%d/%d %02d:%02d:%02d,%s,%s,%s,%d\n", // record->date.year, record->date.month, record->date.day, record->date.hours, record->date.minutes, record->date.seconds, // UserDao::getUserByIdNotNull(record->distrubtAcidUsrid)->name, // UserDao::getUserByIdNotNull(record->takeAcidUsrid)->name, // @@ -262,12 +268,18 @@ class MuAcidDistMgrPage : public IPageProcesser { record->distribuVolume); CHECK_USB_FILE_OPERATION(); } + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "关闭文件..."); + osDelay(300); ZUSBFileOperator::close(); CHECK_USB_FILE_OPERATION(); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "卸载U盘..."); + osDelay(300); ZUSBFileOperator::unmount(); CHECK_USB_FILE_OPERATION(); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "导出完成"); + osDelay(300); } }; diff --git a/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp b/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp index cb8874b..1705c25 100644 --- a/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp @@ -73,15 +73,16 @@ class MuAcidUseMgrPage : public IPageProcesser { if (bid == ob_muAcidUseRecd_clearRecord) { UIControler::ins()->popConfirmWin("您是否确定要清空用酸记录?", [this](bool isOk) { if (isOk) { - UILoadingCxt loadingCxt; - AcidUseRecordDao::clearRecord(); - initPage(); + UIControler::ins()->doBlockWork("清空记录中....", [this]() { + AcidUseRecordDao::clearRecord(); + UIControler::ins()->chpage(thisPage, true); + }); } }); } else if (bid == ob_muAcidUseRecd_export) { - doExportData(); + UIControler::ins()->doBlockWork("导出数据...", [this]() { doExportData(); }); } } virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override {} @@ -99,17 +100,12 @@ class MuAcidUseMgrPage : public IPageProcesser { AcidUseRcordPage page; AcidUseRecordDao::getRecord(0, &page); for (int i = 0; i < page.recordNum; i++) { - if (i == 0) { - // 最新一条记录属于当前登录用户的实时状态,不显示 - continue; - } - setText(cfgbid_table[i + 1].val[0], "%d/%d/%d %02d:%02d:%02d", page.record[i]->date.year, page.record[i]->date.month, page.record[i]->date.day, page.record[i]->date.hours, page.record[i]->date.minutes, page.record[i]->date.seconds); setText(cfgbid_table[i + 1].val[1], "%s(%s)", UserDao::getUserByIdNotNull(page.record[i]->usrid)->name, page.record[i]->dirty ? "*" : ""); setText(cfgbid_table[i + 1].val[2], "%.1f", page.record[i]->ch0take0p1ml / 10.0); - setText(cfgbid_table[i + 1].val[3], "%.1f", page.record[i]->ch0take0p1ml / 10.0); - setText(cfgbid_table[i + 1].val[4], "%.1f", page.record[i]->ch0take0p1ml / 10.0); - setText(cfgbid_table[i + 1].val[5], "%.1f", page.record[i]->ch0take0p1ml / 10.0); + setText(cfgbid_table[i + 1].val[3], "%.1f", page.record[i]->ch1take0p1ml / 10.0); + setText(cfgbid_table[i + 1].val[4], "%.1f", page.record[i]->ch2take0p1ml / 10.0); + setText(cfgbid_table[i + 1].val[5], "%.1f", page.record[i]->ch3take0p1ml / 10.0); } for (int i = page.recordNum; i < 8; i++) { @@ -135,11 +131,16 @@ class MuAcidUseMgrPage : public IPageProcesser { AppHal::rtc_get(&date); auto* table = AcidUseRecordDao::getRecordTable(); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "挂载U盘..."); + osDelay(300); ZUSBFileOperator::mount(); CHECK_USB_FILE_OPERATION(); // ZUSBFileOperator::openNew("%04d%02d%02d%02d%02d%02d_ACID_USAGE_RECORD.csv", date.year, date.month, date.day, date.hours, date.minutes, date.seconds); - ZUSBFileOperator::openNew("ACID_USAGE_RECORD.csv", date.year, date.month, date.day, date.hours, date.minutes, date.seconds); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "创建文件..."); + // https://www.jyshare.com/front-end/3602/ + // ZUSBFileOperator::openNew("\u7528\u9178\u8bb0\u5f55.csv"); + ZUSBFileOperator::openNew("0.csv"); CHECK_USB_FILE_OPERATION(); ZUSBFileOperator::write("ID,时间,用户,正常退出,%s(ml),%s(ml),%s(ml),%s(ml)\n", AcidChCfgDao::getCfg(0)->acidChooseName, AcidChCfgDao::getCfg(1)->acidChooseName, AcidChCfgDao::getCfg(2)->acidChooseName, AcidChCfgDao::getCfg(3)->acidChooseName); @@ -152,22 +153,29 @@ class MuAcidUseMgrPage : public IPageProcesser { // 最后一条记录属于当前登录用户的实时状态,不导出 break; } + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "导出记录(%d/%d)...", i + 1, table->recordNum); + osDelay(3); ZUSBFileOperator::write( // - "%d,%d/%d/%d %02d:%02d:%02d,%s,%s,%.2f,%.2f,%.2f,%.2f\n", // - record->id, // + "%d/%d/%d %02d:%02d:%02d,%s,%s,%.2f,%.2f,%.2f,%.2f\n", // record->date.year, record->date.month, record->date.day, record->date.hours, record->date.minutes, record->date.seconds, // UserDao::getUserByIdNotNull(record->usrid)->name, // record->dirty ? "0" : "1", // record->ch0take0p1ml / 10.0, record->ch1take0p1ml / 10.0, record->ch2take0p1ml / 10.0, record->ch3take0p1ml / 10.0); CHECK_USB_FILE_OPERATION(); } - + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "关闭文件..."); + osDelay(300); ZUSBFileOperator::close(); CHECK_USB_FILE_OPERATION(); + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "卸载U盘..."); + osDelay(300); ZUSBFileOperator::unmount(); CHECK_USB_FILE_OPERATION(); + + UIControler::ins()->setTxt(pg_popwin, ob_popwin_loadingText, "导出完成"); + osDelay(300); } }; diff --git a/usrc/uicontroler/page/mupage/muDateMgr_page.cpp b/usrc/uicontroler/page/mupage/muDateMgr_page.cpp index fbe0c82..448adca 100644 --- a/usrc/uicontroler/page/mupage/muDateMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muDateMgr_page.cpp @@ -6,6 +6,7 @@ // #include "db/dao/acid_ch_cfg_dao.hpp" #include "db/dao/device_setting_dao.hpp" +#include "usrc/db/dao/acid_use_record_dao.hpp" // #include "service/pump_ctrl_service.hpp" @@ -138,6 +139,8 @@ class MuDateMgrPage : public IPageProcesser { ZLOGI(TAG, "set rtc %d-%d-%d %d:%d", date.year, date.month, date.day, date.hours, date.minutes); AppHal::rtc_set(&date); UIControler::ins()->setrtc(&date); + AcidUseRecordDao::updateTheLastRecordDate(&date); + UIControler::ins()->popInfoWin("时间设置成功", [](bool) { UIControler::ins()->chpage(pg_navi, true); }); } } diff --git a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp index 9f629af..7f9851b 100644 --- a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp +++ b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp @@ -40,7 +40,7 @@ class muReCtrlerBindPage : public IPageProcesser { if (keyEvent == hand_acid_remoter_kevent_change_next_mode) { setText(ob_muReCtlerBind_bleEvent, "模式切换"); } - if (keyEvent == hand_acid_remoter_kevent_reflux) { //连按两次为回流事件I + if (keyEvent == hand_acid_remoter_kevent_reflux) { // 连按两次为回流事件I setText(ob_muReCtlerBind_bleEvent, "液路回流"); } if (keyEvent == hand_acid_remoter_kevent_preFilling) { @@ -99,9 +99,9 @@ class muReCtrlerBindPage : public IPageProcesser { if (event->type == kAE_RemoterConnectedEvent) { ZLOGI(TAG, "ble connect success"); setText(ob_muReCtlerBind_infoWin, "%s", "扫描到设备"); - DeviceSettingDao::updateBleClientName(event->getBleName()); + DeviceSettingDao::updateBleClientName(GStateMgr::ins()->getRemoterName()); setText(ob_muReCtlerBind_infoWin, "%s", "绑定成功"); - setText(ob_muReCtlerBind_bleCliName, "%s", event->getBleName()); + setText(ob_muReCtlerBind_bleCliName, "%s", GStateMgr::ins()->getRemoterName()); m_scaning = false; } } diff --git a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp index f2424ac..c4f85a7 100644 --- a/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muUsrMgr_page.cpp @@ -196,78 +196,75 @@ class MuUsrMgr : public IPageProcesser { UIControler::ins()->popWarningWin("用户数量已达上限"); return; } - - { - UILoadingCxt cxt; // 进入加载状态 + UIControler::ins()->doBlockWork("添加用户...", [this]() { UserDao::addUser(); UIControler::ins()->popInfoWin("添加成功"); fillUsrStateUICache(); syncUIUsrTableState(); fillEditContext(UserDao::getUsersTableNum() - 1); syncEditContext(); - } + }); } void delUsr() { ZLOGI(TAG, "delUsr"); - UILoadingCxt cxt; // 进入加载状态 - - // 删除用户 - do { - user_t* user = UserDao::getUserById(m_editContext.usrId); - if (user == nullptr) { - ZLOGE(TAG, "user not exist ,find by id %d", m_editContext.usrId); - UIControler::ins()->popWarningWin("用户不存在"); - break; - } - - if (user->builtIn) { - ZLOGE(TAG, "user is builtIn ,find by id %d", m_editContext.usrId); - UIControler::ins()->popWarningWin("内置管理员用户不能删除"); - break; - } - UserDao::delUser(user->id); - } while (false); - UIControler::ins()->popInfoWin("删除成功"); + user_t* user = UserDao::getUserById(m_editContext.usrId); + if (user == nullptr) { + ZLOGE(TAG, "user not exist ,find by id %d", m_editContext.usrId); + UIControler::ins()->popWarningWin("用户不存在"); + return; + } - fillUsrStateUICache(); - syncUIUsrTableState(); + if (user->builtIn) { + ZLOGE(TAG, "user is builtIn ,find by id %d", m_editContext.usrId); + UIControler::ins()->popWarningWin("内置管理员用户不能删除"); + return; + } - fillEditContext(-1); - syncEditContext(); + UIControler::ins()->doBlockWork("删除用户...", [this, user]() { + UserDao::delUser(user->id); + fillUsrStateUICache(); + syncUIUsrTableState(); + fillEditContext(-1); + syncEditContext(); + }); } void saveUsr() { ZLOGI(TAG, "saveUsr"); // 保存 - if (m_editContext.editDirty) { - UILoadingCxt cxt; // 进入加载状态 + user_t* user = UserDao::getUserById(m_editContext.usrId); - user_t* user = UserDao::getUserById(m_editContext.usrId); - if (user == nullptr) { - ZLOGE(TAG, "user not exist ,find by id %d", m_editContext.usrId); - UIControler::ins()->popWarningWin("用户不存在"); - return; - } + if (user == nullptr) { + ZLOGE(TAG, "user not exist ,find by id %d", m_editContext.usrId); + UIControler::ins()->popWarningWin("用户不存在"); + return; + } - if (strlen(m_editContext.name) == 0) { - UIControler::ins()->popWarningWin("用户名不能为空"); - return; - } + if (!m_editContext.editDirty) { + UIControler::ins()->popInfoWin("用户无修改"); + return; + } - if (user->builtIn && !m_editContext.role->isEq(UserRole::admin)) { - UIControler::ins()->popWarningWin("内置管理员用户不能修改普用户类型"); - return; - } + if (strlen(m_editContext.name) == 0) { + UIControler::ins()->popWarningWin("用户名不能为空"); + return; + } - if (strcmp(m_editContext.name, user->name) != 0) { - if (AcidDistrubtRecordDao::getRecordNum() > 0 || AcidUseRecordDao::getRecordNum() > 1) { - UIControler::ins()->popWarningWin("无法修改用户名,<领酸记录>或<用酸记录>不为空."); - return; - } + if (user->builtIn && !m_editContext.role->isEq(UserRole::admin)) { + UIControler::ins()->popWarningWin("内置管理员用户不能修改普用户类型"); + return; + } + + if (strcmp(m_editContext.name, user->name) != 0) { + if (AcidDistrubtRecordDao::getRecordNum() > 0 || AcidUseRecordDao::getRecordNum() > 1) { + UIControler::ins()->popWarningWin("无法修改用户名,<领酸记录>或<用酸记录>不为空."); + return; } + } + UIControler::ins()->doBlockWork("更新用户配置...", [this, user]() { if (m_editContext.resetPasswd) { ZLOGI(TAG, "reset passwd"); UserDao::updateUser(user->id, m_editContext.name, DEFAULT_PASSWD, (user_role_t)m_editContext.role->val); @@ -279,9 +276,7 @@ class MuUsrMgr : public IPageProcesser { syncUIUsrTableState(); syncEditContext(); UIControler::ins()->popInfoWin("保存成功"); - } else { - UIControler::ins()->popInfoWin("用户无修改"); - } + }); } /*********************************************************************************************************************** diff --git a/usrc/uicontroler/page/navi_page.cpp b/usrc/uicontroler/page/navi_page.cpp index 5df2439..3b9ee1f 100644 --- a/usrc/uicontroler/page/navi_page.cpp +++ b/usrc/uicontroler/page/navi_page.cpp @@ -45,8 +45,7 @@ static buttton_bid_info m_button_bid_info[] = { // 用户菜单配置 static muInfoTable_t usrMuInfoTable = // - { - .muInfo = { + {.muInfo = { {ob_navi_muInterval, pg_muInterval}, // 加酸间隔 {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 {ob_navi_muLoginOut, 0}, // 退出登录 @@ -55,8 +54,7 @@ static muInfoTable_t usrMuInfoTable = // }}; // 库管菜单配置 static muInfoTable_t storeKeeperMuInfoTable = // - { - .muInfo = { + {.muInfo = { {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 {ob_navi_muAcidTakeMgr, pg_muAcidDistMgr}, // 领酸管理 {ob_navi_muAcidUseRecd, pg_muAcidUseRecd}, // 用酸记录 @@ -67,8 +65,7 @@ static muInfoTable_t storeKeeperMuInfoTable = // }}; // 管理员菜单配置 static muInfoTable_t adminMuInfoTable = // - { - .muInfo = { + {.muInfo = { {ob_navi_muInterval, pg_muInterval}, // 加酸间隔 {ob_navi_muCHSetting, pg_muCHSetting}, // 通道设置 {ob_navi_muAcidType, pg_muAcidType}, // 酸类型管理 @@ -85,7 +82,7 @@ static muInfoTable_t adminMuInfoTable = // }}; static void initmuInfoTableStrut(muInfoTable_t* table) { - int total = 0; + int total = 0; for (int i = 0; i < 32; i++) { if (table->muInfo[i].bid == -1) { break; @@ -159,19 +156,20 @@ class NaviPage : public IPageProcesser { if (isMuButton(bid)) { int buttonIndex = getMuButtonNum(bid); int muIndex = curMuTable->pageNum * 8 + buttonIndex; - ZLOGI(TAG, "on muButton muIndex=%d ", muIndex); + // ZLOGI(TAG, "on muButton muIndex=%d ", muIndex); if (buttonIndex < curMuTable->menuTotalNum) { if (curMuTable->muInfo[muIndex].page != 0) { UIControler::ins()->chpage(curMuTable->muInfo[muIndex].page, true); } else { - UILoadingCxt cxt; - StatisticsSyncService::doSyncOnUnLoginOrPowerOff(); - osDelay(2000); - if (curMuTable->muInfo[muIndex].bid == ob_navi_powerOff) { - UIControler::ins()->popPowerOffWin("已关机,请关闭设备电源"); - } else if (curMuTable->muInfo[muIndex].bid == ob_navi_muLoginOut) { - UIControler::ins()->chpage(pg_login, true); - } + UIControler::ins()->doBlockWork("保存数据中....", [muIndex]() { + StatisticsSyncService::doSyncOnUnLoginOrPowerOff(); + osDelay(2000); + if (curMuTable->muInfo[muIndex].bid == ob_navi_powerOff) { + UIControler::ins()->popPowerOffWin("已关机,请关闭设备电源"); + } else if (curMuTable->muInfo[muIndex].bid == ob_navi_muLoginOut) { + UIControler::ins()->chpage(pg_login, true); + } + }); } } } diff --git a/usrc/uicontroler/page/popwin_page.cpp b/usrc/uicontroler/page/popwin_page.cpp index 861d733..ba138d2 100644 --- a/usrc/uicontroler/page/popwin_page.cpp +++ b/usrc/uicontroler/page/popwin_page.cpp @@ -30,7 +30,7 @@ class PopWinPage : public IPageProcesser { IPageProcesser::initialize(); syncState(); - thread.init("PopWinPage", 512); + thread.init("PopWinPage", 1024); thread.start([this]() { while (true) { // @@ -42,8 +42,8 @@ class PopWinPage : public IPageProcesser { osDelay(100); if (!UIPublicState::getLoadingState()) { handupInfoFlag = false; + ZLOGI(TAG, "loading exit"); } - ZLOGI(TAG, "loading exit"); } continue; } @@ -51,15 +51,15 @@ class PopWinPage : public IPageProcesser { if (UIPublicState::getPopInfoNum() != 0) { if (UIPublicState::popUIPopInfoBlock(&hangupInfo)) { ZLOGI(TAG, "PopWinPage info:%s", hangupInfo.info); - visPopWin(true); - visLoadingWin(false); + visPopWin(false); + visLoadingWin(false, "loading..."); initPopWindowsInfo(&hangupInfo); changePage(kInfoWin); } } else if (UIPublicState::getLoadingState()) { ZLOGI(TAG, "PopWinPage loading"); visPopWin(false); - visLoadingWin(true); + visLoadingWin(true, UIPublicState::getLoadingInfo()); changePage(kLoadingWin); } @@ -93,8 +93,9 @@ class PopWinPage : public IPageProcesser { visEx(ob_popwin_confirmkey, state); } - void visLoadingWin(bool state) { + void visLoadingWin(bool state, const char* txt) { visEx(ob_popwin_loadingWin, state); + UIControler::ins()->setTxt(thisPage, ob_popwin_loadingText, txt); visEx(ob_popwin_loadingText, state); } @@ -108,11 +109,14 @@ class PopWinPage : public IPageProcesser { function onConfirm = hangupInfo.onConfirm; if (bid == ob_popwin_canclekey) { if (hangupInfo.onConfirm) { - AppEventBus::ins()->callFnInEventBus([onConfirm]() { onConfirm(false); }); + // AppEventBus::ins()->callFnInEventBus("ON_CONFIRM", [onConfirm]() { onConfirm(false); }); + // AppEventBus::ins()->callFnInEventBus("ON_CONFIRM", [onConfirm]() {}); + onConfirm(false); } } else if (bid == ob_popwin_confirmkey) { if (hangupInfo.onConfirm) { - AppEventBus::ins()->callFnInEventBus([onConfirm]() { onConfirm(true); }); + // AppEventBus::ins()->callFnInEventBus("ON_CONFIRM", [onConfirm]() {}); + onConfirm(true); } } handupInfoFlag = false; @@ -152,10 +156,12 @@ class PopWinPage : public IPageProcesser { UIControler::ins()->setTxt(thisPage, ob_popwin_info, info->info); UIControler::ins()->sendcmd("p[%d].b[%d].pco=%d", thisPage, ob_popwin_info, 0 /*黑色*/); - visEx(ob_popwin_canclekey, 0); - if (info->type == UI_POP_WIN_TYPE_POWER_OFF_INFO) { - visEx(ob_popwin_confirmkey, 0); - } + visEx(ob_popwin_popWin, true); + visEx(ob_popwin_popTil, true); + visEx(ob_popwin_info, true); + visEx(ob_popwin_canclekey, false); + visEx(ob_popwin_confirmkey, info->type != UI_POP_WIN_TYPE_POWER_OFF_INFO); + } else if (info->type == UI_POP_WIN_TYPE_WARNING_INFO) { @@ -165,8 +171,12 @@ class PopWinPage : public IPageProcesser { UIControler::ins()->setTxt(thisPage, ob_popwin_info, info->info); UIControler::ins()->sendcmd("p[%d].b[%d].pco=%d", thisPage, ob_popwin_info, 63488 /*红色*/); - - visEx(ob_popwin_canclekey, 0); + visPopWin(true); + visEx(ob_popwin_popWin, true); + visEx(ob_popwin_popTil, true); + visEx(ob_popwin_info, true); + visEx(ob_popwin_canclekey, false); + visEx(ob_popwin_confirmkey, true); } else if (info->type == UI_POP_WIN_TYPE_CONFIRM) { // 确认(可被取消) @@ -176,7 +186,11 @@ class PopWinPage : public IPageProcesser { UIControler::ins()->setTxt(thisPage, ob_popwin_info, info->info); UIControler::ins()->sendcmd("p[%d].b[%d].pco=%d", thisPage, ob_popwin_info, 0 /*黑色*/); - visEx(ob_popwin_canclekey, 1); + visEx(ob_popwin_popWin, true); + visEx(ob_popwin_popTil, true); + visEx(ob_popwin_info, true); + visEx(ob_popwin_canclekey, true); + visEx(ob_popwin_confirmkey, true); } else if (info->type == UI_POP_WIN_TYPE_FATAL_ERROR) { // 警告消息 updateTitle(info->type, displayNum); @@ -185,8 +199,11 @@ class PopWinPage : public IPageProcesser { UIControler::ins()->setTxt(thisPage, ob_popwin_info, info->info); UIControler::ins()->sendcmd("p[%d].b[%d].pco=%d", thisPage, ob_popwin_info, 63488 /*红色*/); - visEx(ob_popwin_canclekey, 0); - visEx(ob_popwin_confirmkey, 0); + visEx(ob_popwin_popWin, true); + visEx(ob_popwin_popTil, true); + visEx(ob_popwin_info, true); + visEx(ob_popwin_canclekey, false); + visEx(ob_popwin_confirmkey, false); } } diff --git a/usrc/uicontroler/ui_controler.cpp b/usrc/uicontroler/ui_controler.cpp index 0795b08..3d9328f 100644 --- a/usrc/uicontroler/ui_controler.cpp +++ b/usrc/uicontroler/ui_controler.cpp @@ -18,6 +18,7 @@ using namespace iflytop; static ZThread uart_rx_thread; static ZThread rx_processed_thread; +static ZThread ui_block_work_thread; static ZQueue ackQueue; static ZQueue eventQueue; @@ -25,6 +26,7 @@ static ZThread usartRxThread; static ZThread eventProcessThread; static bool m_isWaitingForAck; static UART_HandleTypeDef* tjcUart; +static UIEvent event_cache; /*********************************************************************************************************************** * UTILS * @@ -45,12 +47,21 @@ __weak void UIControlerHock_PageInit() {} /*********************************************************************************************************************** * FUNC * ***********************************************************************************************************************/ +void UIControler::doBlockWork(const char* blockmask, function fn) { + ui_block_work_thread.start([fn, blockmask]() { + UIPublicState::setLoadingState(true, blockmask); + osDelay(10); + fn(); + UIPublicState::setLoadingState(false, ""); + }); +} void UIControler::postInitialize() { ackQueue.initialize(5, sizeof(tjc_rx_packet_t)); eventQueue.initialize(5, sizeof(tjc_rx_packet_t)); - usartRxThread.init("usartRxThread", 1024); - eventProcessThread.init("eventProcessThread", 1024); + usartRxThread.init("UI_RX", 512); + eventProcessThread.init("UI_RX_PROCESS", 1024); + ui_block_work_thread.init("UI_WORK", 1024); tjcUart = AppHardware::ins()->tjcUart; UIPublicState::initialize(); m_cmdlock.init(); @@ -70,7 +81,7 @@ void UIControler::callUsrEventCb(UIEvent* event) { appEvent.type = KAE_UIEvent; appEvent.setUIEvent(event); - AppEventBus::ins()->pushEventBlock(&appEvent); + AppEventBus::ins()->pushEventBlock("UIEvent", &appEvent); } void UIControler::startSchedule() { @@ -118,7 +129,7 @@ void UIControler::startSchedule() { } else { event_cache.eventId = packet.data[0]; } - ZLOGI(TAG, "push event %s(%d) ", tjc::pt2str(event_cache.eventId), event_cache.eventId); + // ZLOGI(TAG, "push event %s(%d) ", tjc::pt2str(event_cache.eventId), event_cache.eventId); callUsrEventCb(&event_cache); } osDelay(1); diff --git a/usrc/uicontroler/ui_controler.hpp b/usrc/uicontroler/ui_controler.hpp index 6475ff0..8293eda 100644 --- a/usrc/uicontroler/ui_controler.hpp +++ b/usrc/uicontroler/ui_controler.hpp @@ -23,7 +23,6 @@ class UIControler { tjc_rx_packet_t ackcache; zmutex m_cmdlock = {"UI_LOCK"}; - UIEvent event_cache; public: UIControler() {}; @@ -87,13 +86,6 @@ class UIControler { void popInfoWin(const char* info, function onConfirm = nullptr) { popWin(UI_POP_WIN_TYPE_INFO, info, onConfirm); } void popPowerOffWin(const char* info) { popWin(UI_POP_WIN_TYPE_POWER_OFF_INFO, info, nullptr); } - void setLoadingState(bool state) { - { - zlock_guard lg(m_cmdlock); - UIPublicState::setLoadingState(state); - } - if (state) osDelay(10); - } void doInUILockArea(function fn) { zlock_guard lg(m_cmdlock); @@ -121,6 +113,8 @@ class UIControler { bool movePicTo(uint8_t pid, uint8_t bid, uint8_t toBid); bool movePicOutOfScreen(uint8_t pid, uint8_t bid); + void doBlockWork(const char* blockmask, function fn) ; + private: void processScreenRxPacket(uint8_t* data, size_t len); @@ -136,10 +130,5 @@ class UIControler { void placeHolder() {} }; -class UILoadingCxt { - public: - UILoadingCxt() { UIControler::ins()->setLoadingState(true); } - ~UILoadingCxt() { UIControler::ins()->setLoadingState(false); } -}; } // namespace iflytop diff --git a/usrc/uicontroler/ui_state_mgr.cpp b/usrc/uicontroler/ui_state_mgr.cpp index b696d31..0de4ccb 100644 --- a/usrc/uicontroler/ui_state_mgr.cpp +++ b/usrc/uicontroler/ui_state_mgr.cpp @@ -54,6 +54,6 @@ void UIStateMgr::changePage(int toPage) { } else { lastPage = nowPage; nowPage = toPage; - ZLOGI(TAG, "page change from %d to %d ", lastPage, nowPage); + // ZLOGI(TAG, "page change from %d to %d ", lastPage, nowPage); } }