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.

95 lines
2.5 KiB

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