You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
3.6 KiB

#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