zhaohe 8 months ago
parent
commit
9f9e64482f
  1. 15
      uappbase/bean/appevent.hpp
  2. 14
      uappbase/service/app_event_bus.cpp
  3. 8
      uappbase/service/app_event_bus.hpp
  4. 2
      usrc/service/app_core.cpp
  5. 2
      usrc/service/statistics_sync_service.cpp
  6. 9
      usrc/uicontroler/ui_controler.cpp
  7. 5
      usrc/uicontroler/ui_controler.hpp

15
uappbase/bean/appevent.hpp

@ -21,7 +21,10 @@ class AppEvent {
public: public:
AppEventType_t type; AppEventType_t type;
std::function<void()> onfnc = nullptr; std::function<void()> onfnc = nullptr;
uint8_t buf[sizeof(UIEvent) + 10];
private:
uint8_t buf[50];
UIEvent* uieventpointer = nullptr;
public: public:
AppEvent() { memset(buf, 0, sizeof(buf)); } AppEvent() { memset(buf, 0, sizeof(buf)); }
@ -29,18 +32,18 @@ class AppEvent {
public: public:
int getBufSize() { return sizeof(buf); } int getBufSize() { return sizeof(buf); }
void setBleName(const char* name) { strcpy((char*)buf, name); }
void setBleName(const char* name) { strncpy((char*)buf, name, sizeof(buf)); }
char* getBleName() { return (char*)buf; } char* getBleName() { return (char*)buf; }
UIEvent* getUIEvent() { return (UIEvent*)buf; }
void setUIEvent(const UIEvent& event) { memcpy(buf, &event, sizeof(UIEvent)); }
void setPageChangeTo(int32_t page) { *(int32_t*)buf = page; } void setPageChangeTo(int32_t page) { *(int32_t*)buf = page; }
int32_t getPageChangeTo() { return *(int32_t*)buf; } int32_t getPageChangeTo() { return *(int32_t*)buf; }
void setStateDisplayInfo(const char* info) { strcpy((char*)buf, info); }
void setStateDisplayInfo(const char* info) { strncpy((char*)buf, info, sizeof(buf)); }
char* getStateDisplayInfo() { return (char*)buf; } char* getStateDisplayInfo() { return (char*)buf; }
UIEvent* getUIEvent() { return uieventpointer; }
void setUIEvent(UIEvent* event) { uieventpointer = event; }
AcidStateChangeEvent_t* getAcidStateChangeEvent() { return (AcidStateChangeEvent_t*)buf; } AcidStateChangeEvent_t* getAcidStateChangeEvent() { return (AcidStateChangeEvent_t*)buf; }
void setOnFnc(std::function<void()> fnc) { onfnc = fnc; } void setOnFnc(std::function<void()> fnc) { onfnc = fnc; }

14
uappbase/service/app_event_bus.cpp

@ -54,6 +54,20 @@ void AppEventBus::pushEvent(const AppEvent& event) {
} }
} }
void AppEventBus::pushEventBlock(AppEvent* event) {
bool evenProcessed = false;
callFnInEventBus([&]() {
for (int i = 0; i < cbNum; i++) {
m_cbs[i](event);
}
evenProcessed = true;
});
while (!evenProcessed) {
osDelay(30);
}
}
void AppEventBus::pushSimpleEvent(AppEventType_t type) { void AppEventBus::pushSimpleEvent(AppEventType_t type) {
zlock_guard lck(lock); zlock_guard lck(lock);
eventtxcache.type = type; eventtxcache.type = type;

8
uappbase/service/app_event_bus.hpp

@ -28,16 +28,16 @@ class AppEventBus {
void regOnEvent(onAppEventCB_t onEvent); void regOnEvent(onAppEventCB_t onEvent);
void pushEvent(const AppEvent& event); void pushEvent(const AppEvent& event);
void pushSimpleEvent(AppEventType_t type); void pushSimpleEvent(AppEventType_t type);
void pushPageChangeEvent(uint8_t toPage); void pushPageChangeEvent(uint8_t toPage);
void callFnInEventBus(function<void()> onfnc);
void pushStateDisplayInfoEvent(const char* info); void pushStateDisplayInfoEvent(const char* info);
void pushAcidStatUseEvent(float ch1, float ch2, float ch3, float ch4); void pushAcidStatUseEvent(float ch1, float ch2, float ch3, float ch4);
void pushAcidStatStorageEvent(uint8_t ch, float chVal); void pushAcidStatStorageEvent(uint8_t ch, float chVal);
void pushAcidStatDisplayChangeEvent(); void pushAcidStatDisplayChangeEvent();
void pushEventBlock(AppEvent* event);
//
void callFnInEventBus(function<void()> onfnc);
bool isInAppEventThread(); bool isInAppEventThread();
}; };

2
usrc/service/app_core.cpp

@ -7,6 +7,7 @@
#include "service/pump_ctrl_service.hpp" #include "service/pump_ctrl_service.hpp"
#include "service/remote_controler.hpp" #include "service/remote_controler.hpp"
#include "service/remote_controler_state_sync_service.hpp" #include "service/remote_controler_state_sync_service.hpp"
#include "service/statistics_sync_service.hpp"
#include "valve_state_ctrl_service.hpp" #include "valve_state_ctrl_service.hpp"
// //
#include "ucomponents/zcan/zcan.hpp" #include "ucomponents/zcan/zcan.hpp"
@ -127,6 +128,7 @@ void AppCore::initialize() {
ValveStateSyncService::ins()->initialize(ZCAN1::ins()); // 阀门状态同步服务初始化 ValveStateSyncService::ins()->initialize(ZCAN1::ins()); // 阀门状态同步服务初始化
PumpCtrlService::ins()->initialize(); // 泵控制服务初始化 PumpCtrlService::ins()->initialize(); // 泵控制服务初始化
RemoteControlerStateSyncService::ins()->initialize(); // 遥控器状态同步服务初始化 RemoteControlerStateSyncService::ins()->initialize(); // 遥控器状态同步服务初始化
StatisticsSyncService::initialize();
// UI初始化 // UI初始化
UIControler::ins()->initialize(); UIControler::ins()->initialize();

2
usrc/service/statistics_sync_service.cpp

@ -122,6 +122,7 @@ void StatisticsSyncService::onAddAcidStorage(int ch, float addChVal) {
*/ */
GStateMgr::ins()->setAcidRemain(ch, addChVal); GStateMgr::ins()->setAcidRemain(ch, addChVal);
DeviceAcidVolume::updateAcidVolumeSync(ch, addChVal); DeviceAcidVolume::updateAcidVolumeSync(ch, addChVal);
AppEventBus::ins()->pushAcidStatDisplayChangeEvent();
} }
void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal2, float useVal3) { void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal2, float useVal3) {
float now0 = GStateMgr::ins()->getAcidUsed(0); float now0 = GStateMgr::ins()->getAcidUsed(0);
@ -136,6 +137,7 @@ void StatisticsSyncService::onUseAcid(float useVal0, float useVal1, float useVal
AcidUseRecordDao::updateLastRecord(now0 + useVal0, now1 + useVal1, now2 + useVal2, now3 + useVal3); AcidUseRecordDao::updateLastRecord(now0 + useVal0, now1 + useVal1, now2 + useVal2, now3 + useVal3);
m_dataIsDirty = true; m_dataIsDirty = true;
AppEventBus::ins()->pushAcidStatDisplayChangeEvent();
} }
static void syncTimer(const void* tid) { static void syncTimer(const void* tid) {

9
usrc/uicontroler/ui_controler.cpp

@ -68,8 +68,9 @@ void UIControler::pageInitialize() { UIControlerHock_PageInit(); }
void UIControler::callUsrEventCb(UIEvent* event) { void UIControler::callUsrEventCb(UIEvent* event) {
static AppEvent appEvent; static AppEvent appEvent;
appEvent.type = KAE_UIEvent; appEvent.type = KAE_UIEvent;
memcpy(appEvent.getUIEvent(), event, sizeof(UIEvent));
AppEventBus::ins()->pushEvent(appEvent);
appEvent.setUIEvent(event);
AppEventBus::ins()->pushEventBlock(&appEvent);
} }
void UIControler::startSchedule() { void UIControler::startSchedule() {
@ -482,9 +483,7 @@ void UIControler::popPasswdKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitL
chpage(pg_keyPasswd, false); chpage(pg_keyPasswd, false);
} }
void UIControler::popNumKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval,...) {
void UIControler::popNumKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval, ...) {
zlock_guard lg(m_cmdlock); zlock_guard lg(m_cmdlock);
static char buf[60]; static char buf[60];

5
usrc/uicontroler/ui_controler.hpp

@ -16,7 +16,6 @@ typedef struct {
uint16_t datalen; uint16_t datalen;
} tjc_rx_packet_t; } tjc_rx_packet_t;
#define UIS UIControler::ins() #define UIS UIControler::ins()
class UIControler { class UIControler {
ZThread m_thread; ZThread m_thread;
@ -99,7 +98,7 @@ class UIControler {
void popFullKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval); void popFullKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval);
void popPasswdKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength); void popPasswdKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength);
void popNumKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval,...);
void popNumKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval, ...);
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 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);
@ -126,6 +125,8 @@ class UIControler {
private: private:
bool vis(uint16_t bid, int32_t val); // 不支持跨页面隐藏 bool vis(uint16_t bid, int32_t val); // 不支持跨页面隐藏
void setTouchEnableState(uint8_t bid, uint8_t enable); // 不支持跨页面隐藏 void setTouchEnableState(uint8_t bid, uint8_t enable); // 不支持跨页面隐藏
void placeHolder() {}
}; };
class UILoadingCxt { class UILoadingCxt {

Loading…
Cancel
Save