#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