#pragma once #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 DwinScreen { public: class Date { public: uint16_t year; uint16_t month; uint16_t day; uint16_t hour; uint16_t minute; uint16_t second; uint16_t weekdaynum; }; private: 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; }; private: 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]; bool enablecrc = false; public: /** * @brief * * @param huart * @param baudrate */ void init(UART_HandleTypeDef* huart, int __ = 0); 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(); 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