zhaohe 8 months ago
parent
commit
d98ad8fd9c
  1. 4
      .settings/stm32cubeide.project.prefs
  2. 2
      Core
  3. 5
      README.md
  4. 2
      STM32F407VETX_FLASH.ld
  5. 2
      stm32basic
  6. 43
      ui/ui.h
  7. 2
      usrc/db/dao/acid_ch_cfg_dao.cpp
  8. 1
      usrc/db/dao/acid_name_dao.cpp
  9. 7
      usrc/project_configs.h
  10. 82
      usrc/service/app_core.cpp
  11. 4
      usrc/service/pump_ctrl_service.cpp
  12. 39
      usrc/service/valve_state_ctrl_service.cpp
  13. 2
      usrc/service/valve_state_ctrl_service.hpp
  14. 8
      usrc/uicontroler/page/mupage/muCHSetting_page.cpp
  15. 13
      usrc/uicontroler/page/popwin_page.cpp
  16. 51
      usrc/uicontroler/ui_controler.cpp
  17. 6
      usrc/uicontroler/ui_controler.hpp

4
.settings/stm32cubeide.project.prefs

@ -1,6 +1,6 @@
2F62501ED4689FB349E356AB974DBE57=1A37C75E31949FC1CF47D46CC4BFA318
2F62501ED4689FB349E356AB974DBE57=D1D13CF78BE39097E724CD6F0136AC59
635E684B79701B039C64EA45C3F84D30=C8B026EBE17C208F17FB66CE4235156C
66BE74F758C12D739921AEA421D593D3=1
8DF89ED150041C4CBC7CB9A9CAA90856=1A37C75E31949FC1CF47D46CC4BFA318
8DF89ED150041C4CBC7CB9A9CAA90856=D1D13CF78BE39097E724CD6F0136AC59
DC22A860405A8BF2F2C095E5B6529F12=EC6C4D369FD4F7EABFE17B3222B5F3A0
eclipse.preferences.version=1

2
Core

@ -1 +1 @@
Subproject commit fd9810003dcdd1c419fea3444dad1528b881822a
Subproject commit 41922cfe8ea480cafe9b982f2f204a07ee88a9a7

5
README.md

@ -60,3 +60,8 @@ UI
2. 如果从屏幕读取状态失败,则自动重启设备
```
```
BUG:
1. 数字键盘按下任意键,会清除输入(这是正确的),但会忽略掉本次输入
```

2
STM32F407VETX_FLASH.ld

@ -39,7 +39,7 @@ ENTRY(Reset_Handler)
/* Highest address of the user mode stack */
_estack = ORIGIN(RAM) + LENGTH(RAM); /* end of "RAM" Ram type memory */
_Min_Heap_Size = 0x0; /* required amount of heap */
_Min_Heap_Size = 0x2000; /* required amount of heap */
_Min_Stack_Size = 0x2000; /* required amount of stack */
/* Memories definition */

2
stm32basic

@ -1 +1 @@
Subproject commit 60f3510b130731e26643271cad9d8f9a444b7155
Subproject commit d830dc9ba6bbcae328723d94f6b8a0c1829fe850

43
ui/ui.h

@ -1,25 +1,26 @@
//pages
#define pg_gvar 0
#define pg_pStart 1
#define pg_login 2
#define pg_home 3
#define pg_navi 4
#define pg_muInterval 5
#define pg_muUsrMgr 6
#define pg_muDateMgr 7
#define pg_muAcidType 8
#define pg_muChangePasswd 9
#define pg_muCHSetting 10
#define pg_muDeviceInfo 11
#define pg_muReCtlerBind 12
#define pg_muAcidTakeMgr 13
#define pg_muAcidUseRecd 14
#define pg_popwin 15
#define pg_keybdB 16
#define pg_keybdAP 17
#define pg_keyPasswd 18
#define pg_keybMutSel 19
#define pg_keybMutSelFix 20
#define pg_powerOn 1
#define pg_pStart 2
#define pg_login 3
#define pg_home 4
#define pg_navi 5
#define pg_muInterval 6
#define pg_muUsrMgr 7
#define pg_muDateMgr 8
#define pg_muAcidType 9
#define pg_muChangePasswd 10
#define pg_muCHSetting 11
#define pg_muDeviceInfo 12
#define pg_muReCtlerBind 13
#define pg_muAcidTakeMgr 14
#define pg_muAcidUseRecd 15
#define pg_popwin 16
#define pg_keybdB 17
#define pg_keybdAP 18
#define pg_keyPasswd 19
#define pg_keybMutSel 20
#define pg_keybMutSelFix 21
//gvar.objs
#define ob_gvar_gvar 0
#define ob_gvar_edit 1
@ -44,6 +45,8 @@
#define ob_gvar_save 20
#define ob_gvar_stateSwitch0 21
#define ob_gvar_stateSwitch1 22
//powerOn.objs
#define ob_powerOn_powerOn 0
//pStart.objs
#define ob_pStart_pStart 0
#define ob_pStart_j0 1

2
usrc/db/dao/acid_ch_cfg_dao.cpp

@ -9,7 +9,7 @@ using namespace iflytop;
/***********************************************************************************************************************
* MARCO *
***********************************************************************************************************************/
#define TABLE_VERSION TABLE_BASE_VERSION
#define TABLE_VERSION (TABLE_BASE_VERSION + 1)
#define TABLE_NAME "acid_ch_cfg_table"
/***********************************************************************************************************************

1
usrc/db/dao/acid_name_dao.cpp

@ -96,4 +96,5 @@ const char** AcidNameDao::getAcidNameList() {
for (int i = 0; i < MAX_ACID_NUM; i++) {
acidNameList[i] = tabledata->acidName[0].acidName[i];
}
return acidNameList;
}

7
usrc/project_configs.h

@ -8,7 +8,7 @@
#define SDK_CFG__CFG_FLASH_ADDR 0x080C0000 // flash配置地址
#define SDK_CFG__SN_FLASH_ADDR 0x080E0004 //
#define SDK_MAX_TASK 10 // 最大任务数量
#define SDK_MAX_TASK 15 // 最大任务数量
/***********************************************************************************************************************
* FLASH分区 *
@ -22,5 +22,6 @@
#define MOTOR_NUM 4
#define MAX_USR_NUM 8 // 数量更改时候需要修改UsrMgr页面
#define DEFAULT_PASSWD "888888"
#define MAX_USR_NUM 8 // 数量更改时候需要修改UsrMgr页面
#define DEFAULT_PASSWD "888888"
#define ENABLE_MOTOR_CHECK_THREAD 0 // 是否启用电机检测线程

82
usrc/service/app_core.cpp

@ -59,10 +59,14 @@ extern "C" {
void umain() { AppCore::ins()->initialize(); }
}
extern void popWinPageInit();
void AppCore::initialize() {
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
AppHal::MX_TIM6_Init();
AppHal::MX_TIM7_Init();
AppHal::DEBUG_UART_INIT(DEBUG_TX_PIN, DEBUG_RX_PIN, DEBUG_UART_BAUDRATE);
zlog_init(&DEBUG_UART_INS);
@ -72,21 +76,36 @@ void AppCore::initialize() {
ZLOGI(TAG, "sn : %s", sn_get_str());
ZLOGI(TAG, "=");
SysMgr::ins()->initedFinished();
SysMgr::ins()->dumpSysInfo();
// 硬件无关组件初始化
GStateMgr::ins()->initialize();
AppEventBus::ins()->initialize();
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
debuglegInit();
// 硬件初始化
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
AppHardware::ins()->initialize(); // 基础硬件初始化
UIControler::ins()->postInitialize();
ID* id = &AppHardware::ins()->id;
ZLOGI(TAG, "ID0:%d ID1:%d ID2:%d ID3:%d ID4:%d", //
id->ID0.read(), id->ID1.read(), id->ID2.read(), id->ID3.read(), id->ID4.read());
// if (!AppHardware::ins()->isHardInitOk()) {
// GStateMgr::ins()->initialize();
// AppEventBus::ins()->initialize();
// UIControler::ins()->initialize();
// popWinPageInit();
// UIControler::ins()->popFatalErrorWin("硬件初始化失败,请尝试掉电重启设备");
// while (true) osDelay(30);
// }
/***********************************************************************************************************************
* *
* *
***********************************************************************************************************************/
GStateMgr::ins()->initialize();
AppEventBus::ins()->initialize();
ZLOGI(TAG, "load zhdb");
ZHDB::init();
@ -96,15 +115,46 @@ void AppCore::initialize() {
DeviceSettingDao::init();
ZLOGI(TAG, "load zhdb end");
//
// RemoteControlerUpper::ins()->initialize(); // 遥控器初始化
// RemoteControlerUpper::ins()->startSchedule();
// ValveStateSyncService::ins()->initialize(ZCAN1::ins()); // 阀门状态同步服务初始化
// ValveStateSyncService::ins()->startSync();
PumpCtrlService::ins()->initialize(); // 泵控制服务初始化
RemoteControlerStateSyncService::ins()->initialize(); // 遥控器状态同步服务初始化
RemoteControlerStateSyncService::ins()->startSync();
// UI初始化
UIControler::ins()->initialize();
UIControler::ins()->pageInitialize();
GStateMgr::ins()->setLogin(0, "admin", kadmin);
UIControler::ins()->chpage(pg_muChangePasswd, true);
/***********************************************************************************************************************
* *
***********************************************************************************************************************/
// osDelay(100);
// if (strlen(DeviceSettingDao::get()->bleClientName) != 0) {
// ZLOGI(TAG, "start scan :%s", DeviceSettingDao::get()->bleClientName);
// for (size_t i = 0;; i++) {
// if (i != 0) ZLOGI(TAG, "re start scan %s %d", DeviceSettingDao::get()->bleClientName, i);
// bool suc = RCTRL->startScan(DeviceSettingDao::get()->bleClientName, true);
// if (suc) break;
// }
// } else {
// ZLOGI(TAG, "start scan %s", "XXXXXXXXX");
// for (size_t i = 0;; i++) {
// if (i != 0) ZLOGI(TAG, "re start scan %s %d", "XXXXXXXX", i);
// bool suc = RCTRL->startScan("XXXXXXXXX", false); // 输入一个错误的设备名,当作不扫描
// if (suc) break;
// }
// }
UIControler::ins()->chpage(pg_muCHSetting, true);
osDelay(1000);
// UIControler::ins()->popWarningWin("警告!!!!!!!");
// UIControler::ins()->popConfirmWin("消息确认!!!!!!!", [](bool val) { ZLOGI(TAG, "confirm val %d", val); });
// UIControler::ins()->popInfoWin("消息确认!!!!!!!");
/***********************************************************************************************************************
* 使 *
***********************************************************************************************************************/
SysMgr::ins()->initedFinished();
SysMgr::ins()->dumpSysInfo();
while (true) osDelay(30);
}

4
usrc/service/pump_ctrl_service.cpp

@ -33,6 +33,9 @@ void PumpCtrlService::initialize() {
// }
});
m_monitor_thread.init("PumpCtrlServiceMonitor", 1024);
#if ENABLE_MOTOR_CHECK_THREAD
m_monitor_thread.start([this]() {
for (size_t i = 0; i < 4; i++) {
TMC51X0* motor = m_motors[i];
@ -75,6 +78,7 @@ void PumpCtrlService::initialize() {
}
}
});
#endif
}
#define WAIT_FOR_MOTOR_STOP() \

39
usrc/service/valve_state_ctrl_service.cpp

@ -8,9 +8,12 @@ void ValveStateSyncService::initialize(ZCAN1* can) {
m_thread.init("ValveStateSyncService-Thread");
this->can = can;
lock.init();
inited = true;
}
void ValveStateSyncService::startSync() {
ZASSERT_INFO(inited, "ValveStateSyncService not initialized");
m_thread.start([this]() {
while (true) {
m_thread.sleep(300);
@ -29,6 +32,8 @@ void ValveStateSyncService::startSync() {
});
}
void ValveStateSyncService::setValveState(bool state) {
if (!inited) return;
{
zlock_guard l(lock);
output0state = (output0state & ~(1 << 0)) | (state << 0);
@ -45,6 +50,8 @@ void ValveStateSyncService::setValveState(bool state) {
}
void ValveStateSyncService::setValveState(int valveIndex, bool state) {
if (!inited) return;
if (valveIndex >= 4) {
ZLOGW(TAG, "valveIndex %d out of range", valveIndex);
return;
@ -63,6 +70,8 @@ void ValveStateSyncService::setValveState(int valveIndex, bool state) {
}
void ValveStateSyncService::setValveState(bool state0, bool state1, bool state2, bool state3) {
if (!inited) return;
{
zlock_guard l(lock);
output0state = (output0state & ~(1 << 0)) | (state0 << 0);
@ -81,18 +90,26 @@ void ValveStateSyncService::setValveState(bool state0, bool state1, bool state2,
#define SETBIT(byte, off, valve) (byte = (byte & ~(1 << off)) | (valve << off))
void ValveStateSyncService::setRGBState(bool r, bool g, bool b) {
zlock_guard l(lock);
// bit0:r
// bit1:g
// bit2:b
SETBIT(rgbwstate, 0, r);
SETBIT(rgbwstate, 1, g);
SETBIT(rgbwstate, 2, b);
m_thread.wake();
if (!inited) return;
{
zlock_guard l(lock);
// bit0:r
// bit1:g
// bit2:b
SETBIT(rgbwstate, 0, r);
SETBIT(rgbwstate, 1, g);
SETBIT(rgbwstate, 2, b);
m_thread.wake();
}
}
void ValveStateSyncService::setWarningState(bool warning) {
zlock_guard l(lock);
if (!inited) return;
SETBIT(rgbwstate, 3, warning);
m_thread.wake();
{
zlock_guard l(lock);
SETBIT(rgbwstate, 3, warning);
m_thread.wake();
}
}

2
usrc/service/valve_state_ctrl_service.hpp

@ -19,6 +19,8 @@ class ValveStateSyncService {
bool forceupdate = false;
zmutex lock = {"ValveStateSyncServiceLock"};
bool inited = false;
public:
static ValveStateSyncService* ins() {
static ValveStateSyncService instance;

8
usrc/uicontroler/page/mupage/muCHSetting_page.cpp

@ -135,7 +135,7 @@ class MuChSetting : public IPageProcesser {
* @brief ,
*/
if (ACID_CHOOS_ENAME_BIND_CFG && bid == ACID_CHOOS_ENAME_BIND_CFG->cfgbid) { // 通道绑定名称
UIControler::ins()->popKeyBMutSelFix(thisPage, bid, 0, AcidNameDao::getAcidNameList());
UIControler::ins()->popKeyBMutSelFix(thisPage, bid, 0,"酸液种类选择", AcidNameDao::getAcidNameList());
} else if (IRUN_BIND_CFG && bid == IRUN_BIND_CFG->cfgbid) { // IRUN
UIControler::ins()->popNumKeyBoard(thisPage, bid, 2, fmt("%d", AcidChCfgDao::getCfg(0)->irun));
} else if (PUMP_DEF_VEL_BIND_CFG && bid == PUMP_DEF_VEL_BIND_CFG->cfgbid) { // 速度
@ -180,9 +180,11 @@ class MuChSetting : public IPageProcesser {
pumpChangeSelectId(m_chId);
syncUIContent();
}
} else
}
if (ACID_CHOOS_ENAME_BIND_CFG && bid == ACID_CHOOS_ENAME_BIND_CFG->cfgbid) {
if (ACID_CHOOS_ENAME_BIND_CFG && bid == ACID_CHOOS_ENAME_BIND_CFG->cfgbid) {
/**
* @brief
*/

13
usrc/uicontroler/page/popwin_page.cpp

@ -13,7 +13,7 @@ typedef enum {
static UIPopInfo_t hangupInfo;
static int lastPage = 0;
static int lastPage = pg_powerOn;
static int displayNum = 0;
static bool handupInfoFlag = false;
@ -65,7 +65,7 @@ class PopWinPage : public IPageProcesser {
if (!handupInfoFlag) {
if (UIControler::ins()->getNowPage() == thisPage) {
UIControler::ins()->chpage(lastPage,false);
UIControler::ins()->chpage(lastPage, false);
osDelay(200); // 等待页面切换
}
}
@ -81,7 +81,7 @@ class PopWinPage : public IPageProcesser {
if (UIControler::ins()->getNowPage() != thisPage) {
lastPage = UIControler::ins()->getNowPage();
}
UIControler::ins()->chpage(pg_popwin,false);
UIControler::ins()->chpage(pg_popwin, false);
}
void visPopWin(bool state) {
@ -125,7 +125,7 @@ class PopWinPage : public IPageProcesser {
} else if (type == UI_POP_WIN_TYPE_CONFIRM) {
UIControler::ins()->setTxt(thisPage, ob_popwin_popTil, "消息(%d)", messageNum);
} else if (type == UI_POP_WIN_TYPE_FATAL_ERROR) {
UIControler::ins()->setTxt(thisPage, ob_popwin_popTil, "警告(%d)", messageNum);
UIControler::ins()->setTxt(thisPage, ob_popwin_popTil, "错误(%d)", messageNum);
}
}
@ -188,3 +188,8 @@ class PopWinPage : public IPageProcesser {
// 实例化LoginPage, 使其自动注册
static PopWinPage instance;
/**
* @brief
*/
void popWinPageInit() { instance.initialize(); }

51
usrc/uicontroler/ui_controler.cpp

@ -12,9 +12,9 @@
using namespace iflytop;
#define TAG "UIScheduler"
#define MODULE_DEBUG 1
#define MODULE_DEBUG 0
#define UART_RX_OVERTIME 5
#define CMD_OVERTIME 50
#define CMD_OVERTIME 100
static ZThread uart_rx_thread;
static ZThread rx_processed_thread;
@ -45,20 +45,26 @@ __weak void UIControlerHock_PageInit() {}
/***********************************************************************************************************************
* FUNC *
***********************************************************************************************************************/
void UIControler::initialize() { //
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);
tjcUart = AppHardware::ins()->tjcUart;
UIPublicState::initialize();
m_cmdlock.init();
sendcmd("rest");
osDelay(1000);
sendcmd("page %d", pg_pStart);
}
void UIControler::initialize() { //
startSchedule();
UIControlerHock_PageInit();
}
void UIControler::pageInitialize() { UIControlerHock_PageInit(); }
void UIControler::callUsrEventCb(UIEvent* event) {
static AppEvent_t appEvent;
appEvent.type = KAE_UIEvent;
@ -187,6 +193,7 @@ bool UIControler::readFiledAsInt(uint8_t pid, uint8_t bid, const char* filedName
return true;
}
ZLOGW(TAG, "readFiledAsInt %s failed retry %d", filedName, i);
osDelay(100);
}
ZLOGE(TAG, "readFiledAsInt %s failed", filedName);
return false;
@ -387,11 +394,19 @@ bool UIControler::visEx(uint8_t pid, uint8_t bid, bool val) {
if (!component->isPosInited) {
suc = readFiledAsInt(pid, bid, "x", &component->oldPosX);
if (!suc) {
ZLOGE(TAG, "fatal error, reboot");
for (size_t i = 0; i < 10; i++) {
ZLOGE(TAG, "fatal error, reboot");
osDelay(1000);
}
NVIC_SystemReset();
}
suc = readFiledAsInt(pid, bid, "y", &component->oldPosY);
if (!suc) {
ZLOGE(TAG, "fatal error, reboot");
for (size_t i = 0; i < 10; i++) {
ZLOGE(TAG, "fatal error, reboot");
osDelay(1000);
}
NVIC_SystemReset();
}
}
@ -491,11 +506,13 @@ void UIControler::popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvali
sendcmd("p[%d].b[%d].val=%d", pg_keybMutSel, ob_keybMutSel_loadpageid, fromPid);
sendcmd("p[%d].b[%d].val=%d", pg_keybMutSel, ob_keybMutSel_loadcmpid, fromBid);
sendcmd("p[%d].b[%d].val=%d", pg_keybMutSel, ob_keybMutSel_ctent, selectvalindex);
chpage(pg_keybMutSel, false); // 先切换页面,再设置选项
sendcmd("p[%d].b[%d].path=\"%s\"", pg_keybMutSel, ob_keybMutSel_ctent, selectvals);
chpage(pg_keybMutSel, false);
}
void UIControler::popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals) {
void UIControler::popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* keyboardName, const char** selectvals) {
int selectValsNum = 0;
uint8_t pgNum = pg_keybMutSelFix;
@ -558,17 +575,23 @@ void UIControler::popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectv
sendcmd("p[%d].b[%d].val=%d", pgNum, ob_keybMutSelFix_val, selectvalindex);
sendcmd("p[%d].b[%d].txt=%d", pgNum, ob_keybMutSelFix_txt, selectvals[selectvalindex]);
sendcmd("p[%d].b[%d].txt=\"%s\"", pgNum, ob_keybMutSelFix_keybtil, keyboardName);
chpage(pgNum, false); // 先切换页面,再设置选项
// 设置选项
for (int i = 0; i < selectValsNum; i++) {
visEx(pgNum, selbid_table[i], true);
// visEx(pgNum, selbid_table[i], true);
sendcmd("p[%d].b[%d].txt=\"%s\"", pgNum, selbid_table[i], selectvals[i]);
movePicToXY(pgNum, selmaskbid_table[i], -100, -100);
}
// 清空多余的选项
for (int i = selectValsNum; i < sizeof(selbid_table) / sizeof(selbid_table[0]); i++) {
movePicTo(pgNum, selmaskbid_table[i], selbid_table[i]);
sendcmd("p[%d].b[%d].txt=\"\"", pgNum, selbid_table[i], selectvals[i]);
}
chpage(pgNum, false);
for (int i = 0; i < selectValsNum; i++) {
movePicToXY(pgNum, selmaskbid_table[i], -100, -100);
}
for (int i = selectValsNum; i < sizeof(selbid_table) / sizeof(selbid_table[0]); i++) {
movePicTo(pgNum, selmaskbid_table[i], selbid_table[i]);
}
}

6
usrc/uicontroler/ui_controler.hpp

@ -33,8 +33,9 @@ class UIControler {
static UIControler instance;
return &instance;
}
void postInitialize();
void initialize();
void pageInitialize();
int getNowPage() { return UIStateMgr::ins()->nowPage; }
void chpage(uint8_t page, bool triggerEvent);
bool echo(uint8_t tx, uint8_t* rx);
@ -77,6 +78,7 @@ class UIControler {
***********************************************************************************************************************/
void popWin(UIPopWinType_t type, const char* info, function<void(bool)> onConfirm);
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 setLoadingState(bool state) {
@ -97,7 +99,7 @@ class UIControler {
void popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals);
void popKeyBMutSel(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* selectvals);
void popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char** selectvals);
void popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* keyboardName,const char** selectvals);
/***********************************************************************************************************************
* UTILS *

Loading…
Cancel
Save