diff --git a/ui/hand_acid_mainboard_ui.HMI b/ui/hand_acid_mainboard_ui.HMI index a24ef7d..8536dea 100644 Binary files a/ui/hand_acid_mainboard_ui.HMI and b/ui/hand_acid_mainboard_ui.HMI differ diff --git a/usrc/db/dao/acid_use_record_dao.cpp b/usrc/db/dao/acid_use_record_dao.cpp index 4f13a61..f2c44b4 100644 --- a/usrc/db/dao/acid_use_record_dao.cpp +++ b/usrc/db/dao/acid_use_record_dao.cpp @@ -19,7 +19,7 @@ using namespace iflytop; static zhdb_table_t* table; static bool module_inited; static acid_use_record_table_t* m_table; -static zmutex lock(TABLE_NAME); +static zmutex lock(TABLE_NAME); /*********************************************************************************************************************** * FUNCTION * @@ -75,7 +75,7 @@ void AcidUseRecordDao::addRecord(const acid_use_record_t& record) { void AcidUseRecordDao::updateLastRecord(uint16_t val0, uint16_t val1, uint16_t val2, uint16_t val3) { zlock_guard l(lock); - int recordNum = m_table->recordNum - 1; + int recordNum = m_table->recordNum - 1; if (recordNum < 0) { ZLOGW(TAG, "no record to update"); return; @@ -94,7 +94,7 @@ void AcidUseRecordDao::updateLastRecord(uint16_t val0, uint16_t val1, uint16_t v void AcidUseRecordDao::syncTheLastRecord() { zlock_guard l(lock); - int recordNum = m_table->recordNum - 1; + int recordNum = m_table->recordNum - 1; if (recordNum < 0) { ZLOGW(TAG, "no record to sync"); return; @@ -104,7 +104,7 @@ void AcidUseRecordDao::syncTheLastRecord() { void AcidUseRecordDao::setDirtyRecordClean() { zlock_guard l(lock); - int recordNum = m_table->recordNum - 1; + int recordNum = m_table->recordNum - 1; if (recordNum < 0) { ZLOGW(TAG, "no record to clean"); return; @@ -114,7 +114,7 @@ void AcidUseRecordDao::setDirtyRecordClean() { } void AcidUseRecordDao::removeTheLastDirtyRecordSync() { zlock_guard l(lock); - int recordNum = m_table->recordNum - 1; + int recordNum = m_table->recordNum - 1; if (recordNum < 0) { ZLOGW(TAG, "no record to remove"); return; @@ -165,18 +165,25 @@ void AcidUseRecordDao::getRecord(int pageNum, AcidUseRcordPage* page) { void AcidUseRecordDao::clearRecord() { zlock_guard l(lock); ZASSERT_INFO(module_inited, "acid use record dao not inited"); - - m_table->recordNum = 0; + // 移动当前最后一个记录到第一个 + if (m_table->recordNum > 0) { + m_table->record[0] = m_table->record[m_table->recordNum - 1]; + m_table->recordNum = 1; + } else { + m_table->recordNum = 0; + } storgeTableData(); } -bool AcidUseRecordDao::isAlmostFull() { +bool AcidUseRecordDao::isAlmostFull() { zlock_guard l(lock); - - return m_table->recordNum >= ACIDUSERCORD_ALMOST_FULL; } -bool AcidUseRecordDao::isFull() { + + return m_table->recordNum >= ACIDUSERCORD_ALMOST_FULL; +} +bool AcidUseRecordDao::isFull() { zlock_guard l(lock); - - return m_table->recordNum >= ACIDUSERCORD_RECORD_NUM; } + + return m_table->recordNum >= ACIDUSERCORD_RECORD_NUM; +} int AcidUseRecordDao::getRecordNum() { zlock_guard l(lock); diff --git a/usrc/db/dao/device_acid_volume_dao.cpp b/usrc/db/dao/device_acid_volume_dao.cpp index 4b23d7f..0bcc6b2 100644 --- a/usrc/db/dao/device_acid_volume_dao.cpp +++ b/usrc/db/dao/device_acid_volume_dao.cpp @@ -2,7 +2,7 @@ #include "uappbase/zhdb/zhdb.hpp" -#define TAG "DeviceAcidVolume" +#define TAG "DeviceAcidVolumeDao" using namespace iflytop; @@ -31,7 +31,7 @@ static zmutex lock(TABLE_NAME); * FUNCTION * ***********************************************************************************************************************/ static void storgeTableData() { ZHDB::storageData((uint8_t*)tabledata, sizeof(*tabledata)); } -void DeviceAcidVolume::init() { +void DeviceAcidVolumeDao::init() { lock.init(); // table = ZHDB::allocTable(TABLE_NAME, sizeof(*tabledata)); @@ -54,7 +54,7 @@ void DeviceAcidVolume::init() { ZLOGI(TAG, "init success"); } -void DeviceAcidVolume::updateAcidVolume(int index, float volume) { +void DeviceAcidVolumeDao::updateAcidVolume(int index, float volume) { zlock_guard l(lock); ZASSERT_INFO(module_inited, "device acid volume dao not inited"); if (index < 0 || index >= sizeof(tabledata->item[0].acidVolume) / sizeof(tabledata->item[0].acidVolume[0])) { @@ -63,19 +63,19 @@ void DeviceAcidVolume::updateAcidVolume(int index, float volume) { } tabledata->item[0].acidVolume[index] = volume; } -void DeviceAcidVolume::sync() { +void DeviceAcidVolumeDao::sync() { zlock_guard l(lock); ZASSERT_INFO(module_inited, "device acid volume dao not inited"); storgeTableData(); } -void DeviceAcidVolume::updateAcidVolumeSync(int index, float volume) { +void DeviceAcidVolumeDao::updateAcidVolumeSync(int index, float volume) { zlock_guard l(lock); updateAcidVolume(index, volume); sync(); } -float DeviceAcidVolume::getAcidVolume(int index) { +float DeviceAcidVolumeDao::getAcidVolume(int index) { zlock_guard l(lock); ZASSERT_INFO(module_inited, "device acid volume dao not inited"); if (index < 0 || index >= sizeof(tabledata->item[0].acidVolume) / sizeof(tabledata->item[0].acidVolume[0])) { diff --git a/usrc/db/dao/device_acid_volume_dao.hpp b/usrc/db/dao/device_acid_volume_dao.hpp index b66f458..952864c 100644 --- a/usrc/db/dao/device_acid_volume_dao.hpp +++ b/usrc/db/dao/device_acid_volume_dao.hpp @@ -5,7 +5,7 @@ namespace iflytop { -class DeviceAcidVolume { +class DeviceAcidVolumeDao { public: static void init(); diff --git a/usrc/service/app_core.cpp b/usrc/service/app_core.cpp index 8f60b0b..7cb5b01 100644 --- a/usrc/service/app_core.cpp +++ b/usrc/service/app_core.cpp @@ -119,7 +119,7 @@ void AppCore::initialize() { DeviceSettingDao::init(); AcidUseRecordDao::init(); AcidDistrubtRecordDao::init(); - DeviceAcidVolume::init(); + DeviceAcidVolumeDao::init(); ZLOGI(TAG, "load zhdb end"); // @@ -159,7 +159,7 @@ void AppCore::initialize() { GStateMgr::ins()->setLogin(0, "admin", kadmin); AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent); - UIControler::ins()->chpage(pg_muAcidDistMgr, true); + UIControler::ins()->chpage(pg_login, true); /*********************************************************************************************************************** * 统计内存使用情况 * diff --git a/usrc/service/statistics_sync_service.cpp b/usrc/service/statistics_sync_service.cpp index 9d39772..7a551bc 100644 --- a/usrc/service/statistics_sync_service.cpp +++ b/usrc/service/statistics_sync_service.cpp @@ -34,6 +34,7 @@ void StatisticsSyncService::initialize() { }); osTimerDef(statiUpdateTimer, syncTimer); + statiUpdateTimerId = osTimerCreate(osTimer(statiUpdateTimer), osTimerPeriodic, nullptr); osTimerStart(statiUpdateTimerId, 30 * 1000); } @@ -44,10 +45,10 @@ void StatisticsSyncService::onLogin() { * 2.清空全局用户酸液使用量 */ - GStateMgr::ins()->setAcidRemain(0, DeviceAcidVolume::getAcidVolume(0)); - GStateMgr::ins()->setAcidRemain(1, DeviceAcidVolume::getAcidVolume(1)); - GStateMgr::ins()->setAcidRemain(2, DeviceAcidVolume::getAcidVolume(2)); - GStateMgr::ins()->setAcidRemain(3, DeviceAcidVolume::getAcidVolume(3)); + GStateMgr::ins()->setAcidRemain(0, DeviceAcidVolumeDao::getAcidVolume(0)); + GStateMgr::ins()->setAcidRemain(1, DeviceAcidVolumeDao::getAcidVolume(1)); + GStateMgr::ins()->setAcidRemain(2, DeviceAcidVolumeDao::getAcidVolume(2)); + GStateMgr::ins()->setAcidRemain(3, DeviceAcidVolumeDao::getAcidVolume(3)); GStateMgr::ins()->setAcidUsed(0, 0); GStateMgr::ins()->setAcidUsed(1, 0); @@ -86,11 +87,11 @@ void StatisticsSyncService::doSyncOnUnLoginOrPowerOff() { /** * @brief 同步数据库中当前剩余酸液到全局 */ - DeviceAcidVolume::updateAcidVolume(0, GStateMgr::ins()->getAcidRemain(0)); - DeviceAcidVolume::updateAcidVolume(1, GStateMgr::ins()->getAcidRemain(1)); - DeviceAcidVolume::updateAcidVolume(2, GStateMgr::ins()->getAcidRemain(2)); - DeviceAcidVolume::updateAcidVolume(3, GStateMgr::ins()->getAcidRemain(3)); - DeviceAcidVolume::sync(); + 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)); + DeviceAcidVolumeDao::sync(); // 如果酸液使用量小于0.01,则删除最后一条记录 if (used0 < 0.01 && used1 < 0.01 && used2 < 0.01 && used3 < 0.01) { @@ -121,7 +122,7 @@ void StatisticsSyncService::onAddAcidStorage(int ch, float addChVal) { * */ GStateMgr::ins()->setAcidRemain(ch, addChVal); - DeviceAcidVolume::updateAcidVolumeSync(ch, addChVal); + DeviceAcidVolumeDao::updateAcidVolumeSync(ch, addChVal); AppEventBus::ins()->pushAcidStatDisplayChangeEvent(); } void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal2, float useVal3) { @@ -130,13 +131,29 @@ void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal float now2 = GStateMgr::ins()->getAcidUsed(2); float now3 = GStateMgr::ins()->getAcidUsed(3); + float remain0 = GStateMgr::ins()->getAcidRemain(0); + float remain1 = GStateMgr::ins()->getAcidRemain(1); + float remain2 = GStateMgr::ins()->getAcidRemain(2); + float remain3 = GStateMgr::ins()->getAcidRemain(3); + GStateMgr::ins()->setAcidUsed(0, now0 + useVal0); GStateMgr::ins()->setAcidUsed(1, now1 + useVal1); GStateMgr::ins()->setAcidUsed(2, now2 + useVal2); GStateMgr::ins()->setAcidUsed(3, now3 + useVal3); - AcidUseRecordDao::updateLastRecord(now0 + useVal0, now1 + useVal1, now2 + useVal2, now3 + useVal3); - m_dataIsDirty = true; + GStateMgr::ins()->setAcidRemain(0, remain0 - useVal0 > 0 ? remain0 - useVal0 : 0); + GStateMgr::ins()->setAcidRemain(1, remain1 - useVal1 > 0 ? remain1 - useVal1 : 0); + 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; + AppEventBus::ins()->pushAcidStatDisplayChangeEvent(); } @@ -144,6 +161,7 @@ static void syncTimer(const void* tid) { AppEventBus::ins()->callFnInEventBus([]() { if (m_dataIsDirty) { AcidUseRecordDao::syncTheLastRecord(); + DeviceAcidVolumeDao::sync(); m_dataIsDirty = false; } }); diff --git a/usrc/uicontroler/base/page_processer.cpp b/usrc/uicontroler/base/page_processer.cpp index 459290a..ddb1ad2 100644 --- a/usrc/uicontroler/base/page_processer.cpp +++ b/usrc/uicontroler/base/page_processer.cpp @@ -59,7 +59,7 @@ void IPageProcesser::initialize() { } // } else if (event->type == KAE_PageChangeEvent) { - if (thisPage != event->getUIEvent()->pid) { + if (thisPage != event->getPageChangeTo()) { return; } onChangePageEvent(); diff --git a/usrc/uicontroler/page/home_page.cpp b/usrc/uicontroler/page/home_page.cpp index a72454f..60817f8 100644 --- a/usrc/uicontroler/page/home_page.cpp +++ b/usrc/uicontroler/page/home_page.cpp @@ -147,9 +147,7 @@ class HomePage : public IPageProcesser { private: void syncdate() { - static zdate_t date; - AppHal::rtc_get(&date); - UIControler::ins()->setrtc(&date); + } void setPumpSelectState(uint8_t chIndex, bool state) { @@ -205,7 +203,7 @@ class HomePage : public IPageProcesser { UIControler::ins()->setTxt(thisPage, ob_home_RunModeVal, "", DeviceSettingDao::get()->distrIntervalS); } else if (nowMode == khand_acid_m_continuous_mode) { UIControler::ins()->setPicturePicNum(thisPage, ob_home_RunMode, ob_home_RunMode0); - UIControler::ins()->setTxt(thisPage, ob_home_RunModeVal, "%.2f", DeviceSettingDao::get()->distrIntervalS); + UIControler::ins()->setTxt(thisPage, ob_home_RunModeVal, " %.1f", DeviceSettingDao::get()->distrIntervalS); } } diff --git a/usrc/uicontroler/page/login_page.cpp b/usrc/uicontroler/page/login_page.cpp index 084c0d4..d5a7475 100644 --- a/usrc/uicontroler/page/login_page.cpp +++ b/usrc/uicontroler/page/login_page.cpp @@ -26,7 +26,7 @@ class LoginPage : public IPageProcesser { private: virtual void onPageLoad(OnPageLoadContext* cxt) override {} - virtual void onChangePageEvent() { + virtual void onChangePageEvent() override{ resetPage(); return; }; @@ -77,6 +77,8 @@ class LoginPage : public IPageProcesser { UIS->setTxt(thisPage, ob_login_uNameEMsg, ""); // 用户名错误信息 UIS->setTxt(thisPage, ob_login_pwd, ""); // 密码 UIS->setTxt(thisPage, ob_login_pwdEMsg, ""); // 密码错误信息 + memset(userName, 0, sizeof(userName)); + memset(passwd, 0, sizeof(passwd)); } void login(user_t* user) { diff --git a/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp index 5d0b8c7..e251713 100644 --- a/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp +++ b/usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp @@ -125,7 +125,7 @@ class MuAcidDistMgrPage : public IPageProcesser { record.distribuVolume = m_volumeVal; AcidDistrubtRecordDao::addRecordSync(record); - DeviceAcidVolume::updateAcidVolumeSync(m_chId, m_volumeVal); + DeviceAcidVolumeDao::updateAcidVolumeSync(m_chId, m_volumeVal); GStateMgr::ins()->setAcidRemain(m_chId, m_volumeVal); AppEventBus::ins()->pushAcidStatStorageEvent(m_chId, m_volumeVal); resetForm(); @@ -141,7 +141,8 @@ class MuAcidDistMgrPage : public IPageProcesser { if (isOk) { UILoadingCxt loadingCxt; AcidDistrubtRecordDao::clearRecord(); - UIControler::ins()->chpage(thisPage, true); + resetForm(); + updateTableVolume(); } }); } diff --git a/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp b/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp index 4db6a49..9e8faea 100644 --- a/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp @@ -66,8 +66,22 @@ class MuAcidUseMgrPage : public IPageProcesser { * @brief 返回上一页 */ virtual void onBackKey() override { UIControler::ins()->chpage(pg_navi, true); } - virtual void onChangePageEvent() override { - ZLOGI(TAG, "onChangePageEvent..............................................."); + virtual void onChangePageEvent() override { initPage(); } + + virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { + if (bid == ob_muAcidUseRecd_clearRecord) { + UIControler::ins()->popConfirmWin("您是否确定要清空用酸记录?", [this](bool isOk) { + if (isOk) { + UILoadingCxt loadingCxt; + AcidUseRecordDao::clearRecord(); + initPage(); + } + }); + } + } + virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override {} + + void initPage() { // set title setText(cfgbid_table[0].val[0], "时间"); setText(cfgbid_table[0].val[1], "用户"); @@ -76,33 +90,12 @@ class MuAcidUseMgrPage : public IPageProcesser { setText(cfgbid_table[0].val[4], "%s(ml)", AcidChCfgDao::getCfg(2)->acidChooseName); setText(cfgbid_table[0].val[5], "%s(ml)", AcidChCfgDao::getCfg(3)->acidChooseName); -#if 0 - for (size_t i = 0; i < 20; i++) { - acid_use_record_t record; - record.id = i; - record.date.year = 2021 + i; - record.date.month = 6; - record.date.day = 1; - record.date.hours = 12; - record.date.minutes = 30; - record.date.seconds = 30; - record.usrid = 0; - - record.ch0take0p1ml = 100; - record.ch1take0p1ml = 110; - record.ch2take0p1ml = 120; - record.ch3take0p1ml = 130; - AcidUseRecordDao::addRecordSync(record); - } - AcidUseRecordDao::sync(); -#endif - // set val AcidUseRcordPage page; AcidUseRecordDao::getRecord(0, &page); for (int i = 0; i < page.recordNum; i++) { 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", UserDao::getUserByIdNotNull(page.record[i]->usrid)->name); + 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); @@ -118,19 +111,6 @@ class MuAcidUseMgrPage : public IPageProcesser { setText(cfgbid_table[i + 1].val[5], ""); } } - virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { - if (bid == ob_muAcidUseRecd_clearRecord) { - UIControler::ins()->popConfirmWin("您是否确定要清空用酸记录?", [](bool isOk) { - if (isOk) { - UILoadingCxt loadingCxt; - AcidUseRecordDao::clearRecord(); - UIControler::ins()->chpage(pg_muAcidUseRecd, true); - - } - }); - } - } - virtual void onInputFieldContentChange(uint8_t bid, uint8_t slecId, const char* text) override {} }; // 实例化Page, 使其自动注册 diff --git a/usrc/uicontroler/page/mupage/muDateMgr_page.cpp b/usrc/uicontroler/page/mupage/muDateMgr_page.cpp index 8237171..fbe0c82 100644 --- a/usrc/uicontroler/page/mupage/muDateMgr_page.cpp +++ b/usrc/uicontroler/page/mupage/muDateMgr_page.cpp @@ -137,6 +137,8 @@ class MuDateMgrPage : public IPageProcesser { if (bid == ob_muDateMgr_save) { 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); + UIControler::ins()->popInfoWin("时间设置成功", [](bool) { UIControler::ins()->chpage(pg_navi, true); }); } } }; diff --git a/usrc/uicontroler/page/navi_page.cpp b/usrc/uicontroler/page/navi_page.cpp index a9fda96..5df2439 100644 --- a/usrc/uicontroler/page/navi_page.cpp +++ b/usrc/uicontroler/page/navi_page.cpp @@ -8,8 +8,8 @@ using namespace std; #define TAG "NaviPage" typedef struct { - uint8_t bid; - uint8_t page; + int16_t bid; + int16_t page; } muInfo_t; typedef struct { @@ -45,34 +45,29 @@ static buttton_bid_info m_button_bid_info[] = { // 用户菜单配置 static muInfoTable_t usrMuInfoTable = // - {.menuTotalNum = 3, - .pageNum = 1, - .maxPageNum = 1, + { .muInfo = { {ob_navi_muInterval, pg_muInterval}, // 加酸间隔 {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 {ob_navi_muLoginOut, 0}, // 退出登录 - {ob_navi_powerOff, 0} // 关机 - + {ob_navi_powerOff, 0}, // 关机 + {-1, 0} // }}; // 库管菜单配置 static muInfoTable_t storeKeeperMuInfoTable = // - {.menuTotalNum = 4, - .pageNum = 1, - .maxPageNum = 1, + { .muInfo = { {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 {ob_navi_muAcidTakeMgr, pg_muAcidDistMgr}, // 领酸管理 {ob_navi_muAcidUseRecd, pg_muAcidUseRecd}, // 用酸记录 {ob_navi_muLoginOut, 0}, // 退出登录 - {ob_navi_powerOff, 0} // 关机 + {ob_navi_powerOff, 0}, // 关机 + {-1, 0} // }}; // 管理员菜单配置 static muInfoTable_t adminMuInfoTable = // - {.menuTotalNum = 11, - .pageNum = 1, - .maxPageNum = 2, + { .muInfo = { {ob_navi_muInterval, pg_muInterval}, // 加酸间隔 {ob_navi_muCHSetting, pg_muCHSetting}, // 通道设置 @@ -85,9 +80,23 @@ static muInfoTable_t adminMuInfoTable = // {ob_navi_muChangePwd, pg_muChangePasswd}, // 修改密码 {ob_navi_muDeviceInfo, pg_muDeviceInfo}, // 设备信息 {ob_navi_muLoginOut, 0}, // 退出登录 - {ob_navi_powerOff, 0} // 关机 + {ob_navi_powerOff, 0}, // 关机 + {-1, 0} // }}; +static void initmuInfoTableStrut(muInfoTable_t* table) { + int total = 0; + for (int i = 0; i < 32; i++) { + if (table->muInfo[i].bid == -1) { + break; + } + total++; + } + table->menuTotalNum = total; + table->pageNum = 1; + table->maxPageNum = total / 8 + (total % 8 == 0 ? 0 : 1); +} + /*********************************************************************************************************************** * VAR * ***********************************************************************************************************************/ @@ -125,6 +134,11 @@ class NaviPage : public IPageProcesser { virtual void initialize() override { IPageProcesser::initialize(); + + initmuInfoTableStrut(&usrMuInfoTable); + initmuInfoTableStrut(&storeKeeperMuInfoTable); + initmuInfoTableStrut(&adminMuInfoTable); + syncState(); } @@ -152,6 +166,7 @@ class NaviPage : public IPageProcesser { } 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) { diff --git a/usrc/uicontroler/page/popwin_page.cpp b/usrc/uicontroler/page/popwin_page.cpp index 084a8da..861d733 100644 --- a/usrc/uicontroler/page/popwin_page.cpp +++ b/usrc/uicontroler/page/popwin_page.cpp @@ -64,10 +64,11 @@ class PopWinPage : public IPageProcesser { } if (!handupInfoFlag) { - if (UIControler::ins()->getNowPage() == thisPage) { - UIControler::ins()->chpage(lastPage, false); - osDelay(200); // 等待页面切换 - } + UIControler::ins()->doInUILockArea([this]() { + if (UIControler::ins()->getNowPage() == thisPage) { + UIControler::ins()->chpage(lastPage, false); + } + }); } osDelay(10); diff --git a/usrc/uicontroler/ui_controler.cpp b/usrc/uicontroler/ui_controler.cpp index 0ce15fd..e283929 100644 --- a/usrc/uicontroler/ui_controler.cpp +++ b/usrc/uicontroler/ui_controler.cpp @@ -12,7 +12,7 @@ using namespace iflytop; #define TAG "UIScheduler" -#define MODULE_DEBUG 0 +#define MODULE_DEBUG 1 #define UART_RX_OVERTIME 5 #define CMD_OVERTIME 100 @@ -167,7 +167,7 @@ bool UIControler::readTxt(uint8_t pid, uint8_t cId, char* txt, int32_t txtbuflen zlock_guard lg(m_cmdlock); startReceiveAck(); - sendcmd("com_stop"); + // sendcmd("com_stop"); sendcmd("printh AA"); sendcmd("prints p[%d].b[%d].txt,0", pid, cId); sendcmd("printh 00"); @@ -203,11 +203,11 @@ bool UIControler::_readFiledAsInt(uint8_t pid, uint8_t bid, const char* filedNam zlock_guard lg(m_cmdlock); startReceiveAck(); - sendcmd("com_stop"); + // sendcmd("com_stop"); sendcmd("printh AA"); sendcmd("prints p[%d].b[%d].%s,4", pid, bid, filedName); sendcmd("printh FF FF FF"); - sendcmd("com_start"); + // sendcmd("com_start"); bool suc = ackQueue.receive(&ackcache, CMD_OVERTIME); if (!suc) { @@ -226,7 +226,7 @@ bool UIControler::echo(uint8_t tx, uint8_t* rx) { zlock_guard lg(m_cmdlock); startReceiveAck(); - sendcmd("com_stop"); + // sendcmd("com_stop"); sendcmd("printh AA"); sendcmd("printh %02X", tx); sendcmd("printh FF FF FF"); @@ -314,6 +314,7 @@ void UIControler::popWin(UIPopWinType_t type, const char* info, functionchangePage(page); if (triggerEvent) AppEventBus::ins()->pushPageChangeEvent(page); sendcmd("page %d", page); @@ -347,14 +348,15 @@ void UIControler::sendcmd(const char* format, va_list args) { buf[len + 2] = 0xff; // vPortEnterCritical(); + // HAL_UART_Transmit_DMA(tjcUart, (uint8_t*)buf, len + 3); HAL_UART_Transmit(tjcUart, (uint8_t*)buf, len + 3, 100); // vPortExitCritical(); - while (true) { - osDelay(1); - if (tjcUart->gState == HAL_UART_STATE_READY) { - return; - } - } + // while (true) { + // osDelay(2); + // if (tjcUart->gState == HAL_UART_STATE_BUSY_RX || tjcUart->gState == HAL_UART_STATE_READY) { + // return; + // } + // } } void UIControler::startReceiveAck() { diff --git a/usrc/uicontroler/ui_controler.hpp b/usrc/uicontroler/ui_controler.hpp index 32324d6..6475ff0 100644 --- a/usrc/uicontroler/ui_controler.hpp +++ b/usrc/uicontroler/ui_controler.hpp @@ -84,7 +84,7 @@ class UIControler { void popWarningWin(const char* info) { popWin(UI_POP_WIN_TYPE_WARNING_INFO, info, nullptr); } void popFatalErrorWin(const char* info) { popWin(UI_POP_WIN_TYPE_FATAL_ERROR, info, nullptr); } void popConfirmWin(const char* info, function onConfirm) { popWin(UI_POP_WIN_TYPE_CONFIRM, info, onConfirm); } - void popInfoWin(const char* info) { popWin(UI_POP_WIN_TYPE_INFO, info, nullptr); } + 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) { @@ -94,6 +94,11 @@ class UIControler { } if (state) osDelay(10); } + + void doInUILockArea(function fn) { + zlock_guard lg(m_cmdlock); + fn(); + } /** * @brief */