|
|
#pragma once
#include "dwin_ram_manager.hpp"
//
#include <map>
#include <string>
#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 Pos { public: uint16_t x; uint16_t y; };
#define FREE_RAM_MAP "FreeRamRamMap"
#define LEVEL0_TEXT "level0_text"
#define LEVEL0_ICON "level0_icon"
#define LEVEL1_TEXT "level1_text"
#define LEVEL1_ICON "level1_icon"
#define LEVEL2_TEXT "level2_text"
#define LEVEL2_ICON "level2_icon"
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; // ͼ�α�������������
map<string, DwinRamManager*> m_rammanager_map;
bool enablecrc = false;
public: DwinScreen(){};
/**
* @brief * * @param huart * @param baudrate */ static DwinScreen& ins(); void init(UART_HandleTypeDef* huart, map<string, DwinRamManager*>& rammanager);
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();
uint16_t alloc_one_level2_text_displayer(); uint16_t alloc_one_level2_var_icon();
uint16_t alloc_one_level0_text_displayer(); uint16_t alloc_one_level0_var_icon();
uint16_t alloc_from(const char* whichrammanager, uint16_t size);
void dumpram();
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 read_varspace8_muti(uint16_t regaddr, uint8_t* data, size_t n8, 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
|