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