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.

78 lines
2.7 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "text_displayer.hpp"
  2. #include <string.h>
  3. using namespace iflytop::dwin;
  4. using namespace iflytop;
  5. using namespace std;
  6. #define DO(x) \
  7. if (!x) { \
  8. printf("do %s fail\n", #x); \
  9. return false; \
  10. }
  11. static uint8_t txcache[256];
  12. bool TextDisplayer::init(DwinScreen *dwin_screen, uint16_t valsize) {
  13. uint16_t descript_add = dwin_screen->alloc_one_text_displayer();
  14. uint16_t val_add = dwin_screen->alloc_free_ram(valsize);
  15. return init(dwin_screen, descript_add, val_add);
  16. }
  17. bool TextDisplayer::init(DwinScreen *dwin_screen, uint16_t descript_add, uint16_t val_add) {
  18. //
  19. printf("TextDisplayer init %04x %04x\n", descript_add, val_add);
  20. m_dwin_screen = dwin_screen;
  21. m_descript_add = descript_add;
  22. // printf("TextDisplayer init %04x\n", m_descript_add);
  23. readcfg();
  24. if (val_add != 0) {
  25. m_descript.VP = val_add;
  26. flushcfg();
  27. }
  28. return true;
  29. }
  30. bool TextDisplayer::show() { setTextLengthDirect(m_descript.TextLength); }
  31. bool TextDisplayer::hide() { setTextLengthDirect(0); }
  32. bool TextDisplayer::flushcfg() { return m_dwin_screen->write_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); }
  33. bool TextDisplayer::readcfg() { return m_dwin_screen->read_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); }
  34. void TextDisplayer::setFont(uint16_t EncodeMode, uint8_t font0id, uint8_t font1id, uint16_t frontxsize, uint16_t frontysize) {
  35. m_descript.EncodeMode = EncodeMode;
  36. m_descript.Font0ID = font0id;
  37. m_descript.Font1ID = font1id;
  38. m_descript.FontYDots = frontysize;
  39. m_descript.FontXDots = frontxsize;
  40. m_descript.TextLength = 256;
  41. }
  42. void TextDisplayer::setPos(uint16_t x, uint16_t y, uint16_t width, uint16_t hight) {
  43. uint16_t startx = x;
  44. uint16_t endx = x + width;
  45. uint16_t starty = y;
  46. uint16_t endy = y + hight;
  47. m_descript.PosX = x;
  48. m_descript.PosY = y;
  49. m_descript.Xs = x;
  50. m_descript.Ys = y;
  51. m_descript.Xe = endx;
  52. m_descript.Ye = endy;
  53. }
  54. bool TextDisplayer::setTextLengthDirect(uint16_t len) {
  55. DO(m_dwin_screen->write_varspace16(m_descript_add + 8, len, 100));
  56. return true;
  57. }
  58. bool TextDisplayer::setVal(const char *val) {
  59. memset(txcache, 0, sizeof(txcache));
  60. memcpy(txcache, val, strlen(val));
  61. DO(m_dwin_screen->write_varspace(m_descript.VP, txcache, strlen(val) + 2, 100));
  62. #if 0
  63. uint16_t zero = 0;
  64. setTextLengthDirect(0);
  65. m_dwin_screen->write_varspace(m_descript.VP, (uint8_t *)val, strlen(val), 100);
  66. setTextLengthDirect((uint16_t)strlen(val));
  67. m_descript.TextLength = (uint16_t)strlen(val);
  68. #endif
  69. return true;
  70. }
  71. void TextDisplayer::setColor(uint16_t color) { m_descript.Color = color; }
  72. void TextDisplayer::dumpinfo() {}