diff --git a/uappbase/bean/appevent.hpp b/uappbase/bean/appevent.hpp index 0f783ee..090d139 100644 --- a/uappbase/bean/appevent.hpp +++ b/uappbase/bean/appevent.hpp @@ -3,8 +3,10 @@ #include -#include "uicontroler/tjc/tjc_base_type.h" #include "appevent_type.hpp" +extern "C" { +#include "uicontroler/tjc/tjc_base_type.h" +} /** * @@ -17,13 +19,27 @@ class AppEvent { public: - AppEventType_t type; - union val { - uint32_t placeholder; - char bleName[20]; - char stateDisplayInfo[30]; - UIEvent uiEvent; - int32_t pageChangeTo; - } d; + AppEventType_t type; std::function onfnc; + uint8_t buf[sizeof(UIEvent) + 10]; + + char* getBleName() { return (char*)buf; } + + char* getStateDisplayInfo() { return (char*)buf; } + + UIEvent* getUIEvent() { return (UIEvent*)buf; } + + int32_t getPageChangeTo() { return *(int32_t*)buf; } + + void setBleName(const char* name) { strcpy((char*)buf, name); } + + void setStateDisplayInfo(const char* info) { strcpy((char*)buf, info); } + + void setUIEvent(const UIEvent& event) { memcpy(buf, &event, sizeof(UIEvent)); } + + void setPageChangeTo(int32_t page) { *(int32_t*)buf = page; } + + void setOnFnc(std::function fnc) { onfnc = fnc; } + + int getBufSize() { return sizeof(buf); } }; diff --git a/uappbase/bean/event.hpp b/uappbase/bean/event.hpp index 8645843..7a7776f 100644 --- a/uappbase/bean/event.hpp +++ b/uappbase/bean/event.hpp @@ -7,10 +7,5 @@ namespace iflytop { using namespace std; -static inline AppEvent createStateDisplayInfoEvent(const char* info) { - AppEvent event; - event.type = kAppEvent_StateDisplayInfo; - strncpy(event.d.stateDisplayInfo, info, sizeof(event.d.stateDisplayInfo)); - return event; -} + } // namespace iflytop \ No newline at end of file diff --git a/uappbase/service/app_event_bus.cpp b/uappbase/service/app_event_bus.cpp index 1b78f03..d48e981 100644 --- a/uappbase/service/app_event_bus.cpp +++ b/uappbase/service/app_event_bus.cpp @@ -4,6 +4,8 @@ using namespace iflytop; using namespace std; static QueueHandle_t xQueue; +static AppEvent eventtxcache; + #define TAG "AppEventBus" void AppEventBus::initialize() { lock.init(); @@ -11,20 +13,20 @@ void AppEventBus::initialize() { xQueue = xQueueCreate(20, sizeof(AppEvent)); thread.start([this]() { - AppEvent event; + static AppEvent eventrxcache; while (1) { - if (xQueueReceive(xQueue, &event, portMAX_DELAY) == pdTRUE) { - // ZLOGI(TAG, "pop event type %d", event.type); + if (xQueueReceive(xQueue, &eventrxcache, portMAX_DELAY) == pdTRUE) { + // ZLOGI(TAG, "pop eventrxcache type %d", eventrxcache.type); - if (event.type == KAE_callOnAppEventBusLoop) { - if (event.onfnc) { - event.onfnc(); + if (eventrxcache.type == KAE_callOnAppEventBusLoop) { + if (eventrxcache.onfnc) { + eventrxcache.onfnc(); } continue; } for (int i = 0; i < cbNum; i++) { - m_cbs[i](&event); + m_cbs[i](&eventrxcache); } } } @@ -41,24 +43,31 @@ void AppEventBus::pushEvent(const AppEvent& event) { ZLOGE(TAG, "xQueueSend failed"); } } -static AppEvent event; void AppEventBus::pushSimpleEvent(AppEventType_t type) { zlock_guard lck(lock); - event.type = type; - pushEvent(event); + eventtxcache.type = type; + pushEvent(eventtxcache); } void AppEventBus::pushPageChangeEvent(uint8_t toPage) { zlock_guard lck(lock); - event.type = KAE_PageChangeEvent; - event.d.pageChangeTo = toPage; - pushEvent(event); + eventtxcache.type = KAE_PageChangeEvent; + eventtxcache.setPageChangeTo(toPage); + pushEvent(eventtxcache); } void AppEventBus::callFnInEventBus(function onfnc) { zlock_guard lck(lock); - event.type = KAE_callOnAppEventBusLoop; - event.onfnc = onfnc; - pushEvent(event); + eventtxcache.type = KAE_callOnAppEventBusLoop; + eventtxcache.onfnc = onfnc; + pushEvent(eventtxcache); +} + +void AppEventBus::pushStateDisplayInfoEvent(const char* info) { + zlock_guard lck(lock); + eventtxcache.type = kAppEvent_StateDisplayInfo; + // strncpy(event.getStateDisplayInfo(), info, event.getBufSize()); + eventtxcache.setStateDisplayInfo(info); + pushEvent(eventtxcache); } diff --git a/uappbase/service/app_event_bus.hpp b/uappbase/service/app_event_bus.hpp index 52179c9..fce9694 100644 --- a/uappbase/service/app_event_bus.hpp +++ b/uappbase/service/app_event_bus.hpp @@ -29,6 +29,8 @@ class AppEventBus { void pushPageChangeEvent(uint8_t toPage); void callFnInEventBus(function onfnc); + + void pushStateDisplayInfoEvent(const char* info) ; }; } // namespace iflytop diff --git a/uappbase/service/gstate_mgr.cpp b/uappbase/service/gstate_mgr.cpp index 18c571f..ca7dd2b 100644 --- a/uappbase/service/gstate_mgr.cpp +++ b/uappbase/service/gstate_mgr.cpp @@ -59,7 +59,8 @@ void GStateMgr::setRemoterS(int32_t state, const char* name) { if (state) { ZLOGI(TAG, "on ble connect -> client name:%s", name); strncpy(m_RemoterName, name, sizeof(m_RemoterName)); - strncpy(appevent.d.bleName, name, sizeof(appevent.d.bleName)); + // strncpy(appevent.d.bleName, name, sizeof(appevent.d.bleName)); + appevent.setBleName(name); appevent.type = kAE_RemoterConnectedEvent; } else { diff --git a/usrc/service/pump_ctrl_service.cpp b/usrc/service/pump_ctrl_service.cpp index f5efa2d..3669418 100644 --- a/usrc/service/pump_ctrl_service.cpp +++ b/usrc/service/pump_ctrl_service.cpp @@ -11,7 +11,7 @@ using namespace iflytop; static TMC51X0* m_motors[4]; #define PUMP_NUM 4 -#define PUSH_DIS_INFO(info) AppEventBus::ins()->pushEvent(createStateDisplayInfoEvent(info)) +#define PUSH_DIS_INFO(info) AppEventBus::ins()->pushStateDisplayInfoEvent(info); void PumpCtrlService::initialize() { m_motors[0] = AppHardware::ins()->getPump(0); @@ -34,7 +34,6 @@ void PumpCtrlService::initialize() { }); m_monitor_thread.init("PumpCtrlServiceMonitor", 1024); - #if ENABLE_MOTOR_CHECK_THREAD m_monitor_thread.start([this]() { for (size_t i = 0; i < 4; i++) { diff --git a/usrc/uicontroler/base/page_processer.cpp b/usrc/uicontroler/base/page_processer.cpp index bb36ba0..459290a 100644 --- a/usrc/uicontroler/base/page_processer.cpp +++ b/usrc/uicontroler/base/page_processer.cpp @@ -30,12 +30,12 @@ void IPageProcesser::initialize() { AppEventBus::ins()->regOnEvent([this](AppEvent* event) { if (event->type == KAE_UIEvent) { - if (thisPage != event->d.uiEvent.pid) { + if (thisPage != event->getUIEvent()->pid) { return; } // uint8_t bid = event->d.uiEvent.bid; - UIEvent* uiEvent = &event->d.uiEvent; + UIEvent* uiEvent = event->getUIEvent(); if (uiEvent->eventId == kpt_sys_event_page_id) { OnPageLoadContext cxt = {0}; @@ -59,7 +59,7 @@ void IPageProcesser::initialize() { } // } else if (event->type == KAE_PageChangeEvent) { - if (thisPage != event->d.pageChangeTo) { + if (thisPage != event->getUIEvent()->pid) { return; } onChangePageEvent(); diff --git a/usrc/uicontroler/page/home_page.cpp b/usrc/uicontroler/page/home_page.cpp index dff2174..204ef7a 100644 --- a/usrc/uicontroler/page/home_page.cpp +++ b/usrc/uicontroler/page/home_page.cpp @@ -117,7 +117,7 @@ class HomePage : public IPageProcesser { } else if (event->type == kAE_AcidStatChangeEvent) { syncStat(); // 初始化统计数据 } else if (event->type == kAppEvent_StateDisplayInfo) { - UIS->setTxt(thisPage, ob_home_sysInfo, event->d.stateDisplayInfo); + UIS->setTxt(thisPage, ob_home_sysInfo, event->getStateDisplayInfo()); } } diff --git a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp index 9c2c9ed..9f629af 100644 --- a/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp +++ b/usrc/uicontroler/page/mupage/muReCtrlerBind_page.cpp @@ -99,9 +99,9 @@ class muReCtrlerBindPage : public IPageProcesser { if (event->type == kAE_RemoterConnectedEvent) { ZLOGI(TAG, "ble connect success"); setText(ob_muReCtlerBind_infoWin, "%s", "扫描到设备"); - DeviceSettingDao::updateBleClientName(event->d.bleName); + DeviceSettingDao::updateBleClientName(event->getBleName()); setText(ob_muReCtlerBind_infoWin, "%s", "绑定成功"); - setText(ob_muReCtlerBind_bleCliName, "%s", event->d.bleName); + setText(ob_muReCtlerBind_bleCliName, "%s", event->getBleName()); m_scaning = false; } } diff --git a/usrc/uicontroler/ui_controler.cpp b/usrc/uicontroler/ui_controler.cpp index c31c416..0ec40c6 100644 --- a/usrc/uicontroler/ui_controler.cpp +++ b/usrc/uicontroler/ui_controler.cpp @@ -68,7 +68,7 @@ void UIControler::pageInitialize() { UIControlerHock_PageInit(); } void UIControler::callUsrEventCb(UIEvent* event) { static AppEvent appEvent; appEvent.type = KAE_UIEvent; - memcpy(&appEvent.d.uiEvent, event, sizeof(UIEvent)); + memcpy(appEvent.getUIEvent(), event, sizeof(UIEvent)); AppEventBus::ins()->pushEvent(appEvent); }