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.

110 lines
2.9 KiB

#pragma once
#include "sdk\components\dwin\dwin_screen.hpp"
namespace iflytop {
namespace dwin {
using namespace std;
/**
* @brief
*
* 0x00 *VP
*
*/
/**
*
* 0x00: *VP 2 文本指针。
* 0x01: (X,Y) 4 起始显示位置,显示字符串左上角坐标。
* 0x03: Color 2 显示文本颜色。
* 0x04: (xs,Ys)(xe,Ye) 8 文本框。
* 0x08: Text_Length 2 显示字节数量,当遇到0xFFFF、0x0000或者显示到文本框尾将不再显示。
* 0x09: Font0_ID(H) 1 编码方式为0x01-0x04时的ASII字符使用的字库位置。
* 0x09: Font1_ID(L) 1 编码方式为0x00、0x05,以及0x01-0x04时的非ASCII字符使用的字库位置。
* 0x0A: Font_x_Dots(H) 1 字体x方向点阵数(0x01-0x04模式,ASCII字符的x方向点阵数按照x/2计算)。
* 0x0A: Font_Y_Dots(L) 1 字体Y方向点阵数。
* 0x0B: Encode_Mode(H) 1 .7定义了文本显示的字符间距是否自动调整;
* .7=0 字符间距自动调整;
* .7=1字符间距不自动调整,字符宽度固定为设定的点阵数。
* .6-.0定义了文本编码方式:0=8bit编码1=GB2312内码2=GBK 3=BIG5 4=SJIS 5=UNICODE
* 0x0B: HOR_Dis(L 1 字符水平间隔。
* 0x0C: VER_Dis(H) 1 字符垂直间隔。
* 0x0C: 未定义(L) 1 写0x00
*
*/
#pragma pack(1)
typedef struct {
uint16_t VP;
uint16_t PosX;
uint16_t PosY;
uint16_t Color;
uint16_t Xs;
uint16_t Ys;
uint16_t Xe;
uint16_t Ye;
uint16_t TextLength;
uint8_t Font1ID;
uint8_t Font0ID;
uint8_t FontYDots;
uint8_t FontXDots;
uint8_t LHORDis;
uint8_t EncodeMode; // [7:7] 0字符间距自动调整,1字符间距不自动调整 [6:0] 0=8bit编码1=GB2312内码2=GBK 3=BIG5 4=SJIS 5=UNICODE
uint8_t mark;
uint8_t LVERDis;
} TextDisplayerDescript_t;
#pragma pack()
typedef enum {
kcolor_red = 0xF800,
kcolor_black = 0x0000,
kcolor_white = 0xFFFF,
kcolor_grey = 0xc618,
} dwincolor_t;
class TextDisplayer {
DwinScreen *m_dwin_screen = nullptr;
uint16_t m_descript_add = 0;
TextDisplayerDescript_t m_descript;
public:
bool init(DwinScreen *dwin_screen, uint16_t valsize);
bool init(DwinScreen *dwin_screen, uint16_t descript_add, uint16_t val_add);
/**
* @brief Set the Font object
*
* @param EncodeMode [7:7] 0字符间距自动调整,1字符间距不自动调整 [6:0] 0=8bit编码1=GB2312内码2=GBK 3=BIG5 4=SJIS 5=UNICODE
* @param font0id
* @param font1id
*/
void setFont(uint16_t EncodeMode, uint8_t font0id, uint8_t font1id, uint16_t frontxsize, uint16_t frontysize);
/**
* @brief Set the Pos object
*
* @param x
* @param y
* @param width 文本框宽度
* @param hight 文本框高度
*/
void setPos(uint16_t x, uint16_t y, uint16_t width, uint16_t hight);
/**
* @brief 设置文本
*
* @param
*/
bool setVal(const char *val);
void setColor(uint16_t color);
bool setTextLengthDirect(uint16_t len);
public:
bool flushcfg();
bool readcfg();
void dumpinfo();
};
} // namespace dwin
} // namespace iflytop