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

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