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.
87 lines
2.8 KiB
87 lines
2.8 KiB
#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 valsize) {
|
|
uint16_t descript_add = dwin_screen->alloc_one_text_displayer();
|
|
uint16_t val_add = dwin_screen->alloc_free_ram(valsize);
|
|
return init(dwin_screen, descript_add, val_add);
|
|
}
|
|
|
|
bool TextDisplayer::init(DwinScreen *dwin_screen, uint16_t descript_add, uint16_t val_add) {
|
|
//
|
|
// printf("TextDisplayer init %04x %04x\n", descript_add, 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::show() {
|
|
setTextLengthDirect(m_descript.TextLength);
|
|
m_hide = false;
|
|
return true;
|
|
}
|
|
bool TextDisplayer::hide() {
|
|
setTextLengthDirect(0);
|
|
m_hide = true;
|
|
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() {}
|