From 2de42e31199c5e301e61b7463fd1b4a66c54210f Mon Sep 17 00:00:00 2001 From: zhaohe Date: Wed, 27 Nov 2024 18:00:33 +0800 Subject: [PATCH] update --- README.md | 15 ++++- ui/hand_acid_mainboard_ui.HMI | Bin 18638442 -> 18638442 bytes usrc/project_configs.h | 2 +- usrc/service/app_core.cpp | 66 +++++++-------------- usrc/service/remote_controler_event_processer.cpp | 3 +- usrc/service/remote_controler_event_processer.hpp | 2 - .../remote_controler_state_sync_service.cpp | 5 +- usrc/service/valve_state_ctrl_service.cpp | 9 ++- usrc/service/valve_state_ctrl_service.hpp | 1 + usrc/uicontroler/page/mupage/muCHSetting_page.cpp | 24 ++++---- .../page/mupage/muReCtrlerBind_page.cpp | 37 +++++++++--- 11 files changed, 91 insertions(+), 73 deletions(-) diff --git a/README.md b/README.md index d05f8df..ff906a2 100644 --- a/README.md +++ b/README.md @@ -55,13 +55,24 @@ UI ``` 量产时注意事项: 1. 量产时,需要注意注意掉显示密码的相关日志 + 2. 考虑干掉蓝牙通信,换成2.4g按键,便宜且简单 + 3. 蓝牙主机扫描,停止扫描,做成停止上报扫描结果。(虽然依然在扫描) - - 2. 如果从屏幕读取状态失败,则自动重启设备 + 4. 如果从屏幕读取状态失败,则自动重启设备 ``` ``` BUG: 1. 数字键盘按下任意键,会清除输入(这是正确的),但会忽略掉本次输入 +``` + +``` + 蓝牙主机BUG + 1. 无法停止扫描。 + 2. 扫描的结果没有过滤,都上报了。 + + 如果没有挂外置CAN,can发送会疯狂占用CPU导致 UI读写错误 + + 3. 考虑将所有串口接收改成DMA,目前串口有点多,中断接收有点吃不消了。 ``` \ No newline at end of file diff --git a/ui/hand_acid_mainboard_ui.HMI b/ui/hand_acid_mainboard_ui.HMI index ab9297739b588e37244a5c33a81cd10515e7652c..cdefa50ac938142d331b9f7384a0698bcf63ae61 100644 GIT binary patch delta 1424 zcmd7Q=~LBJ9LMqVy9*at1jPjN0o-dd`oL+N(V3_$HO(a>E2S{a($qE=Qu5}O0Ure; zHN6?7qLxd!MAS8}<$~>&3S?C7;Z{oJQd#c$K5=L4PvFeF-t#@@cOLv6ocbMSV(U>+ z=Qt*G$Vv4&RY}h1&}AppV`7a7r@3n5<{nKBT}p^`oUk`B-Iv+v=G>v?e=ArZ6W5-D zZKsTB5^P%AG0Xkmo}>J7ncO5}9KMAIx5!EK4BxQlc<8i0t+2*lRO5Hxf*T%q5fiEL z`;zM#*Z*`lSeOwg$_O}c!3__*h>2tbe02vJ!-a50VCiaQ>Q>#R+tpcj=uUM}S9Q}} z>aHHTTRqiFz12tesITr-mhMwO-LD7qp!#covh|Q2R*nYh5e?E{J*pvkOpj}*hUp0n z*9eW&lX^-|>lr<(Q5vl=8mnAAr*RsuJUy=o3hD(-)Fe&T6iwBOnx>bOuL2dWQ?S6h zqIbvfaix1BdACffb~U`B{%&K6Jq`0dpD~lz+m#(}%(>{C#UrYW&Iu{Tw2R*FlxoaP z(K)BJG5+X0G5z{^SsPr4*+}x@P8%aYcq~%nP}_@ zW}pbgn2DEBf>$sLvoQy+VlL((gx4@1ucH)i;7u&RLM%cV7GnvP;w`+5Wmt|CSc!M= zE>>YR)?h8(Lpk0@1wO!s2xA>S!g@ro0UzTNY{VvP#uij!D?Y_%_#9v0OMHc|u?^qg zTWrS;>_io+QG@TW3*Vy_Kj26Fgx%PKz1WBSIDmur8Fe^>!#IMYIEG*FD~{s?>hT+X z#~(O}Q#g$?_!EEOZ=A(H_!sAJ9v5&Cmv9+ZaJ3}A+?fL#myO%TW8<}nvGLi&+BC6= uvx&D!ut~IOYLjG>Y}3r9xlM{q3!58kTH2)Aq}jBxxzVZ2FK_Lfh+G5cdPPqF delta 1325 zcmd7M*K^cW7>DuS+3aQ$HVpzK%7sa094@$k3uXu)O+ZAEqM-ENJ0b*7M6zEEMToMH zl@@yMED%sOOOf6}6BP*oloAD56?=f^40rqmTzsB6@4WBDDL)yFE63I{V@3q7nKX}c zI@vgZ3X|qGyh7=&3zbaWz}0+vimUs;m6I#yVyfeq7rm37 z-nA)^v#REkU8sB2&WY}pLyB_)_cPP|C7F38nFcPzzzq*#i%K%RDP_;pcj}b-GqUnB zvJ6~^fg2vg7G-34%dR{N2ce9trR$Zg`f8wtdP$AcSWVPa&GfRGtA$$X6}8f<%_AReogK1fS_zB`+ElKE@}= z!!%6C49vu*n1$KM$7lE)a}dB>%tHZ!_yY5>01L4Qi&2OrSc+v>julvmRalKRSc`R7 zj}6#}P1uYr*otk~ju3WWCw8F-yRipf;w$V$7{!QSANJz_4&rMZ!eJc2Q5?f@oWMz( z!fBjA3C`ji&f@|u;u~DTxA+d<<1&806_nyC%5V+WaRWc%C)~s>+{PW0<7fPWySRs6 zaUW6qhTriA9^g;>g}?C+{>6Xz9~F3rM>C^glMfr0O^l7(#$yv}initialize(); // 遥控器初始化 - RemoteControlerUpper::ins()->startSchedule(); RemoteControlerEventProcesser::ins()->initialize(); - - // ValveStateSyncService::ins()->initialize(ZCAN1::ins()); // 阀门状态同步服务初始化 - // ValveStateSyncService::ins()->startSync(); - PumpCtrlService::ins()->initialize(); // 泵控制服务初始化 - // RemoteControlerStateSyncService::ins()->initialize(); // 遥控器状态同步服务初始化 - // RemoteControlerStateSyncService::ins()->startSync(); - - // { - // 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; - // } - // } - - RCTRL->resetMasterBoard(); - RCTRL->resetMasterBoard(); - RCTRL->resetMasterBoard(); - RCTRL->resetMasterBoard(); - - { - ZLOGI(TAG, "start scan %s", BLENAME); - for (size_t i = 0;; i++) { - if (i != 0) ZLOGI(TAG, "re start scan %s %d", BLENAME, i); - bool suc = RCTRL->startScan(BLENAME, false); // 输入一个错误的设备名,当作不扫描 - if (suc) break; - } - } - ZLOGI(TAG, "start scan end..........................................................."); - - // RCTRL->stopScan(); - while (true) { - osDelay(1); - } + ValveStateSyncService::ins()->initialize(ZCAN1::ins()); // 阀门状态同步服务初始化 + PumpCtrlService::ins()->initialize(); // 泵控制服务初始化 + RemoteControlerStateSyncService::ins()->initialize(); // 遥控器状态同步服务初始化 // UI初始化 UIControler::ins()->initialize(); @@ -163,16 +130,25 @@ void AppCore::initialize() { * 开始蓝牙扫描 * ***********************************************************************************************************************/ 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; - // } - // } + RemoteControlerUpper::ins()->startSchedule(); + // ValveStateSyncService::ins()->startSync(); + RemoteControlerStateSyncService::ins()->startSync(); - // else + + 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 { + for (size_t i = 0;; i++) { + if (i != 0) ZLOGI(TAG, "re stopScan"); + bool suc = RCTRL->stopScan(); + if (suc) break; + } + } UIControler::ins()->chpage(pg_muReCtlerBind, true); diff --git a/usrc/service/remote_controler_event_processer.cpp b/usrc/service/remote_controler_event_processer.cpp index d873b4e..361eeea 100644 --- a/usrc/service/remote_controler_event_processer.cpp +++ b/usrc/service/remote_controler_event_processer.cpp @@ -9,6 +9,7 @@ #include "uicontroler/ui_controler.hpp" // +#include "apphardware/apphardware.hpp" using namespace iflytop; #define TAG "RemoteControlerEventProcesser" @@ -64,7 +65,7 @@ void RemoteControlerEventProcesser::logevent(uint8_t* rx, int32_t len) { if (packet->cmd == kzble_report_scan_result) { zble_scan_result_t* event = (zble_scan_result_t*)packet->data; - ZLOGI(TAG, "onBleEvent -> [scanResult], name:%20s, peeradd:%s, rssi:%d, tx_power:%d", event->blename, zhex2str(event->peeradd, 6), event->rssi, event->tx_power); + // ZLOGI(TAG, "onBleEvent -> [scanResult], name:%20s, peeradd:%s, rssi:%d, tx_power:%d", event->blename, zhex2str(event->peeradd, 6), event->rssi, event->tx_power); return; } diff --git a/usrc/service/remote_controler_event_processer.hpp b/usrc/service/remote_controler_event_processer.hpp index af2d83d..f9907a6 100644 --- a/usrc/service/remote_controler_event_processer.hpp +++ b/usrc/service/remote_controler_event_processer.hpp @@ -1,7 +1,5 @@ #pragma once -#include "apphardware/apphardware.hpp" -#include "config/config.hpp" #include "uappbase/base.hpp" namespace iflytop { /** diff --git a/usrc/service/remote_controler_state_sync_service.cpp b/usrc/service/remote_controler_state_sync_service.cpp index cacad2f..03a79fc 100644 --- a/usrc/service/remote_controler_state_sync_service.cpp +++ b/usrc/service/remote_controler_state_sync_service.cpp @@ -50,7 +50,10 @@ void RemoteControlerStateSyncService::startSync() { osDelay(500); } bool suc = RCTRL->setRemoterState(runmode, workState); - if (suc) break; + if (suc) { + if (i > 0) ZLOGI(TAG, "force update remote state success"); + break; + } } } diff --git a/usrc/service/valve_state_ctrl_service.cpp b/usrc/service/valve_state_ctrl_service.cpp index b9f9c27..6f8f411 100644 --- a/usrc/service/valve_state_ctrl_service.cpp +++ b/usrc/service/valve_state_ctrl_service.cpp @@ -8,7 +8,8 @@ void ValveStateSyncService::initialize(ZCAN1* can) { m_thread.init("ValveStateSyncService-Thread"); this->can = can; lock.init(); - inited = true; + inited = true; + started = false; } void ValveStateSyncService::startSync() { @@ -30,9 +31,11 @@ void ValveStateSyncService::startSync() { } } }); + started = true; } void ValveStateSyncService::setValveState(bool state) { if (!inited) return; + if(!started) return; { zlock_guard l(lock); @@ -51,6 +54,7 @@ void ValveStateSyncService::setValveState(bool state) { void ValveStateSyncService::setValveState(int valveIndex, bool state) { if (!inited) return; + if(!started) return; if (valveIndex >= 4) { ZLOGW(TAG, "valveIndex %d out of range", valveIndex); @@ -71,6 +75,7 @@ void ValveStateSyncService::setValveState(int valveIndex, bool state) { void ValveStateSyncService::setValveState(bool state0, bool state1, bool state2, bool state3) { if (!inited) return; + if(!started) return; { zlock_guard l(lock); @@ -91,6 +96,7 @@ void ValveStateSyncService::setValveState(bool state0, bool state1, bool state2, void ValveStateSyncService::setRGBState(bool r, bool g, bool b) { if (!inited) return; + if(!started) return; { zlock_guard l(lock); @@ -105,6 +111,7 @@ void ValveStateSyncService::setRGBState(bool r, bool g, bool b) { } void ValveStateSyncService::setWarningState(bool warning) { if (!inited) return; + if(!started) return; { zlock_guard l(lock); diff --git a/usrc/service/valve_state_ctrl_service.hpp b/usrc/service/valve_state_ctrl_service.hpp index 6e5ce7a..4800413 100644 --- a/usrc/service/valve_state_ctrl_service.hpp +++ b/usrc/service/valve_state_ctrl_service.hpp @@ -20,6 +20,7 @@ class ValveStateSyncService { zmutex lock = {"ValveStateSyncServiceLock"}; bool inited = false; + bool started = false; public: static ValveStateSyncService* ins() { diff --git a/usrc/uicontroler/page/mupage/muCHSetting_page.cpp b/usrc/uicontroler/page/mupage/muCHSetting_page.cpp index f9a3e33..d927be9 100644 --- a/usrc/uicontroler/page/mupage/muCHSetting_page.cpp +++ b/usrc/uicontroler/page/mupage/muCHSetting_page.cpp @@ -81,16 +81,16 @@ class MuChSetting : public IPageProcesser { return; } - if (packet->cmd == kzble_app_report_key_event) { - int32_t keyEvent = *(int32_t*)packet->data; - if (keyEvent == hand_acid_remoter_kevent_add_liquid) { - if (m_workFlag) { - pumpStart(1); - } else { - pumpStop(); - } - } - } + // if (packet->cmd == kzble_app_report_key_event) { + // int32_t keyEvent = *(int32_t*)packet->data; + // if (keyEvent == hand_acid_remoter_kevent_add_liquid) { + // if (m_workFlag) { + // pumpStart(1); + // } else { + // pumpStop(); + // } + // } + // } }); } @@ -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) { // 速度 @@ -182,8 +182,6 @@ class MuChSetting : public IPageProcesser { } } - - if (ACID_CHOOS_ENAME_BIND_CFG && bid == ACID_CHOOS_ENAME_BIND_CFG->cfgbid) { /** * @brief 更新通道名称 diff --git a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp index 05b0f89..dd910b8 100644 --- a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp +++ b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp @@ -14,6 +14,7 @@ namespace iflytop { using namespace std; #define TAG "muReCtrlerBindPage" static bool m_scaning; +static bool m_bindSuc; class muReCtrlerBindPage : public IPageProcesser { private: public: @@ -21,16 +22,16 @@ class muReCtrlerBindPage : public IPageProcesser { virtual void initialize() override { IPageProcesser::initialize(); - setText(ob_muReCtlerBind_bleCliName, "%s", ""); + setText(ob_muReCtlerBind_bleCliName, "%s", DeviceSettingDao::get()->bleClientName); setText(ob_muReCtlerBind_bleEvent, "%s", ""); - setText(ob_muReCtlerBind_infoWin, "%s", ""); + setText(ob_muReCtlerBind_infoWin, "%s", "请点击扫描手柄,进行绑定"); RCTRL->regOnReport([this](uint8_t* rx, int32_t len) { zble_proto_packet_t* packet = (zble_proto_packet_t*)rx; if (UIS->getNowPage() != thisPage) { return; } - + if (packet->cmd == kzble_app_report_key_event) { int32_t keyEvent = *(int32_t*)packet->data; if (keyEvent == hand_acid_remoter_kevent_add_liquid) { @@ -39,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) { + if (keyEvent == hand_acid_remoter_kevent_reflux) { //连按两次为回流事件I setText(ob_muReCtlerBind_bleEvent, "液路回流"); } if (keyEvent == hand_acid_remoter_kevent_preFilling) { @@ -54,8 +55,14 @@ class muReCtrlerBindPage : public IPageProcesser { virtual void onPageLoad(OnPageLoadContext* cxt) override { return; }; virtual void onBackKey() override { if (m_scaning) { - RCTRL->startScan("XXXXXXXXX", false); // 相当于停止扫描 + RCTRL->stopScan(); // 相当于停止扫描 + m_scaning = false; + } + + if (m_bindSuc) { + RCTRL->startScan(DeviceSettingDao::get()->bleClientName, true); } + UIControler::ins()->chpage(pg_navi, true); }; @@ -63,16 +70,32 @@ class muReCtrlerBindPage : public IPageProcesser { virtual void onClickRelease(uint8_t bid, uint8_t val, const char* text) override { if (bid == ob_muReCtlerBind_scan) { ZLOGI(TAG, "bleScan"); - bool suc = RCTRL->startScan(BLENAME, true); + bool suc = false; + for (size_t i = 0; i < 3; i++) { + if (suc) break; + suc = RCTRL->startScan(BLENAME, true); + } + if (suc) { setText(ob_muReCtlerBind_infoWin, "%s", "扫描中..."); + setText(ob_muReCtlerBind_bleCliName, "%s", ""); m_scaning = true; + } else { + setText(ob_muReCtlerBind_infoWin, "%s", "扫描失败"); + m_scaning = false; } - m_scaning = true; } } virtual void onAppEvent(AppEvent_t* event) override { + if (!m_scaning) { + return; + } + + if (thisPage != UIS->getNowPage()) { + return; + } + if (event->type == kAE_RemoterConnectedEvent) { ZLOGI(TAG, "ble connect success"); setText(ob_muReCtlerBind_infoWin, "%s", "扫描到设备");