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.

83 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
  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. return true;
  32. }
  33. bool TextDisplayer::hide() { setTextLengthDirect(0);
  34. return true;
  35. }
  36. bool TextDisplayer::flushcfg() { return m_dwin_screen->write_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); }
  37. bool TextDisplayer::readcfg() { return m_dwin_screen->read_varspace16_muti(m_descript_add, (uint16_t *)&m_descript, sizeof(m_descript) / 2, 100); }
  38. void TextDisplayer::setFont(uint16_t EncodeMode, uint8_t font0id, uint8_t font1id, uint16_t frontxsize, uint16_t frontysize) {
  39. m_descript.EncodeMode = EncodeMode;
  40. m_descript.Font0ID = font0id;
  41. m_descript.Font1ID = font1id;
  42. m_descript.FontYDots = frontysize;
  43. m_descript.FontXDots = frontxsize;
  44. m_descript.TextLength = 256;
  45. }
  46. void TextDisplayer::setPos(uint16_t x, uint16_t y, uint16_t width, uint16_t hight) {
  47. uint16_t startx = x;
  48. uint16_t endx = x + width;
  49. uint16_t starty = y;
  50. uint16_t endy = y + hight;
  51. m_descript.PosX = x;
  52. m_descript.PosY = y;
  53. m_descript.Xs = x;
  54. m_descript.Ys = y;
  55. m_descript.Xe = endx;
  56. m_descript.Ye = endy;
  57. }
  58. bool TextDisplayer::setTextLengthDirect(uint16_t len) {
  59. DO(m_dwin_screen->write_varspace16(m_descript_add + 8, len, 100));
  60. return true;
  61. }
  62. bool TextDisplayer::setVal(const char *val) {
  63. memset(txcache, 0, sizeof(txcache));
  64. memcpy(txcache, val, strlen(val));
  65. DO(m_dwin_screen->write_varspace(m_descript.VP, txcache, strlen(val) + 2, 100));
  66. #if 0
  67. uint16_t zero = 0;
  68. setTextLengthDirect(0);
  69. m_dwin_screen->write_varspace(m_descript.VP, (uint8_t *)val, strlen(val), 100);
  70. setTextLengthDirect((uint16_t)strlen(val));
  71. m_descript.TextLength = (uint16_t)strlen(val);
  72. #endif
  73. return true;
  74. }
  75. void TextDisplayer::setColor(uint16_t color) { m_descript.Color = color; }
  76. void TextDisplayer::dumpinfo() {}