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.
148 lines
3.7 KiB
148 lines
3.7 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;
|
|
};
|
|
|
|
// 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;
|
|
// };
|
|
|
|
#define FREE_RAM_MAP "FreeRamRamMap"
|
|
#define TEXT_DISPLAYER_RAM_MAP "TextDisplayerRamMap"
|
|
#define VAR_ICON_RAM_MAP "VarIconRamMap"
|
|
|
|
// typedef enum {
|
|
// kdw_freeram = 1,
|
|
// kdw_textdisplayer = 2,
|
|
// kdw_varicon = 3,
|
|
// kdw_
|
|
// } dwin_ram_type_t;
|
|
|
|
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:
|
|
/**
|
|
* @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_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 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
|