Browse Source

update

sunlight
zhaohe 11 months ago
parent
commit
ff6c5563c1
  1. 50
      README.md
  2. 1
      uappbase/bean/event.hpp
  3. 67
      uappbase/service/gstate_mgr.cpp
  4. 5
      uappbase/service/gstate_mgr.hpp
  5. BIN
      ui/hand_acid_mainboard_ui.HMI
  6. 90
      usrc/service/app_core.cpp
  7. 1
      usrc/service/app_core.hpp
  8. 11
      usrc/service/front_end_controler.cpp
  9. 4
      usrc/service/front_end_controler.hpp
  10. 116
      usrc/service/page/Page_main.cpp
  11. 4
      usrc/service/page/Page_main.hpp
  12. 11
      usrc/service/page/page_processer.hpp
  13. 16
      usrc/service/remote_controler.cpp
  14. 110
      usrc/service/remote_controler_event_processer.cpp
  15. 30
      usrc/service/remote_controler_event_processer.hpp

50
README.md

@ -5,40 +5,24 @@
```
```
/**
* @brief
*
*
* 回流按键:短按一下, 回流
* 快按两下, 填充管路
*
*
* 加液按键短按,加液体
* 加液按键长按,切换模式,点动模式,连续自动模式
*
* 模式1 点动
* 模式2 连续自动
*
*
* 灯:
* 颜色,区分不同模式。
* 闪烁,状态。
*
* 连接,无连接
* 唤醒,非唤醒
* 模式,
* 状态,
*
*
*/
/****************************************************************************/
1. 按下按键,触发泵机动作
2. 蓝牙配对功能
任务:
1. 完成主页
支持触摸按键修改模式
对接gstate
2. 完成unlogin
3. 完成加酸间隔设置
4. 完成高级配置页面,支持泵机转速和ml的转换关系配置,蓝牙扫描并绑定
5. 完成用户信息页面
6. 完成用户管理页面
```
```
UI修改项:
1. 登录页面去掉 login按键的自动切换页面指令
2. 主页,调整遥控器和阀门控制板状态的位置
3. 去掉加载页面自动跳转功能
4. 主页控制模式,支持触摸
5. 调整5s的位置
```

1
uappbase/bean/event.hpp

@ -6,6 +6,7 @@ namespace iflytop {
using namespace std;
typedef enum {
kAppEvent_RunModeChangeEvent,
kAppEvent_RemoterConnectStateChangeEvent,
kAppEvent_PumpWorkStateChangeEvent,
} AppEventType_t;

67
uappbase/service/gstate_mgr.cpp

@ -6,7 +6,10 @@ using namespace std;
using namespace iflytop;
#define GSM GStateMgr::ins()
void GStateMgr::initialize() { m_mutex.init(); }
void GStateMgr::setLogin(bool isAdmin, const char* loginUsr) {
zlock_guard l(m_mutex);
m_isLogin = true;
m_isAdmin = isAdmin;
if (loginUsr) {
@ -14,27 +17,71 @@ void GStateMgr::setLogin(bool isAdmin, const char* loginUsr) {
}
}
void GStateMgr::setUnLogin() {
zlock_guard l(m_mutex);
m_isLogin = false;
m_isAdmin = false;
memset(m_loginUsr, 0, MAX_USR_NAME_SIZE + 1);
}
bool GStateMgr::isLogin() { return m_isLogin; }
bool GStateMgr::isAdmin() { return m_isAdmin; }
const char* GStateMgr::getLoginUsr() { return m_loginUsr; }
bool GStateMgr::isLogin() {
zlock_guard l(m_mutex);
return m_isLogin;
}
bool GStateMgr::isAdmin() {
zlock_guard l(m_mutex);
return m_isAdmin;
}
const char* GStateMgr::getLoginUsr() {
zlock_guard l(m_mutex);
return m_loginUsr;
}
void GStateMgr::setAcidState(int32_t state) {
zlock_guard l(m_mutex);
void GStateMgr::setAcidState(int32_t state) { m_AcidState = state; }
void GStateMgr::setRemoterS(int32_t state) { m_RemoterS = state; }
m_AcidState = state;
}
void GStateMgr::setRemoterS(int32_t state) {
zlock_guard l(m_mutex);
m_RemoterS = state;
AppEventBus::ins()->pushEvent(createAppEvent(kAppEvent_RemoterConnectStateChangeEvent));
}
void GStateMgr::setRunMode(hand_acid_mode_t mode) {
zlock_guard l(m_mutex);
if (m_RunMode != mode) {
m_RunMode = mode;
AppEventBus::ins()->pushEvent(createAppEvent(kAppEvent_RunModeChangeEvent));
}
}
void GStateMgr::changeToNextRunMode() {
zlock_guard l(m_mutex);
int32_t GStateMgr::getAcidState() { return m_AcidState; }
int32_t GStateMgr::getRemoterS() { return m_RemoterS; }
hand_acid_mode_t GStateMgr::getRunMode() { return m_RunMode; }
if (m_RunMode == khand_acid_m_jog_mode) {
setRunMode(khand_acid_m_continuous_mode);
} else {
setRunMode(khand_acid_m_jog_mode);
}
}
void GStateMgr::setPumpSelectState(int32_t index, bool state) { pumpSelectState[index] = state; }
bool GStateMgr::getPumpSelectState(int32_t index) { return pumpSelectState[index]; }
int32_t GStateMgr::getAcidState() {
zlock_guard l(m_mutex);
return m_AcidState;
}
int32_t GStateMgr::getRemoterS() {
zlock_guard l(m_mutex);
return m_RemoterS;
}
hand_acid_mode_t GStateMgr::getRunMode() {
zlock_guard l(m_mutex);
return m_RunMode;
}
void GStateMgr::setPumpSelectState(int32_t index, bool state) {
zlock_guard l(m_mutex);
pumpSelectState[index] = state;
}
bool GStateMgr::getPumpSelectState(int32_t index) {
zlock_guard l(m_mutex);
return pumpSelectState[index];
}

5
uappbase/service/gstate_mgr.hpp

@ -22,12 +22,16 @@ class GStateMgr {
bool pumpSelectState[4] = {false};
zmutex m_mutex = {"GStateMgr"};
public:
static GStateMgr* ins() {
static GStateMgr instance;
return &instance;
}
void initialize();
void setLogin(bool isAdmin, const char* loginUsr);
void setUnLogin();
@ -38,6 +42,7 @@ class GStateMgr {
void setAcidState(int32_t state);
void setRemoterS(int32_t state);
void setRunMode(hand_acid_mode_t mode);
void changeToNextRunMode();
int32_t getAcidState();
int32_t getRemoterS();

BIN
ui/hand_acid_mainboard_ui.HMI

90
usrc/service/app_core.cpp

@ -3,6 +3,7 @@
#include <stddef.h>
#include <stdio.h>
#include "remote_controler_event_processer.hpp"
#include "service/front_end_controler.hpp"
#include "service/pump_ctrl_service.hpp"
#include "service/remote_controler.hpp"
@ -48,83 +49,12 @@ void AppCore::debugLightLoop() {
}
}
}
void AppCore::processKeyEventFromRemoter(hand_acid_remoter_key_event_t keyEvent) {
/**
* @brief
*/
if (PUMPCS->isWorking()) {
PUMPCS->stop();
RCTRL->setRemoterState(GSM->getRunMode(), PUMPCS->isWorking());
} else {
if (keyEvent == hand_acid_remoter_kevent_add_liquid) {
//
if (GSM->getRunMode() == khand_acid_m_jog_mode) {
PUMPCS->moveOnce();
} else if (GSM->getRunMode() == khand_acid_m_continuous_mode) {
PUMPCS->autoMoveMutiTimes();
}
} else if (keyEvent == hand_acid_remoter_kevent_change_next_mode) {
// 修改工作模式
if (GSM->getRunMode() == khand_acid_m_jog_mode) {
GSM->setRunMode(khand_acid_m_continuous_mode);
} else if (GSM->getRunMode() == khand_acid_m_continuous_mode) {
GSM->setRunMode(khand_acid_m_jog_mode);
}
} else if (keyEvent == hand_acid_remoter_kevent_reflux) {
// 回流
PUMPCS->reflux();
} else if (keyEvent == hand_acid_remoter_kevent_preFilling) {
// 管路填充
PUMPCS->acidPrefilling();
}
}
}
void blelogdump(uint8_t* rx, int32_t len) {
//
zble_proto_packet_t* packet = (zble_proto_packet_t*)rx;
// ZLOGI(TAG, "onEvent: index:[%d],from:%d,to:%d cmd:%d", packet->frameIndex, packet->from, packet->to, packet->cmd);
if (packet->cmd == kzble_report_connected_event) {
zble_connected_event_t* event = (zble_connected_event_t*)packet->data;
ZLOGI(TAG, "onBleEvent -> [connected], name:%20s, peeradd:%s, rssi:%d, tx_power:%d", event->blename, zhex2str(event->peeradd, 6), event->rssi, event->tx_power);
return;
}
if (packet->cmd == kzble_report_disconnect_event) {
ZLOGI(TAG, "onBleEvent -> disconnect");
return;
}
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);
return;
}
if (packet->cmd == kzble_report_heart) {
zble_heart_t* event = (zble_heart_t*)packet->data;
// ZLOGI(TAG, "onBleEvent -> [heart], from:%s, resetFlag:%d, connectedFlag:%d, power:%d", zble_proto_role_2_str(packet->from), event->reset_flag, event->connected_flag, event->power);
return;
}
if (packet->cmd == kzble_report_power_on) {
ZLOGI(TAG, "onBleEvent -> [power_on], from:%s", zble_proto_role_2_str(packet->from));
return;
}
if (packet->cmd == kzble_app_report_key_event) {
int32_t keyEvent = *(int32_t*)packet->data;
ZLOGI(TAG, "onBleEvent -> [keyEvent] : %s(%d)", hand_acid_remoter_key_event_2_str(keyEvent), keyEvent);
return;
}
ZLOGI(TAG, "[process-thread] rx unkown event(%d) : %s", packet->cmd, zhex2str(rx, len));
}
void AppCore::appsetup() {
/***********************************************************************************************************************
* INIT *
***********************************************************************************************************************/
GStateMgr::ins()->initialize();
AppEventBus::ins()->initialize();
ConfigService::ins()->initialize();
ZCAN1::ins()->init();
@ -139,25 +69,19 @@ void AppCore::appsetup() {
PUMPCS->initialize();
RemoteControlerStateSyncService::ins()->initialize();
// Page
Page_login::ins()->initialize(); //
Page_main::ins()->initialize(); //
Page_keybAcidCh::ins()->initialize();
Page_muAcidType::ins()->initialize();
// EventProcesser
RemoteControlerEventProcesser::ins()->initialize();
/***********************************************************************************************************************
* REG_EVENT_HANDLER *
***********************************************************************************************************************/
RCTRL->regOnReport([this](uint8_t* rx, int32_t len) {
zble_proto_packet_t* packet = (zble_proto_packet_t*)rx;
// ZLOGI(TAG, "[] rx event : %s", zhex2str(rx, len));
blelogdump(rx, len);
if (packet->cmd == kzble_app_report_key_event) {
int32_t keyEvent = *(int32_t*)packet->data;
processKeyEventFromRemoter((hand_acid_remoter_key_event_t)keyEvent);
return;
}
});
//

1
usrc/service/app_core.hpp

@ -21,7 +21,6 @@ class AppCore {
void debugLightLoop();
public:
void processKeyEventFromRemoter(hand_acid_remoter_key_event_t keyEvent);
};
} // namespace iflytop

11
usrc/service/front_end_controler.cpp

@ -7,9 +7,11 @@
#include "tjc/tjc_constant.hpp"
using namespace iflytop;
#define TAG "UIScheduler"
#define MODULE_DEBUG 0
#define CMD_OVERTIME 50
#define DEBUG 0
static ZThread uart_rx_thread;
static ZThread rx_processed_thread;
@ -20,8 +22,6 @@ static ZThread eventProcessThread;
static bool m_isWaitingForAck;
static UART_HandleTypeDef* tjcUart;
#define TAG "UIScheduler"
static const char* zhex2str(uint8_t* data, size_t len) {
static char buf[256];
memset(buf, 0, sizeof(buf));
@ -48,6 +48,7 @@ void FrontEndControler::startSchedule() {
tjcUart->USR_UartITRxBuf = rxbuf;
tjcUart->USR_UartITRxBufSize = 128;
tjcUart->USR_UartITRxOff = 0;
HAL_UART_Receive_IT(tjcUart, &tjcUart->USR_UartITRxBufCache, 1);
while (1) {
static uint8_t processbuf[128];
@ -97,6 +98,7 @@ void FrontEndControler::startSchedule() {
event_cache.eventId = packet.data[0];
event_cache.pid = packet.data[1];
event_cache.bid = 0;
m_nowPage = packet.data[1];
callUsrEventCb(&event_cache);
} else {
event_cache.eventId = packet.data[0];
@ -115,7 +117,7 @@ void FrontEndControler::startSchedule() {
void FrontEndControler::processScreenRxPacket(uint8_t* data, size_t len) {
// 判断包是否合法
#if DEBUG
#if MODULE_DEBUG
ZLOGI(TAG, "[rx-thread] : rx :%s(%d)", zhex2str(data, len), len);
#endif
@ -394,3 +396,4 @@ void FrontEndControler::setEnumComponentState(uint8_t pid, uint8_t bid, int32_t
// 枚举类型使用动画组件
sendcmd("p[%d].b[%d].tim=%d", pid, bid, state * 50);
}
void FrontEndControler::setAph(uint8_t pid, uint8_t bid, int32_t state) { sendcmd("p[%d].b[%d].aph=%d", pid, bid, state); }

4
usrc/service/front_end_controler.hpp

@ -28,6 +28,8 @@ class FrontEndControler {
on_usr_event_cb_t m_cb[50];
int32_t m_ncb = 0;
int32_t m_nowPage = 0;
public:
FrontEndControler() {};
~FrontEndControler() {};
@ -39,6 +41,7 @@ class FrontEndControler {
void initialize();
void regOnUsrEventCb(on_usr_event_cb_t onclik);
int getNowPage() { return m_nowPage; }
void startSchedule();
@ -64,6 +67,7 @@ class FrontEndControler {
void setTouchEnableState(uint8_t bid, uint8_t enable);
void setEnumComponentState(uint8_t pid, uint8_t bid, int32_t state);
void setAph(uint8_t pid, uint8_t bid, int32_t state); // 组件透明度,最大127,设置为0则隐藏组件
void sendcmd(const char* format, ...);
private:

116
usrc/service/page/Page_main.cpp

@ -1,52 +1,63 @@
#include "Page_main.hpp"
using namespace iflytop;
#define PAGE pg_main
#define OBJ(name) ob_main_##name
#define TAG "Page_main"
#define PAGE pg_main
#define TAG "Page_main"
#define ADMIN_MENU_ID pg_menuAdmin2
#define USR_MENU_ID pg_menuUsr
static CfgItermCache cfgcache;
/**
* @brief
*
* 1.
* 2.()
*
*/
int32_t Page_main::getPageNum() { return PAGE; }
void Page_main::OnPageLoad() {
// 设置酸液种类选择组件是否使能
if (CS->getInt(kcfg_lockAcidName) == 1) {
UIS->setTouchEnableState(ob_main_acidname0, 0);
UIS->setTouchEnableState(ob_main_acidname1, 0);
UIS->setTouchEnableState(ob_main_acidname2, 0);
UIS->setTouchEnableState(ob_main_acidname3, 0);
} else {
// 只有管理员能够修改,酸液通道名称
if (GSM->isAdmin()) {
UIS->setTouchEnableState(ob_main_acidname0, 1);
UIS->setTouchEnableState(ob_main_acidname1, 1);
UIS->setTouchEnableState(ob_main_acidname2, 1);
UIS->setTouchEnableState(ob_main_acidname3, 1);
} else {
UIS->setTouchEnableState(ob_main_acidname0, 0);
UIS->setTouchEnableState(ob_main_acidname1, 0);
UIS->setTouchEnableState(ob_main_acidname2, 0);
UIS->setTouchEnableState(ob_main_acidname3, 0);
}
// 更新酸液种类
UIS->setVal(PAGE, OBJ(acidname0), CS->getStr(kcfg_acidChooseName0, &cfgcache));
UIS->setVal(PAGE, OBJ(acidname1), CS->getStr(kcfg_acidChooseName1, &cfgcache));
UIS->setVal(PAGE, OBJ(acidname2), CS->getStr(kcfg_acidChooseName2, &cfgcache));
UIS->setVal(PAGE, OBJ(acidname3), CS->getStr(kcfg_acidChooseName3, &cfgcache));
UIS->setVal(PAGE, ob_main_acidname0, CS->getStr(kcfg_acidChooseName0, &cfgcache));
UIS->setVal(PAGE, ob_main_acidname1, CS->getStr(kcfg_acidChooseName1, &cfgcache));
UIS->setVal(PAGE, ob_main_acidname2, CS->getStr(kcfg_acidChooseName2, &cfgcache));
UIS->setVal(PAGE, ob_main_acidname3, CS->getStr(kcfg_acidChooseName3, &cfgcache));
// 更新加液体积
UIS->setVal(PAGE, OBJ(acideval0), CS->getStr(kcfg_acideval0, &cfgcache));
UIS->setVal(PAGE, OBJ(acideval1), CS->getStr(kcfg_acideval1, &cfgcache));
UIS->setVal(PAGE, OBJ(acideval2), CS->getStr(kcfg_acideval2, &cfgcache));
UIS->setVal(PAGE, OBJ(acideval3), CS->getStr(kcfg_acideval3, &cfgcache));
// 更新状态
UIS->setEnumComponentState(PAGE, OBJ(AcidState), GSM->getAcidState()); // 酸液桶是否在线
UIS->setEnumComponentState(PAGE, OBJ(RemoterS), GSM->getRemoterS()); // 遥控器是否在线
UIS->setEnumComponentState(PAGE, OBJ(RunMode), (int32_t)GSM->getRunMode()); // 运行模式
UIS->setVal(PAGE, OBJ(acidch0), GSM->getPumpSelectState(0));
UIS->setVal(PAGE, OBJ(acidch1), GSM->getPumpSelectState(1));
UIS->setVal(PAGE, OBJ(acidch2), GSM->getPumpSelectState(2));
UIS->setVal(PAGE, OBJ(acidch3), GSM->getPumpSelectState(3));
UIS->setVal(PAGE, ob_main_acideval0, CS->getStr(kcfg_acideval0, &cfgcache));
UIS->setVal(PAGE, ob_main_acideval1, CS->getStr(kcfg_acideval1, &cfgcache));
UIS->setVal(PAGE, ob_main_acideval2, CS->getStr(kcfg_acideval2, &cfgcache));
UIS->setVal(PAGE, ob_main_acideval3, CS->getStr(kcfg_acideval3, &cfgcache));
// 更新顶部状态栏
UIS->setEnumComponentState(PAGE, ob_main_AcidState, GSM->getAcidState()); // 酸液锁是否在线
UIS->setAph(PAGE, ob_main_AcidState, 0); // 暂时隐藏掉Aph
UIS->setEnumComponentState(PAGE, ob_main_RemoterS, GSM->getRemoterS()); // 遥控器是否在线
// 更新底部状态栏
UIS->setEnumComponentState(PAGE, ob_main_RunMode, (int32_t)GSM->getRunMode()); // 运行模式
UIS->setVal(PAGE, ob_main_acidch0, GSM->getPumpSelectState(0));
UIS->setVal(PAGE, ob_main_acidch1, GSM->getPumpSelectState(1));
UIS->setVal(PAGE, ob_main_acidch2, GSM->getPumpSelectState(2));
UIS->setVal(PAGE, ob_main_acidch3, GSM->getPumpSelectState(3));
// 时间位置暂时显示版本号
UIS->setVal(PAGE, OBJ(clock), "version:%s", APP_VERSION);
UIS->setVal(PAGE, ob_main_clock, "", APP_VERSION);
// UIS->setVal(PAGE, ob_main_clock, "版本:%s", APP_VERSION);
// 根据当前登录用户设置菜单页面
if (GStateMgr::ins()->isAdmin()) {
@ -56,46 +67,63 @@ void Page_main::OnPageLoad() {
}
}
void Page_main::OnAppEvent(AppEvent_t* event) {
if (event->type == kAppEvent_RunModeChangeEvent) {
UIS->setEnumComponentState(PAGE, ob_main_RunMode, (int32_t)GSM->getRunMode());
}
if (event->type == kAppEvent_RemoterConnectStateChangeEvent) {
UIS->setEnumComponentState(PAGE, ob_main_RemoterS, GSM->getRemoterS());
}
return;
};
void Page_main::OnInputFieldContentChange(uint8_t bid, const char* text) {
// 更新酸液每次分配设定值
if (bid == OBJ(acideval0)) {
if (bid == ob_main_acideval0) {
processAcidevalUpdateEvent(bid, text, 0, kcfg_acideval0);
} else if (bid == OBJ(acideval1)) {
} else if (bid == ob_main_acideval1) {
processAcidevalUpdateEvent(bid, text, 1, kcfg_acideval1);
} else if (bid == OBJ(acideval2)) {
} else if (bid == ob_main_acideval2) {
processAcidevalUpdateEvent(bid, text, 2, kcfg_acideval2);
} else if (bid == OBJ(acideval3)) {
} else if (bid == ob_main_acideval3) {
processAcidevalUpdateEvent(bid, text, 3, kcfg_acideval3);
}
// 更新酸液种类
else if (bid == OBJ(acidname0)) {
// 修改酸液名称
else if (bid == ob_main_acidname0) {
ZLOGI(TAG, "acidname0:%s", text);
CS->setcfgAndFlush(kcfg_acidChooseName0, text);
} else if (bid == OBJ(acidname1)) {
} else if (bid == ob_main_acidname1) {
ZLOGI(TAG, "acidname1:%s", text);
CS->setcfgAndFlush(kcfg_acidChooseName1, text);
} else if (bid == OBJ(acidname2)) {
} else if (bid == ob_main_acidname2) {
ZLOGI(TAG, "acidname2:%s", text);
CS->setcfgAndFlush(kcfg_acidChooseName2, text);
} else if (bid == OBJ(acidname3)) {
} else if (bid == ob_main_acidname3) {
ZLOGI(TAG, "acidname3:%s", text);
CS->setcfgAndFlush(kcfg_acidChooseName3, text);
}
}
void Page_main::OnButton(uint8_t bid, uint8_t val) {}
void Page_main::OnDoubleStateButton(uint8_t bid, uint8_t val) {
// 更新泵选择状态
if (bid == OBJ(acidch0)) {
void Page_main::OnButton(uint8_t bid, uint8_t val) {
if (bid == ob_main_RunMode) {
// 切换模式
GSM->changeToNextRunMode();
} else if (bid == ob_main_acidch0) {
// 选中(取消选中)加酸泵0
ZLOGI(TAG, "choose acid ch%d,%d", 0, val);
GSM->setPumpSelectState(0, val);
} else if (bid == OBJ(acidch1)) {
} else if (bid == ob_main_acidch1) {
// 选中(取消选中)加酸泵1
ZLOGI(TAG, "choose acid ch%d,%d", 1, val);
GSM->setPumpSelectState(1, val);
} else if (bid == OBJ(acidch2)) {
} else if (bid == ob_main_acidch2) {
// 选中(取消选中)加酸泵2
ZLOGI(TAG, "choose acid ch%d,%d", 2, val);
GSM->setPumpSelectState(2, val);
} else if (bid == OBJ(acidch3)) {
} else if (bid == ob_main_acidch3) {
// 选中(取消选中)加酸泵3
ZLOGI(TAG, "choose acid ch%d,%d", 3, val);
GSM->setPumpSelectState(3, val);
}

4
usrc/service/page/Page_main.hpp

@ -18,9 +18,9 @@ class Page_main : public IPageProcesser {
virtual int32_t getPageNum() override;
virtual void OnPageLoad() override;
virtual void OnInputFieldContentChange(uint8_t bid, const char* text) override;
virtual void OnButton(uint8_t bid, uint8_t val) override;
virtual void OnDoubleStateButton(uint8_t bid, uint8_t val) override;
virtual void OnInputFieldContentChange(uint8_t bid, const char* text) override;
virtual void OnAppEvent(AppEvent_t* event) override;
private:
void processAcidevalUpdateEvent(uint8_t bid, const char* text, int ch, config_index_t cfgid);

11
usrc/service/page/page_processer.hpp

@ -21,7 +21,7 @@ class IPageProcesser {
// Ò³Ãæ¼ÓÔØÊ¼þ
OnPageLoad();
} else if (event->eventId == tjc::kpt_double_state_button_event) {
OnDoubleStateButton(event->bid, event->d.double_state_button.val);
OnButton(event->bid, event->d.double_state_button.val);
} else if (event->eventId == tjc::kpt_button_event) {
OnButton(event->bid, event->d.button_event.val);
} else if (event->eventId == tjc::kpt_inputfield_content_change_event) {
@ -32,6 +32,13 @@ class IPageProcesser {
OnUnLoginButtonClick(event->bid);
}
});
AppEventBus::ins()->regOnEvent([this](AppEvent_t* event) {
if (UIS->getNowPage() != getPageNum()) {
return;
}
OnAppEvent(event);
});
}
private:
@ -40,9 +47,9 @@ class IPageProcesser {
virtual void OnPageLoad() { return; };
virtual void OnInputFieldContentChange(uint8_t bid, const char* text) { return; };
virtual void OnButton(uint8_t bid, uint8_t val) { return; };
virtual void OnDoubleStateButton(uint8_t bid, uint8_t val) { return; };
virtual void OnLoginButtonClick(uint8_t bid, const char* userName, const char* passwd) { return; };
virtual void OnUnLoginButtonClick(uint8_t bid) { return; };
virtual void OnAppEvent(AppEvent_t* event) { return; };
};
} // namespace iflytop

16
usrc/service/remote_controler.cpp

@ -3,11 +3,11 @@
#include "app_protocols/ble_through/ble_proto_utils.h"
using namespace iflytop;
#define UART_RX_OVERTIME 200
#define TAG "RemoteControler"
#define TAG "RemoteControler"
#define MODULE_DEBUG 0
#define CMD_OVERTIME 500
#define DEBUG 0
#define UART_RX_OVERTIME 200
#define CMD_OVERTIME 500
static ZQueue<RemoteControlerReportPacket_t> ackQueue;
static ZQueue<RemoteControlerReportPacket_t> eventQueue;
@ -116,7 +116,7 @@ void RemoteControlerUpper::startSchedule() {
void RemoteControlerUpper::preProcessrxpacket(RemoteControlerReportPacket_t* packet) {
// ÅжϰüÊÇ·ñºÏ·¨
#if DEBUG
#if MODULE_DEBUG
ZLOGI(TAG, "[rx-thread] : rx :%s(%d)", zhex2str(packet->data, packet->datalen), packet->datalen);
#endif
@ -143,7 +143,7 @@ void RemoteControlerUpper::preProcessrxpacket(RemoteControlerReportPacket_t* pac
}
void RemoteControlerUpper::processRxEventPacket(RemoteControlerReportPacket_t* packet) {
#if DEBUG
#if MODULE_DEBUG
ZLOGI(TAG, "[process-thread] rx event : %s", zhex2str(packet->data, packet->datalen));
#endif
// if (m_on_report) {
@ -158,7 +158,7 @@ bool RemoteControlerUpper::txcmd(uint8_t* data, uint32_t len) {
zlock_guard lg(m_cmdlock);
ackQueue.clear();
m_isWaitingForAck = true;
#if DEBUG
#if MODULE_DEBUG
ZLOGI(TAG, "txcmd : %s(%d)", zhex2str(data, len), len);
#endif
@ -170,7 +170,7 @@ bool RemoteControlerUpper::txcmd(uint8_t* data, uint32_t len) {
// HAL_UART_DMAStop(m_uart);
return false;
}
#if DEBUG
#if MODULE_DEBUG
ZLOGI(TAG, "ack : %s", zhex2str(ackcache.data, ackcache.datalen));
#endif
// HAL_UART_DMAStop(m_uart);

110
usrc/service/remote_controler_event_processer.cpp

@ -0,0 +1,110 @@
#include "remote_controler_event_processer.hpp"
#include "pump_ctrl_service.hpp"
#include "service/remote_controler.hpp"
using namespace iflytop;
#define TAG "RemoteControlerEventProcesser"
static const char* zhex2str(uint8_t* data, size_t len) {
static char buf[256];
memset(buf, 0, sizeof(buf));
for (size_t i = 0; i < len; i++) {
sprintf(buf + i * 2, "%02X", data[i]);
}
return buf;
}
void RemoteControlerEventProcesser::initialize() {
m_thread.init(TAG);
GSM->setRemoterS(RemoteControlerUpper::ins()->isConnected());
RCTRL->regOnReport([this](uint8_t* rx, int32_t len) {
zble_proto_packet_t* packet = (zble_proto_packet_t*)rx;
logevent(rx, len);
if (packet->cmd == kzble_app_report_key_event) {
int32_t keyEvent = *(int32_t*)packet->data;
processKeyEventFromRemoter((hand_acid_remoter_key_event_t)keyEvent);
return;
}
if (packet->cmd == kzble_report_connected_event) {
GSM->setRemoterS(true);
} else if (packet->cmd == kzble_report_disconnect_event) {
GSM->setRemoterS(false);
}
});
}
void RemoteControlerEventProcesser::logevent(uint8_t* rx, int32_t len) {
//
zble_proto_packet_t* packet = (zble_proto_packet_t*)rx;
// ZLOGI(TAG, "onEvent: index:[%d],from:%d,to:%d cmd:%d", packet->frameIndex, packet->from, packet->to, packet->cmd);
if (packet->cmd == kzble_report_connected_event) {
zble_connected_event_t* event = (zble_connected_event_t*)packet->data;
ZLOGI(TAG, "onBleEvent -> [connected], name:%20s, peeradd:%s, rssi:%d, tx_power:%d", event->blename, zhex2str(event->peeradd, 6), event->rssi, event->tx_power);
return;
}
if (packet->cmd == kzble_report_disconnect_event) {
ZLOGI(TAG, "onBleEvent -> disconnect");
return;
}
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);
return;
}
if (packet->cmd == kzble_report_heart) {
zble_heart_t* event = (zble_heart_t*)packet->data;
// ZLOGI(TAG, "onBleEvent -> [heart], from:%s, resetFlag:%d, connectedFlag:%d, power:%d", zble_proto_role_2_str(packet->from), event->reset_flag, event->connected_flag, event->power);
return;
}
if (packet->cmd == kzble_report_power_on) {
ZLOGI(TAG, "onBleEvent -> [power_on], from:%s", zble_proto_role_2_str(packet->from));
return;
}
if (packet->cmd == kzble_app_report_key_event) {
int32_t keyEvent = *(int32_t*)packet->data;
ZLOGI(TAG, "onBleEvent -> [keyEvent] : %s(%d)", hand_acid_remoter_key_event_2_str(keyEvent), keyEvent);
return;
}
ZLOGI(TAG, "[process-thread] rx unkown event(%d) : %s", packet->cmd, zhex2str(rx, len));
}
void RemoteControlerEventProcesser::processKeyEventFromRemoter(hand_acid_remoter_key_event_t keyEvent) {
/**
* @brief
*/
if (PUMPCS->isWorking()) {
PUMPCS->stop();
RCTRL->setRemoterState(GSM->getRunMode(), PUMPCS->isWorking());
} else {
if (keyEvent == hand_acid_remoter_kevent_add_liquid) {
//
if (GSM->getRunMode() == khand_acid_m_jog_mode) {
PUMPCS->moveOnce();
} else if (GSM->getRunMode() == khand_acid_m_continuous_mode) {
PUMPCS->autoMoveMutiTimes();
}
} else if (keyEvent == hand_acid_remoter_kevent_change_next_mode) {
// 修改工作模式
if (GSM->getRunMode() == khand_acid_m_jog_mode) {
GSM->setRunMode(khand_acid_m_continuous_mode);
} else if (GSM->getRunMode() == khand_acid_m_continuous_mode) {
GSM->setRunMode(khand_acid_m_jog_mode);
}
} else if (keyEvent == hand_acid_remoter_kevent_reflux) {
// 回流
PUMPCS->reflux();
} else if (keyEvent == hand_acid_remoter_kevent_preFilling) {
// 管路填充
PUMPCS->acidPrefilling();
}
}
}

30
usrc/service/remote_controler_event_processer.hpp

@ -0,0 +1,30 @@
#pragma once
#include "apphardware/apphardware.hpp"
#include "uappbase/base.hpp"
namespace iflytop {
using namespace std;
/**
* @brief
*
* Ò£¿ØÆ÷ʼþ´¦Àí
*/
class RemoteControlerEventProcesser {
private:
/* data */
ZThread m_thread;
zmutex m_lock = {"RemoteControlerEventProcesserLock"};
public:
static RemoteControlerEventProcesser* ins() {
static RemoteControlerEventProcesser instance;
return &instance;
}
void initialize();
public:
void logevent(uint8_t* rx, int32_t len);
void processKeyEventFromRemoter(hand_acid_remoter_key_event_t keyEvent);
};
} // namespace iflytop
Loading…
Cancel
Save