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.

97 lines
2.5 KiB

2 years ago
  1. #pragma once
  2. #include "sdk/os/zos.hpp"
  3. namespace iflytop {
  4. namespace dwin {
  5. using namespace std;
  6. /**
  7. * @brief
  8. *
  9. * 2byte 1byte cmd data crc
  10. * 5AA5 01 0x82/0x83 1->249
  11. *
  12. * 2byte 1byte cmd data crc
  13. * 5AA5 01 0x81/0x80 1->249
  14. */
  15. #define TX_CACHE_SIZE 256
  16. #define RX_CACHE_SIZE 256
  17. class DwinScreen {
  18. public:
  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. private:
  30. class TxContext {
  31. public:
  32. uint8_t txcache[TX_CACHE_SIZE];
  33. uint8_t txlen;
  34. uint8_t receiptcache[RX_CACHE_SIZE];
  35. uint8_t receiptlen;
  36. bool receipt_ready_flag = false;
  37. };
  38. private:
  39. UART_HandleTypeDef* m_huart;
  40. ZUART m_uarthandler;
  41. TxContext txcontext;
  42. uint8_t m_tx_pre_processcache[TX_CACHE_SIZE];
  43. uint8_t m_rd_pre_processcache[RX_CACHE_SIZE];
  44. bool enablecrc = false;
  45. public:
  46. /**
  47. * @brief
  48. *
  49. * @param huart
  50. * @param baudrate
  51. */
  52. void init(UART_HandleTypeDef* huart, int __ = 0);
  53. public:
  54. bool set_page(uint16_t pageid);
  55. uint16_t get_page();
  56. bool set_brightness(uint16_t brightness);
  57. bool set_rtc(uint16_t year, uint16_t month, uint16_t day, uint16_t hour, uint16_t minute, uint16_t second);
  58. bool get_rtc(Date* date);
  59. bool ping();
  60. public:
  61. bool write_reg16(uint16_t regaddr, uint16_t data, int overtime);
  62. bool read_reg16(uint16_t regaddr, uint16_t& data, int overtime);
  63. bool write_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime);
  64. bool read_reg(uint16_t regaddr, uint8_t* data, size_t len, int overtime);
  65. bool write_varspace16(uint16_t regaddr, uint16_t data, int overtime);
  66. bool read_varspace16(uint16_t regaddr, uint16_t& data, int overtime);
  67. bool write_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime);
  68. bool read_varspace16_muti(uint16_t regaddr, uint16_t* data, size_t n16, int overtime);
  69. bool write_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t data, int overtime);
  70. bool read_varspace8(uint16_t regaddr, uint16_t subadd, uint16_t& data, int overtime);
  71. bool write_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime);
  72. bool read_varspace(uint16_t regaddr, uint8_t* data, uint8_t len, int overtime);
  73. private:
  74. void clearrxcache();
  75. void sendcmd(uint8_t* cmd, size_t len);
  76. bool sendcmdblock(int overtime);
  77. };
  78. } // namespace dwin
  79. } // namespace iflytop