zhaohe 8 months ago
parent
commit
2de42e3119
  1. 15
      README.md
  2. BIN
      ui/hand_acid_mainboard_ui.HMI
  3. 2
      usrc/project_configs.h
  4. 66
      usrc/service/app_core.cpp
  5. 3
      usrc/service/remote_controler_event_processer.cpp
  6. 2
      usrc/service/remote_controler_event_processer.hpp
  7. 5
      usrc/service/remote_controler_state_sync_service.cpp
  8. 9
      usrc/service/valve_state_ctrl_service.cpp
  9. 1
      usrc/service/valve_state_ctrl_service.hpp
  10. 24
      usrc/uicontroler/page/mupage/muCHSetting_page.cpp
  11. 37
      usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp

15
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,目前串口有点多,中断接收有点吃不消了。
```

BIN
ui/hand_acid_mainboard_ui.HMI

2
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 15 // 最大任务数量
#define SDK_MAX_TASK 18 // 最大任务数量
/***********************************************************************************************************************
* FLASH分区 *

66
usrc/service/app_core.cpp

@ -117,43 +117,10 @@ void AppCore::initialize() {
//
RemoteControlerUpper::ins()->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);

3
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;
}

2
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 {
/**

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

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

1
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() {

24
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

37
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", "扫描到设备");

Loading…
Cancel
Save