#pragma once #include "dwin_ram_manager.hpp" // #include "sdk/os/zos.hpp" namespace iflytop { namespace dwin { using namespace std; /** * @brief * * 2byte 1byte cmd data crc * 5AA5 01 0x82/0x83 1->249 * * 2byte 1byte cmd data crc * 5AA5 01 0x81/0x80 1->249 */ #define TX_CACHE_SIZE 256 #define RX_CACHE_SIZE 256 class Date { public: uint16_t year; uint16_t month; uint16_t day; uint16_t hour; uint16_t minute; uint16_t second; uint16_t weekdaynum; }; class TxContext { public: uint8_t txcache[TX_CACHE_SIZE]; uint8_t txlen; uint8_t receiptcache[RX_CACHE_SIZE]; uint8_t receiptlen; bool receipt_ready_flag = false; }; class DwinScreenCfg { public: uint16_t freeRawStartAddr = 0; uint16_t freeRawEndAddr = 0; uint16_t textDisplayerStartAddr = 0; uint16_t textDisplayerEndAddr = 0; uint16_t textDisplayerSize = 0; uint16_t varIconStartAddr = 0; uint16_t varIconEndAddr = 0; uint16_t varIconSize = 0; }; class Pos { public: uint16_t x; uint16_t y; }; class DwinScreen { public: private: DwinScreenCfg m_dwcfg; UART_HandleTypeDef* m_huart; ZUART m_uarthandler; TxContext txcontext; uint8_t m_tx_pre_processcache[TX_CACHE_SIZE]; uint8_t m_rd_pre_processcache[RX_CACHE_SIZE]; DwinRamManager m_rammanager; // 空闲ram管理器 DwinRamManager m_textDisplayerManager; // 文本变量组件管理器 DwinRamManager m_varIconManager; // 图形变量组件管理器 bool enablecrc = false; public: /** * @brief * * @param huart * @param baudrate */ static DwinScreen& ins(); void init(UART_HandleTypeDef* huart, DwinScreenCfg cfg); public: bool set_page(uint16_t pageid); uint16_t get_page(); bool set_brightness(uint16_t brightness); bool set_rtc(uint16_t year, uint16_t month, uint16_t day, uint16_t hour, uint16_t minute, uint16_t second); bool get_rtc(Date* date); bool ping(); uint16_t alloc_free_ram(uint16_t size); uint16_t alloc_one_text_displayer(); uint16_t alloc_one_var_icon(); public: bool write_reg16(uint16_t regaddr, uint16_t data, int overtime); bool read_reg16(uint16_t regaddr, uint16_t& data, int overtime); bool write_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime); bool read_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime); bool write_varspace16(uint16_t regaddr, uint16_t data, int overtime); bool read_varspace16(uint16_t regaddr, uint16_t& data, int overtime); bool write_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime); bool read_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime); bool write_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t data, int overtime); bool read_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t& data, int overtime); bool write_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime); bool read_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime); private: void clearrxcache(); void sendcmd(uint8_t* cmd, size_t len); bool sendcmdblock(int overtime); }; } // namespace dwin } // namespace iflytop