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.

129 lines
3.2 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
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
2 years ago
2 years ago
2 years ago
  1. #pragma once
  2. #include "dwin_ram_manager.hpp"
  3. //
  4. #include "sdk/os/zos.hpp"
  5. namespace iflytop {
  6. namespace dwin {
  7. using namespace std;
  8. /**
  9. * @brief
  10. *
  11. * 2byte 1byte cmd data crc
  12. * 5AA5 01 0x82/0x83 1->249
  13. *
  14. * 2byte 1byte cmd data crc
  15. * 5AA5 01 0x81/0x80 1->249
  16. */
  17. #define TX_CACHE_SIZE 256
  18. #define RX_CACHE_SIZE 256
  19. class Date {
  20. public:
  21. uint16_t year;
  22. uint16_t month;
  23. uint16_t day;
  24. uint16_t hour;
  25. uint16_t minute;
  26. uint16_t second;
  27. uint16_t weekdaynum;
  28. };
  29. class TxContext {
  30. public:
  31. uint8_t txcache[TX_CACHE_SIZE];
  32. uint8_t txlen;
  33. uint8_t receiptcache[RX_CACHE_SIZE];
  34. uint8_t receiptlen;
  35. bool receipt_ready_flag = false;
  36. };
  37. class DwinScreenCfg {
  38. public:
  39. uint16_t freeRawStartAddr = 0;
  40. uint16_t freeRawEndAddr = 0;
  41. uint16_t textDisplayerStartAddr = 0;
  42. uint16_t textDisplayerEndAddr = 0;
  43. uint16_t textDisplayerSize = 0;
  44. uint16_t varIconStartAddr = 0;
  45. uint16_t varIconEndAddr = 0;
  46. uint16_t varIconSize = 0;
  47. };
  48. class Pos {
  49. public:
  50. uint16_t x;
  51. uint16_t y;
  52. };
  53. class DwinScreen {
  54. public:
  55. private:
  56. DwinScreenCfg m_dwcfg;
  57. UART_HandleTypeDef* m_huart;
  58. ZUART m_uarthandler;
  59. TxContext txcontext;
  60. uint8_t m_tx_pre_processcache[TX_CACHE_SIZE];
  61. uint8_t m_rd_pre_processcache[RX_CACHE_SIZE];
  62. DwinRamManager m_rammanager; // ����ram������
  63. DwinRamManager m_textDisplayerManager; // �ı���������������
  64. DwinRamManager m_varIconManager; // ͼ�α�������������
  65. bool enablecrc = false;
  66. public:
  67. /**
  68. * @brief
  69. *
  70. * @param huart
  71. * @param baudrate
  72. */
  73. static DwinScreen& ins();
  74. void init(UART_HandleTypeDef* huart, DwinScreenCfg cfg);
  75. public:
  76. bool set_page(uint16_t pageid);
  77. uint16_t get_page();
  78. bool set_brightness(uint16_t brightness);
  79. bool set_rtc(uint16_t year, uint16_t month, uint16_t day, uint16_t hour, uint16_t minute, uint16_t second);
  80. bool get_rtc(Date* date);
  81. bool ping();
  82. uint16_t alloc_free_ram(uint16_t size);
  83. uint16_t alloc_one_text_displayer();
  84. uint16_t alloc_one_var_icon();
  85. public:
  86. bool write_reg16(uint16_t regaddr, uint16_t data, int overtime);
  87. bool read_reg16(uint16_t regaddr, uint16_t& data, int overtime);
  88. bool write_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime);
  89. bool read_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime);
  90. bool write_varspace16(uint16_t regaddr, uint16_t data, int overtime);
  91. bool read_varspace16(uint16_t regaddr, uint16_t& data, int overtime);
  92. bool write_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime);
  93. bool read_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime);
  94. bool write_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t data, int overtime);
  95. bool read_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t& data, int overtime);
  96. bool write_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime);
  97. bool read_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime);
  98. private:
  99. void clearrxcache();
  100. void sendcmd(uint8_t* cmd, size_t len);
  101. bool sendcmdblock(int overtime);
  102. };
  103. } // namespace dwin
  104. } // namespace iflytop