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.

77 lines
2.6 KiB

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