#pragma once #include "apphardware/apphardware.hpp" #include "config/config.hpp" #include "uappbase/base.hpp" // #include "ui_state_mgr.hpp" #include "uicontroler/base/ui_state.hpp" // #include "tjc/tjc.hpp" namespace iflytop { using namespace std; typedef struct { uint8_t data[TJC_MAX_PACKET_SIZE]; uint16_t datalen; } tjc_rx_packet_t; #define UIS UIControler::ins() class UIControler { ZThread m_thread; tjc_rx_packet_t ackcache; zmutex m_cmdlock = {"UI_LOCK"}; public: UIControler() {}; ~UIControler() {}; static UIControler* ins() { static UIControler instance; return &instance; } void postInitialize(); void initialize(); void pageInitialize(); int getNowPage() { return UIStateMgr::ins()->nowPage; } void chpage(uint8_t page, bool triggerEvent); bool echo(uint8_t tx, uint8_t* rx); void startSchedule(); /*********************************************************************************************************************** * WRITE * ***********************************************************************************************************************/ void virtualClick(uint8_t pid, uint8_t bid, uint8_t event); bool setTxt(uint8_t pid, uint8_t bid, const char* txt, ...); bool setTxt(uint8_t pid, uint8_t bid, const char* txt, va_list args); void setPic(uint8_t pid, uint8_t bid, int32_t picNum); void setAph(uint8_t pid, uint8_t bid, int32_t state); // 组件透明度,最大127,设置为0则隐藏组件,事件依然会触发,可以由底层过滤 bool setVal(uint8_t pid, uint8_t bid, int32_t val); void setEnumComponentState(uint8_t pid, uint8_t bid, int32_t state); void setPicturePicNum(uint8_t pid, uint8_t bid, uint8_t fromBid); void setButtonPicNum(uint8_t pid, uint8_t bid, uint8_t fromBid); void setPicturePicNumFromGlobal(uint8_t pid, uint8_t bid, uint8_t fromPid, uint8_t fromBid); void setButtonPicNumFromGlobal(uint8_t pid, uint8_t bid, uint8_t fromPid, uint8_t fromBid); void setrtc(zdate_t* date); void setPath(uint8_t pid, uint8_t bid, const char* path) { zlock_guard lg(m_cmdlock); sendcmd("p[%d].b[%d].path=\"%s\"", pid, bid, path); } void sendcmd(const char* format, ...); void sendcmd(const char* format, va_list args); void setEffect(uint8_t pid, uint8_t bid, tjc_effet_t effect) { zlock_guard lg(m_cmdlock); sendcmd("p[%d].b[%d].effect=%d", pid, bid, effect); } /*********************************************************************************************************************** * READ * ***********************************************************************************************************************/ bool readTxt(uint8_t pid, uint8_t bid, char* txt, int32_t txtbuflen); bool readInt(uint8_t pid, uint8_t bid, int32_t* val); bool readFiledAsInt(uint8_t pid, uint8_t bid, const char* filedName, int32_t* val); /*********************************************************************************************************************** * POP_WIN * ***********************************************************************************************************************/ void popWin(UIPopWinType_t type, const char* info, function onConfirm); void popWarningWin(const char* info) { popWin(UI_POP_WIN_TYPE_WARNING_INFO, info, nullptr); } void popFatalErrorWin(const char* info) { popWin(UI_POP_WIN_TYPE_FATAL_ERROR, info, nullptr); } void popConfirmWin(const char* info, function onConfirm) { popWin(UI_POP_WIN_TYPE_CONFIRM, info, onConfirm); } void popInfoWin(const char* info, function onConfirm = nullptr) { popWin(UI_POP_WIN_TYPE_INFO, info, onConfirm); } void popPowerOffWin(const char* info) { popWin(UI_POP_WIN_TYPE_POWER_OFF_INFO, info, nullptr); } void doInUILockArea(function fn) { zlock_guard lg(m_cmdlock); fn(); } /** * @brief */ void popFullKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength, const char* initval); void popPasswdKeyBoard(uint8_t fromPid, uint8_t fromBid, int limitLength); 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 popKeyBMutSelFix(uint8_t fromPid, uint8_t fromBid, int selectvalindex, const char* keyboardName, const char** selectvals); /*********************************************************************************************************************** * UTILS * ***********************************************************************************************************************/ bool visEx(uint8_t pid, uint8_t bid, bool val); // 通过搬移组件实现跨页面隐藏 bool movePicToXY(uint8_t pid, uint8_t bid, int32_t x, int32_t y); bool movePicTo(uint8_t pid, uint8_t bid, uint8_t toBid); bool movePicOutOfScreen(uint8_t pid, uint8_t bid); void doBlockWork(const char* blockmask, function fn) ; private: void processScreenRxPacket(uint8_t* data, size_t len); void startReceiveAck(); void callUsrEventCb(UIEvent* event); bool _readFiledAsInt(uint8_t pid, uint8_t bid, const char* valName, int32_t* val); private: bool vis(uint16_t bid, int32_t val); // 不支持跨页面隐藏 void setTouchEnableState(uint8_t bid, uint8_t enable); // 不支持跨页面隐藏 void placeHolder() {} }; } // namespace iflytop