7 changed files with 300 additions and 1 deletions
-
4components/dwin/dwin.hpp
-
1components/dwin/dwin_screen.cpp
-
3components/dwin/dwin_screen.hpp
-
70components/dwin/text_displayer.cpp
-
109components/dwin/text_displayer.hpp
-
56components/dwin/var_icon.cpp
-
58components/dwin/var_icon.hpp
@ -0,0 +1,4 @@ |
|||||
|
#pragma once
|
||||
|
#include "dwin_screen.hpp"
|
||||
|
#include "text_displayer.hpp"
|
||||
|
#include "var_icon.hpp"
|
@ -0,0 +1,70 @@ |
|||||
|
#include "text_displayer.hpp"
|
||||
|
|
||||
|
#include <string.h>
|
||||
|
using namespace iflytop::dwin; |
||||
|
using namespace iflytop; |
||||
|
using namespace std; |
||||
|
#define DO(x) \
|
||||
|
if (!x) { \ |
||||
|
printf("do %s fail\n", #x); \ |
||||
|
return false; \ |
||||
|
} |
||||
|
static uint8_t txcache[256]; |
||||
|
|
||||
|
bool TextDisplayer::init(DwinScreen *dwin_screen, uint16_t descript_add, uint16_t val_add) { |
||||
|
//
|
||||
|
m_dwin_screen = dwin_screen; |
||||
|
m_descript_add = descript_add; |
||||
|
printf("TextDisplayer init %04x\n", m_descript_add); |
||||
|
readcfg(); |
||||
|
if (val_add != 0) { |
||||
|
m_descript.VP = val_add; |
||||
|
flushcfg(); |
||||
|
} |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
bool TextDisplayer::flushcfg() { return m_dwin_screen->write_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); } |
||||
|
bool TextDisplayer::readcfg() { return m_dwin_screen->read_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); } |
||||
|
void TextDisplayer::setFont(uint16_t EncodeMode, uint8_t font0id, uint8_t font1id, uint16_t frontxsize, uint16_t frontysize) { |
||||
|
m_descript.EncodeMode = EncodeMode; |
||||
|
m_descript.Font0ID = font0id; |
||||
|
m_descript.Font1ID = font1id; |
||||
|
m_descript.FontYDots = frontysize; |
||||
|
m_descript.FontXDots = frontxsize; |
||||
|
m_descript.TextLength = 256; |
||||
|
} |
||||
|
void TextDisplayer::setPos(uint16_t x, uint16_t y, uint16_t width, uint16_t hight) { |
||||
|
uint16_t startx = x; |
||||
|
uint16_t endx = x + width; |
||||
|
uint16_t starty = y; |
||||
|
uint16_t endy = y + hight; |
||||
|
|
||||
|
m_descript.PosX = x; |
||||
|
m_descript.PosY = y; |
||||
|
m_descript.Xs = x; |
||||
|
m_descript.Ys = y; |
||||
|
m_descript.Xe = endx; |
||||
|
m_descript.Ye = endy; |
||||
|
} |
||||
|
bool TextDisplayer::setTextLengthDirect(uint16_t len) { |
||||
|
DO(m_dwin_screen->write_varspace16(m_descript_add + 8, len, 100)); |
||||
|
return true; |
||||
|
} |
||||
|
|
||||
|
bool TextDisplayer::setVal(const char *val) { |
||||
|
memset(txcache, 0, sizeof(txcache)); |
||||
|
memcpy(txcache, val, strlen(val)); |
||||
|
DO(m_dwin_screen->write_varspace(m_descript.VP, txcache, strlen(val) + 2, 100)); |
||||
|
|
||||
|
#if 0
|
||||
|
uint16_t zero = 0; |
||||
|
setTextLengthDirect(0); |
||||
|
m_dwin_screen->write_varspace(m_descript.VP, (uint8_t *)val, strlen(val), 100); |
||||
|
setTextLengthDirect((uint16_t)strlen(val)); |
||||
|
m_descript.TextLength = (uint16_t)strlen(val); |
||||
|
#endif
|
||||
|
return true; |
||||
|
} |
||||
|
void TextDisplayer::setColor(uint16_t color) { m_descript.Color = color; } |
||||
|
void TextDisplayer::dumpinfo() {} |
@ -0,0 +1,109 @@ |
|||||
|
#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 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
|
@ -0,0 +1,56 @@ |
|||||
|
#include "var_icon.hpp"
|
||||
|
using namespace iflytop; |
||||
|
using namespace dwin; |
||||
|
#define DO(x) \
|
||||
|
if (!x) { \ |
||||
|
printf("do %s fail\n", #x); \ |
||||
|
return false; \ |
||||
|
} |
||||
|
static uint32_t s_VarIconNum = 0; |
||||
|
|
||||
|
bool VarIcon::flushcfg() { return m_dwin_screen->write_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); } |
||||
|
bool VarIcon::readcfg() { return m_dwin_screen->read_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); } |
||||
|
|
||||
|
bool VarIcon::init(DwinScreen *dwin_screen, uint16_t descript_add) { |
||||
|
//
|
||||
|
m_dwin_screen = dwin_screen; |
||||
|
m_descript_add = descript_add; |
||||
|
s_VarIconNum++; |
||||
|
printf("VarIcon(%d) init %04x\n", s_VarIconNum, m_descript_add); |
||||
|
readcfg(); |
||||
|
return true; |
||||
|
} |
||||
|
void VarIcon::initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, uint16_t posy, uint16_t iconlib, uint16_t iconmin, uint16_t iconmax) { |
||||
|
m_descript.m_VP = valpointerAdd; |
||||
|
m_descript.m_PosX = posx; |
||||
|
m_descript.m_PosY = posy; |
||||
|
m_descript.m_VMin = 0; |
||||
|
m_descript.m_VMax = iconmax - iconmin; |
||||
|
m_descript.m_IconMin = iconmin; |
||||
|
m_descript.m_IconMax = iconmax; |
||||
|
m_descript.m_IconLib = iconlib; |
||||
|
m_descript.m_Mode = 1; |
||||
|
m_descript.m_LayerMode = 0; |
||||
|
m_descript.m_ICONGamma = 0; |
||||
|
m_descript.m_PICGamma = 0; |
||||
|
m_descript.m_FilterSet = 0x3F; |
||||
|
flushcfg(); |
||||
|
setVal(initval); |
||||
|
} |
||||
|
|
||||
|
void VarIcon::dumpinfo() { |
||||
|
readcfg(); |
||||
|
printf("m_VP = %04x\n", m_descript.m_VP); |
||||
|
printf("m_PosX = %d\n", m_descript.m_PosX); |
||||
|
printf("m_PosY = %d\n", m_descript.m_PosY); |
||||
|
printf("m_VMin = %d\n", m_descript.m_VMin); |
||||
|
printf("m_VMax = %d\n", m_descript.m_VMax); |
||||
|
printf("m_IconMin = %d\n", m_descript.m_IconMin); |
||||
|
printf("m_IconMax = %d\n", m_descript.m_IconMax); |
||||
|
printf("m_IconLib = %d\n", m_descript.m_IconLib); |
||||
|
printf("m_Mode = %d\n", m_descript.m_Mode); |
||||
|
printf("m_LayerMode = %d\n", m_descript.m_LayerMode); |
||||
|
printf("m_ICONGamma = %d\n", m_descript.m_ICONGamma); |
||||
|
printf("m_PICGamma = %d\n", m_descript.m_PICGamma); |
||||
|
printf("m_FilterSet = %04x\n", m_descript.m_FilterSet); |
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
#pragma once
|
||||
|
|
||||
|
#include "sdk\components\dwin\dwin_screen.hpp"
|
||||
|
|
||||
|
namespace iflytop { |
||||
|
namespace dwin { |
||||
|
using namespace std; |
||||
|
|
||||
|
#pragma pack(1)
|
||||
|
typedef struct { |
||||
|
uint16_t m_VP = 0; |
||||
|
uint16_t m_PosX = 0; |
||||
|
uint16_t m_PosY = 0; |
||||
|
uint16_t m_VMin = 0; |
||||
|
uint16_t m_VMax = 0; |
||||
|
uint16_t m_IconMin = 0; |
||||
|
uint16_t m_IconMax = 0; |
||||
|
|
||||
|
uint8_t m_Mode = 0; |
||||
|
uint8_t m_IconLib = 0; |
||||
|
|
||||
|
uint8_t m_ICONGamma = 0; |
||||
|
uint8_t m_LayerMode = 0; |
||||
|
|
||||
|
uint8_t m_FilterSet = 0; |
||||
|
uint8_t m_PICGamma = 0; |
||||
|
} VarIconDescript_t; |
||||
|
#pragma pack()
|
||||
|
|
||||
|
class VarIcon { |
||||
|
DwinScreen *m_dwin_screen = nullptr; |
||||
|
|
||||
|
uint16_t m_descript_add = 0; |
||||
|
VarIconDescript_t m_descript; |
||||
|
|
||||
|
public: |
||||
|
bool init(DwinScreen *dwin_screen, uint16_t descript_add); |
||||
|
void initcfg(uint16_t valpointerAdd, uint16_t initval, uint16_t posx, uint16_t posy, uint16_t iconlib, uint16_t iconmin, uint16_t iconmax); |
||||
|
|
||||
|
public: |
||||
|
bool flushcfg(); |
||||
|
bool readcfg(); |
||||
|
|
||||
|
bool setVal(uint16_t val) { return m_dwin_screen->write_varspace16(m_descript.m_VP, val, 100); } |
||||
|
uint16_t getVal() { |
||||
|
uint16_t val = 0xffff; |
||||
|
m_dwin_screen->read_varspace16(m_descript.m_VP, val, 100); |
||||
|
return val; |
||||
|
} |
||||
|
|
||||
|
VarIconDescript_t &getDescript() { return m_descript; } |
||||
|
|
||||
|
void dumpinfo(); |
||||
|
|
||||
|
public: |
||||
|
}; |
||||
|
} // namespace dwin
|
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue