zhaohe 9 months ago
parent
commit
017ca188a4
  1. 14
      uappbase/bean/event.hpp
  2. 13
      uappbase/service/app_event_bus.cpp
  3. 4
      uappbase/service/app_event_bus.hpp
  4. BIN
      ui/hand_acid_mainboard_ui.HMI
  5. 20
      ui/ui.h
  6. 9
      usrc/service/app_core.cpp
  7. 53
      usrc/uicontroler/base/page_processer.cpp
  8. 30
      usrc/uicontroler/base/page_processer.hpp
  9. 81
      usrc/uicontroler/front_end_controler.cpp
  10. 32
      usrc/uicontroler/front_end_controler.hpp
  11. 13
      usrc/uicontroler/page/UIPageInit.cpp
  12. 2
      usrc/uicontroler/page/initializer/PageInitializer.cpp
  13. 20
      usrc/uicontroler/page/login/login_page.cpp
  14. 8
      usrc/uicontroler/page/page.hpp
  15. 2
      usrc/uicontroler/tjc/tjc_constant.hpp

14
uappbase/bean/event.hpp

@ -5,7 +5,7 @@
#include <functional>
#include "config_index_enum.hpp"
#include "uicontroler\tjc\tjc_constant.hpp"
namespace iflytop {
using namespace std;
typedef enum {
@ -14,6 +14,11 @@ typedef enum {
kAppEvent_StateDisplayInfo,
kAppEvent_BleConnectEvent,
kAppEvent_AcidChCfgChangeEvent,
// UI_EVENT
KAE_UIEvent,
kAE_LoginEvent,
} AppEventType_t;
/**
@ -27,9 +32,10 @@ typedef enum {
typedef struct {
AppEventType_t type;
union event {
uint32_t placeholder;
char bleName[20];
char stateDisplayInfo[30];
uint32_t placeholder;
char bleName[20];
char stateDisplayInfo[30];
tjc::UIEvent uiEvent;
} d;
} AppEvent_t;

13
uappbase/service/app_event_bus.cpp

@ -6,8 +6,9 @@ using namespace std;
static QueueHandle_t xQueue;
#define TAG "AppEventBus"
void AppEventBus::initialize() {
lock.init();
thread.init("AppEventBus", 1024);
xQueue = xQueueCreate(10, sizeof(AppEvent_t));
xQueue = xQueueCreate(20, sizeof(AppEvent_t));
thread.start([this]() {
AppEvent_t event;
@ -31,4 +32,12 @@ void AppEventBus::pushEvent(const AppEvent_t& event) {
if (xQueueSend(xQueue, &event, 100) != pdPASS) {
ZLOGE(TAG, "xQueueSend failed");
}
}
}
void AppEventBus::pushSimpleEvent(AppEventType_t type) {
zlock_guard lck(lock);
static AppEvent_t event;
event.type = type;
pushEvent(event);
}

4
uappbase/service/app_event_bus.hpp

@ -1,7 +1,7 @@
#pragma once
#include "../appdep.hpp"
#include "uappbase/appcfg/appcfg.hpp"
#include "uappbase/bean/bean.hpp"
#include "../appdep.hpp"
//
namespace iflytop {
@ -13,6 +13,7 @@ class AppEventBus {
private:
onAppEventCB_t m_cbs[50];
int32_t cbNum = 0;
zmutex lock = {"AppEventBus-Lock"};
public:
static AppEventBus* ins() {
@ -24,6 +25,7 @@ class AppEventBus {
void regOnEvent(onAppEventCB_t onEvent);
void pushEvent(const AppEvent_t& event);
void pushSimpleEvent(AppEventType_t type);
};
} // namespace iflytop

BIN
ui/hand_acid_mainboard_ui.HMI

20
ui/ui.h

@ -13,13 +13,12 @@
#define pg_muDeviceInfo 11
#define pg_muAudit 12
#define pg_muPumpTest 13
#define pg_alert 14
#define pg_confirm 15
#define pg_keybAcidCh 16
#define pg_keybdB 17
#define pg_keybdAP 18
#define pg_keybdA 19
#define pg_keyPasswd 20
#define pg_confirm 14
#define pg_keybAcidCh 15
#define pg_keybdB 16
#define pg_keybdAP 17
#define pg_keybdA 18
#define pg_keyPasswd 19
//gvar.objs
#define ob_gvar_gvar 0
//pStart.objs
@ -251,13 +250,6 @@
#define ob_muPumpTest_stop 12
#define ob_muPumpTest_pumpId 13
#define ob_muPumpTest_pumpIdTil 14
//alert.objs
#define ob_alert_alert 0
#define ob_alert_t0 1
#define ob_alert_confirmkey 2
#define ob_alert_info 3
#define ob_alert_frompage 4
#define ob_alert_t1 5
//confirm.objs
#define ob_confirm_confirm 0
#define ob_confirm_t0 1

9
usrc/service/app_core.cpp

@ -12,7 +12,6 @@
#include "ucomponents/zcan/zcan.hpp"
//
#include "uicontroler/front_end_controler.hpp"
#include "uicontroler/page/page.hpp"
// #include "uicontroler/page/page.hpp"
//
@ -102,10 +101,10 @@ void AppCore::initialize() {
DeviceSettingDao::init();
ZLOGI(TAG, "load zhdb end");
FrontEndControler::ins()->initialize();
FrontEndControler::ins()->startSchedule();
PageInit();
FrontEndControler::ins()->chpage(pg_login);
UI::ins()->initialize();
UI::ins()->startSchedule();
UI::ins()->pageInit();
UI::ins()->chpage(pg_login);
while (true) osDelay(30);
}

53
usrc/uicontroler/base/page_processer.cpp

@ -0,0 +1,53 @@
#include "page_processer.hpp"
using namespace iflytop;
#define TAG "PageMgr"
IPageProcesser* m_pages[50];
int m_pageNum;
static void regPage(IPageProcesser* page) {
if (m_pageNum > 50) {
return;
}
m_pages[m_pageNum++] = page;
}
IPageProcesser::IPageProcesser(const char* name, uint32_t pageId) {
regPage(this);
this->pageId = pageId;
this->pageName = name;
}
void IPageProcesser::initialize() {
AppEventBus::ins()->regOnEvent([this](AppEvent_t* event) {
if (event->type == KAE_UIEvent) {
if (pageId != event->d.uiEvent.pid) {
return;
}
if (event->d.uiEvent.eventId == tjc::kpt_sys_event_page_id) {
OnPageLoadContext cxt = {0};
OnPageLoad(&cxt);
} else if (event->d.uiEvent.eventId == tjc::kpt_double_state_button_event) {
OnDoubleStateButton(event->d.uiEvent.bid, event->d.uiEvent.d.double_state_button.val);
} else if (event->d.uiEvent.eventId == tjc::kpt_button_event) {
OnButton(event->d.uiEvent.bid, event->d.uiEvent.d.button_event.val);
} else if (event->d.uiEvent.eventId == tjc::kpt_inputfield_content_change_event1) {
OnInputFieldContentChange(event->d.uiEvent.bid, event->d.uiEvent.d.inputfield_content.text);
}
} else {
OnAppEvent(event);
}
});
}
namespace iflytop {
void UIPageInit() {
for (size_t i = 0; i < m_pageNum; i++) {
ZLOGI(TAG, "initialize page %s %d", m_pages[i]->pageName, m_pages[i]->pageId);
m_pages[i]->initialize();
}
}
} // namespace iflytop

30
usrc/uicontroler/base/page_processer.hpp

@ -15,33 +15,13 @@ class OnPageLoadContext {
};
class IPageProcesser {
private:
/* data */
protected:
uint32_t pageId = 0;
public:
IPageProcesser(uint32_t pageId) { this->pageId = pageId; }
uint32_t pageId = 0;
const char* pageName = "Not Set";
virtual void initialize() {
UIS->regOnUsrEventCb([this](tjc::tjc_usr_event_t* event) {
if (pageId != event->pid) {
return;
}
if (event->eventId == tjc::kpt_sys_event_page_id) {
OnPageLoadContext cxt = {0};
OnPageLoad(&cxt);
} else if (event->eventId == tjc::kpt_double_state_button_event) {
OnDoubleStateButton(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_event1) {
OnInputFieldContentChange(event->bid, event->d.inputfield_content.text);
}
});
AppEventBus::ins()->regOnEvent([this](AppEvent_t* event) { OnAppEvent(event); });
}
public:
IPageProcesser(const char* name, uint32_t pageId);
virtual void initialize();
private:
virtual void OnPageLoad(OnPageLoadContext* cxt) { return; };

81
usrc/uicontroler/front_end_controler.cpp

@ -31,7 +31,7 @@ static const char* zhex2str(uint8_t* data, size_t len) {
return buf;
}
void FrontEndControler::initialize() { //
void UI::initialize() { //
ackQueue.initialize(5, sizeof(tjc_rx_packet_t));
eventQueue.initialize(5, sizeof(tjc_rx_packet_t));
usartRxThread.init("usartRxThread", 1024);
@ -41,7 +41,7 @@ void FrontEndControler::initialize() { //
m_cmdlock.init();
}
#define UART_RX_OVERTIME 5
void FrontEndControler::startSchedule() {
void UI::startSchedule() {
usartRxThread.start([this]() {
static uint8_t rxbuf[128];
tjcUart->USR_UartITRxing = 1;
@ -116,7 +116,7 @@ void FrontEndControler::startSchedule() {
});
}
void FrontEndControler::processScreenRxPacket(uint8_t* data, size_t len) {
void UI::processScreenRxPacket(uint8_t* data, size_t len) {
// 判断包是否合法
#if MODULE_DEBUG
ZLOGI(TAG, "[rx-thread] : rx :%s(%d)", zhex2str(data, len), len);
@ -153,11 +153,6 @@ void FrontEndControler::processScreenRxPacket(uint8_t* data, size_t len) {
}
}
void FrontEndControler::regOnUsrEventCb(on_usr_event_cb_t cb) {
m_cb[m_ncb] = cb;
m_ncb++;
}
static const char* zcpystr(char* cpyto, const char* strbegin, int32_t maxlen) {
if (strbegin == NULL) return NULL;
int32_t i = 0;
@ -169,7 +164,7 @@ static const char* zcpystr(char* cpyto, const char* strbegin, int32_t maxlen) {
}
return NULL;
}
void FrontEndControler::processUsrButtonEvent(uint8_t* data, size_t len) {
void UI::processUsrButtonEvent(uint8_t* data, size_t len) {
/**
* @brief
* :
@ -189,18 +184,9 @@ void FrontEndControler::processUsrButtonEvent(uint8_t* data, size_t len) {
event_cache.pid = data[1];
event_cache.bid = data[2];
if (event_cache.pid == pg_confirm && event_cache.bid == ob_confirm_confirm) {
if (m_onConfirmPageConfirmKey) m_onConfirmPageConfirmKey(true);
m_onConfirmPageConfirmKey = nullptr;
} else if (event_cache.pid == pg_confirm && event_cache.bid == ob_confirm_canclekey) {
if (m_onAlertPageConfirmKey) m_onAlertPageConfirmKey(false);
m_onAlertPageConfirmKey = nullptr;
} else if (event_cache.pid == pg_alert && event_cache.bid == ob_alert_confirmkey) {
}
callUsrEventCb(&event_cache);
}
void FrontEndControler::processUsrDoubleStateButtonEvent(uint8_t* data, size_t len) {
void UI::processUsrDoubleStateButtonEvent(uint8_t* data, size_t len) {
/**
* @brief
* :
@ -224,13 +210,14 @@ void FrontEndControler::processUsrDoubleStateButtonEvent(uint8_t* data, size_t l
callUsrEventCb(&event_cache);
}
void FrontEndControler::callUsrEventCb(tjc::tjc_usr_event_t* event) {
for (int32_t i = 0; i < m_ncb; i++) {
m_cb[i](event);
}
void UI::callUsrEventCb(tjc::UIEvent* event) {
static AppEvent_t appEvent;
appEvent.type = KAE_UIEvent;
memcpy(&appEvent.d.uiEvent, event, sizeof(tjc::UIEvent));
AppEventBus::ins()->pushEvent(appEvent);
}
void FrontEndControler::processInputfieldContentChangeEvent0(uint8_t* data, size_t len) {
void UI::processInputfieldContentChangeEvent0(uint8_t* data, size_t len) {
/**
* @brief
*
@ -253,7 +240,7 @@ void FrontEndControler::processInputfieldContentChangeEvent0(uint8_t* data, size
callUsrEventCb(&event_cache);
}
void FrontEndControler::processInputfieldContentChangeEvent1(uint8_t* data, size_t len) {
void UI::processInputfieldContentChangeEvent1(uint8_t* data, size_t len) {
/**
* @brief
*
@ -279,7 +266,7 @@ void FrontEndControler::processInputfieldContentChangeEvent1(uint8_t* data, size
callUsrEventCb(&event_cache);
}
bool FrontEndControler::readTxt(uint8_t pid, uint8_t cId, char* txt, int32_t txtbuflen) {
bool UI::readTxt(uint8_t pid, uint8_t cId, char* txt, int32_t txtbuflen) {
zlock_guard lg(m_cmdlock);
startReceiveAck();
@ -303,7 +290,7 @@ bool FrontEndControler::readTxt(uint8_t pid, uint8_t cId, char* txt, int32_t txt
memcpy(txt, &ackcache.data[1], cpysize);
return true;
}
bool FrontEndControler::readInt(uint8_t pid, uint8_t cId, int32_t* val) {
bool UI::readInt(uint8_t pid, uint8_t cId, int32_t* val) {
zlock_guard lg(m_cmdlock);
startReceiveAck();
@ -325,7 +312,7 @@ bool FrontEndControler::readInt(uint8_t pid, uint8_t cId, int32_t* val) {
return true;
}
bool FrontEndControler::echo(uint8_t tx, uint8_t* rx) {
bool UI::echo(uint8_t tx, uint8_t* rx) {
zlock_guard lg(m_cmdlock);
startReceiveAck();
@ -352,7 +339,7 @@ bool FrontEndControler::echo(uint8_t tx, uint8_t* rx) {
return true;
}
bool FrontEndControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) {
bool UI::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) {
zlock_guard lg(m_cmdlock);
va_list args;
@ -364,18 +351,18 @@ bool FrontEndControler::setTxt(uint8_t pid, uint8_t bid, const char* txt, ...) {
sendcmd("p[%d].b[%d].txt=\"%s\"", pid, bid, buf);
return true;
}
bool FrontEndControler::setVal(uint8_t pid, uint8_t cid, int32_t val) {
bool UI::setVal(uint8_t pid, uint8_t cid, int32_t val) {
zlock_guard lg(m_cmdlock);
sendcmd("p[%d].b[%d].val=%d", pid, cid, val);
return true;
}
bool FrontEndControler::vis(uint16_t buuid, int32_t val) {
bool UI::vis(uint16_t buuid, int32_t val) {
zlock_guard lg(m_cmdlock);
sendcmd("vis %d,%d", buuid & 0xff, val);
return true;
}
void FrontEndControler::alert(const char* info, function<void(bool)> onConfirm) {
void UI::alert(const char* info, function<void(bool)> onConfirm) {
zlock_guard lg(m_cmdlock);
// if (m_isInPopWin) {
// ZLOGE(TAG, "isInPopWin,alert failed");
@ -390,7 +377,7 @@ void FrontEndControler::alert(const char* info, function<void(bool)> onConfirm)
// sendcmd("p[%d].b[%d].txt=\"%s\"", pg_alert, ob_alert_info, buf);
// sendcmd("page alert");
}
void FrontEndControler::alertNoConfirm(const char* info) {
void UI::alertNoConfirm(const char* info) {
zlock_guard lg(m_cmdlock);
// if (m_isInPopWin) {
// ZLOGE(TAG, "isInPopWin,alertNoConfirm failed");
@ -406,7 +393,7 @@ void FrontEndControler::alertNoConfirm(const char* info) {
// vis(ob_alert_confirmkey, 0);
}
void FrontEndControler::confirmNoCancle(const char* info, function<void(bool)> onConfirm) {
void UI::confirmNoCancle(const char* info, function<void(bool)> onConfirm) {
zlock_guard lg(m_cmdlock);
// if (m_isInPopWin) {
// ZLOGE(TAG, "isInPopWin,confirmNoCancle failed");
@ -424,7 +411,7 @@ void FrontEndControler::confirmNoCancle(const char* info, function<void(bool)> o
// vis(ob_confirm_canclekey, 0);
}
void FrontEndControler::confirm(const char* info, function<void(bool)> onConfirm) {
void UI::confirm(const char* info, function<void(bool)> onConfirm) {
zlock_guard lg(m_cmdlock);
// if (m_isInPopWin) {
// ZLOGE(TAG, "isInPopWin,confirm failed");
@ -441,9 +428,9 @@ void FrontEndControler::confirm(const char* info, function<void(bool)> onConfirm
// vis(ob_confirm_canclekey, 1);
}
void FrontEndControler::chpage(uint8_t page) { sendcmd("page %d", page); }
// void FrontEndControler::bakpage() { sendcmd("page %d", m_lastPage); }
void FrontEndControler::sendcmd(const char* format, ...) {
void UI::chpage(uint8_t page) { sendcmd("page %d", page); }
// void UI::bakpage() { sendcmd("page %d", m_lastPage); }
void UI::sendcmd(const char* format, ...) {
static char buf[128];
va_list args;
va_start(args, format);
@ -469,26 +456,32 @@ void FrontEndControler::sendcmd(const char* format, ...) {
}
}
void FrontEndControler::startReceiveAck() {
void UI::startReceiveAck() {
ackQueue.clear();
m_isWaitingForAck = true;
}
void FrontEndControler::virtualClick(uint8_t pid, uint8_t bid, uint8_t event) {
void UI::virtualClick(uint8_t pid, uint8_t bid, uint8_t event) {
zlock_guard lg(m_cmdlock);
sendcmd("click b[%d],%d", bid, event);
}
void FrontEndControler::setTouchEnableState(uint8_t bid, uint8_t enable) {
void UI::setTouchEnableState(uint8_t bid, uint8_t enable) {
// tsw obj,state
zlock_guard lg(m_cmdlock);
sendcmd("tsw b[%d],%d", bid, enable);
}
void FrontEndControler::setEnumComponentState(uint8_t pid, uint8_t bid, int32_t state) {
void UI::setEnumComponentState(uint8_t pid, uint8_t bid, int32_t state) {
// 枚举类型使用动画组件
sendcmd("p[%d].b[%d].tim=%d", pid, bid, state * 50);
}
void FrontEndControler::setPic(uint8_t pid, uint8_t bid, int32_t picNum) { sendcmd("p[%d].b[%d].pic=%d", pid, bid, picNum); }
void UI::setPic(uint8_t pid, uint8_t bid, int32_t picNum) { sendcmd("p[%d].b[%d].pic=%d", pid, bid, picNum); }
void UI::setAph(uint8_t pid, uint8_t bid, int32_t state) { sendcmd("p[%d].b[%d].aph=%d", pid, bid, state); }
void UI::pageInit() { UIPageInit(); }
void FrontEndControler::setAph(uint8_t pid, uint8_t bid, int32_t state) { sendcmd("p[%d].b[%d].aph=%d", pid, bid, state); }
namespace iflytop {
__weak void UIPageInit() {}
} // namespace iflytop

32
usrc/uicontroler/front_end_controler.hpp

@ -12,42 +12,32 @@ typedef struct {
uint16_t datalen;
} tjc_rx_packet_t;
typedef std::function<void(tjc::tjc_usr_event_t* event)> on_usr_event_cb_t;
#define UIS FrontEndControler::ins()
class FrontEndControler {
#define UIS UI::ins()
class UI {
ZThread m_thread;
tjc_rx_packet_t ackcache;
zmutex m_cmdlock = {"FrontEndControler_LOCK"};
zmutex m_cmdlock = {"UI_LOCK"};
tjc::UIEvent event_cache;
tjc::tjc_usr_event_t event_cache;
// on_usr_event_cb_t cb;
on_usr_event_cb_t m_cb[50];
int32_t m_ncb = 0;
int32_t m_nowPage = 0;
int32_t m_lastPage = 0;
function<void(bool)> m_onConfirmPageConfirmKey;
function<void(bool)> m_onAlertPageConfirmKey;
public:
FrontEndControler() {};
~FrontEndControler() {};
UI() {};
~UI() {};
static FrontEndControler* ins() {
static FrontEndControler instance;
static UI* ins() {
static UI instance;
return &instance;
}
void initialize();
void regOnUsrEventCb(on_usr_event_cb_t onclik);
void pageInit();
int getNowPage() { return m_nowPage; }
void startSchedule();
@ -96,7 +86,7 @@ class FrontEndControler {
void startReceiveAck();
void callUsrEventCb(tjc::tjc_usr_event_t* event);
void callUsrEventCb(tjc::UIEvent* event);
};
static inline const char* zitoa(int val) {
@ -119,4 +109,6 @@ static inline const char* refmt(const char* fmt, const char* floatval) {
return buf;
}
__weak void UIPageInit();
} // namespace iflytop

13
usrc/uicontroler/page/UIPageInit.cpp

@ -0,0 +1,13 @@
#include "uappbase/base.hpp"
#define TAG "UIPageInit"
namespace iflytop {
extern void PageLoginInit();
// void UIPageInit() {
// ZLOGI(TAG, "UIPageInit");
// PageLoginInit();
// }
} // namespace iflytop

2
usrc/uicontroler/page/initializer/PageInitializer.cpp

@ -1,10 +1,8 @@
#pragma once
#include "uicontroler/base/page_processer.hpp"
namespace iflytop {
using namespace std;
} // namespace iflytop
// kpt_sys_event_page_id

20
usrc/uicontroler/page/login/page_login.cpp → usrc/uicontroler/page/login/login_page.cpp

@ -4,22 +4,15 @@
#include "uicontroler/base/page_processer.hpp"
namespace iflytop {
using namespace std;
#define TAG "PageLogin"
#define TAG "LoginPage"
class PageLogin : public IPageProcesser {
class LoginPage : public IPageProcesser {
private:
/* data */
PageLogin() : IPageProcesser(pg_login) {}
char userName[20] = {0};
char passwd[20] = {0};
public:
static PageLogin* ins() {
static PageLogin instance;
return &instance;
}
LoginPage() : IPageProcesser(TAG, pg_login) {}
virtual void initialize() override {
IPageProcesser::initialize();
@ -60,6 +53,9 @@ class PageLogin : public IPageProcesser {
}
ZLOGI(TAG, "login %s success", userName);
AppEventBus::ins()->pushSimpleEvent(kAE_LoginEvent);
UI::ins()->chpage(pg_main);
}
}
virtual void OnDoubleStateButton(uint8_t bid, uint8_t val) override {}
@ -68,8 +64,8 @@ class PageLogin : public IPageProcesser {
private:
};
void PageLoginInit() { PageLogin::ins()->initialize(); }
// ʵÀý»¯LoginPage, ʹÆä×Ô¶¯×¢²á
static LoginPage instance;
} // namespace iflytop
// kpt_sys_event_page_id

8
usrc/uicontroler/page/page.hpp

@ -1,8 +0,0 @@
#pragma once
namespace iflytop {
void PageLoginInit();
static inline void PageInit() { PageLoginInit(); }
} // namespace iflytop

2
usrc/uicontroler/tjc/tjc_constant.hpp

@ -107,7 +107,7 @@ typedef struct {
} button_event;
} d;
} tjc_usr_event_t;
} UIEvent;
typedef enum {
k_button_release_event = 1,

Loading…
Cancel
Save