zhaohe 8 months ago
parent
commit
31b53897ca
  1. BIN
      ui/hand_acid_mainboard_ui.HMI
  2. 33
      usrc/db/dao/acid_use_record_dao.cpp
  3. 12
      usrc/db/dao/device_acid_volume_dao.cpp
  4. 2
      usrc/db/dao/device_acid_volume_dao.hpp
  5. 4
      usrc/service/app_core.cpp
  6. 42
      usrc/service/statistics_sync_service.cpp
  7. 2
      usrc/uicontroler/base/page_processer.cpp
  8. 6
      usrc/uicontroler/page/home_page.cpp
  9. 4
      usrc/uicontroler/page/login_page.cpp
  10. 5
      usrc/uicontroler/page/mupage/MuAcidDistMgrPage.cpp
  11. 54
      usrc/uicontroler/page/mupage/muAcidUseMgr_page.cpp
  12. 2
      usrc/uicontroler/page/mupage/muDateMgr_page.cpp
  13. 45
      usrc/uicontroler/page/navi_page.cpp
  14. 9
      usrc/uicontroler/page/popwin_page.cpp
  15. 24
      usrc/uicontroler/ui_controler.cpp
  16. 7
      usrc/uicontroler/ui_controler.hpp

BIN
ui/hand_acid_mainboard_ui.HMI

33
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);

12
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])) {

2
usrc/db/dao/device_acid_volume_dao.hpp

@ -5,7 +5,7 @@
namespace iflytop {
class DeviceAcidVolume {
class DeviceAcidVolumeDao {
public:
static void init();

4
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);
/***********************************************************************************************************************
* ͳ¼ÆÄÚ´æÊ¹ÓÃÇé¿ö *

42
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;
}
});

2
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();

6
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);
}
}

4
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) {

5
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();
}
});
}

54
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, 使其自动注册

2
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); });
}
}
};

45
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) {

9
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);

24
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, function<void(bo
}
void UIControler::chpage(uint8_t page, bool triggerEvent) {
zlock_guard lg(m_cmdlock);
UIStateMgr::ins()->changePage(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() {

7
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<void(bool)> 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<void(bool)> 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<void()> fn) {
zlock_guard lg(m_cmdlock);
fn();
}
/**
* @brief
*/

Loading…
Cancel
Save