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.

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