luat_lcd.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef LUAT_LCD
  2. #define LUAT_LCD
  3. #include "luat_base.h"
  4. #include "luat_spi.h"
  5. #include "u8g2.h"
  6. #define WHITE 0xFFFF
  7. #define BLACK 0x0000
  8. #define BLUE 0x001F
  9. #define BRED 0XF81F
  10. #define GRED 0XFFE0
  11. #define GBLUE 0X07FF
  12. #define RED 0xF800
  13. #define MAGENTA 0xF81F
  14. #define GREEN 0x07E0
  15. #define CYAN 0x7FFF
  16. #define YELLOW 0xFFE0
  17. #define BROWN 0XBC40
  18. #define BRRED 0XFC07
  19. #define GRAY 0X8430
  20. #define GRAY175 0XAD75
  21. #define GRAY151 0X94B2
  22. #define GRAY187 0XBDD7
  23. #define GRAY240 0XF79E
  24. #ifndef LUAT_LCD_COLOR_DEPTH
  25. #define LUAT_LCD_COLOR_DEPTH 16
  26. #endif
  27. #if (LUAT_LCD_COLOR_DEPTH == 32)
  28. #define luat_color_t uint32_t
  29. #elif (LUAT_LCD_COLOR_DEPTH == 16)
  30. #define luat_color_t uint16_t
  31. #elif (LUAT_LCD_COLOR_DEPTH == 8)
  32. #define luat_color_t uint8_t
  33. #else
  34. #error "no supprt color depth"
  35. #endif
  36. #define LUAT_LCD_SPI_DEVICE 255
  37. struct luat_lcd_opts;
  38. typedef struct luat_lcd_conf {
  39. uint8_t port;
  40. uint8_t pin_dc;
  41. uint8_t pin_pwr;
  42. uint8_t pin_rst;
  43. uint32_t w;
  44. uint32_t h;
  45. uint32_t buffer_size;
  46. uint32_t dc_delay_us;
  47. uint8_t xoffset;//偏移
  48. uint8_t yoffset;//偏移
  49. uint8_t auto_flush;
  50. uint8_t direction;//方向
  51. u8g2_t luat_lcd_u8g2 ;
  52. struct luat_lcd_opts* opts;
  53. luat_spi_device_t* lcd_spi_device;
  54. int lcd_spi_ref;
  55. void* userdata;
  56. // buff 相关
  57. luat_color_t* buff;
  58. int buff_ref;
  59. uint16_t flush_y_min;
  60. uint16_t flush_y_max;
  61. uint8_t is_init_done;
  62. } luat_lcd_conf_t;
  63. typedef struct luat_lcd_opts {
  64. const char* name;
  65. int (*init)(luat_lcd_conf_t* conf);
  66. } luat_lcd_opts_t;
  67. int lcd_write_cmd(luat_lcd_conf_t* conf,const uint8_t cmd);
  68. int lcd_write_data(luat_lcd_conf_t* conf,const uint8_t data);
  69. int lcd_write_half_word(luat_lcd_conf_t* conf,const luat_color_t da);
  70. luat_lcd_conf_t* luat_lcd_get_default(void);
  71. const char* luat_lcd_name(luat_lcd_conf_t* conf);
  72. int luat_lcd_init(luat_lcd_conf_t* conf);
  73. int luat_lcd_close(luat_lcd_conf_t* conf);
  74. int luat_lcd_display_on(luat_lcd_conf_t* conf);
  75. int luat_lcd_display_off(luat_lcd_conf_t* conf);
  76. int luat_lcd_sleep(luat_lcd_conf_t* conf);
  77. int luat_lcd_wakeup(luat_lcd_conf_t* conf);
  78. int luat_lcd_inv_off(luat_lcd_conf_t* conf);
  79. int luat_lcd_inv_on(luat_lcd_conf_t* conf);
  80. int luat_lcd_set_address(luat_lcd_conf_t* conf,uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2);
  81. int luat_lcd_set_color(luat_color_t back, luat_color_t fore);
  82. luat_color_t color_swap(luat_color_t color);
  83. int luat_lcd_draw(luat_lcd_conf_t* conf, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, luat_color_t* color);
  84. int luat_lcd_flush(luat_lcd_conf_t* conf);
  85. int luat_lcd_draw_no_block(luat_lcd_conf_t* conf, uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, luat_color_t* color, uint8_t last_flush);
  86. int luat_lcd_clear(luat_lcd_conf_t* conf,luat_color_t color);
  87. int luat_lcd_draw_fill(luat_lcd_conf_t* conf,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2,luat_color_t color);
  88. int luat_lcd_draw_point(luat_lcd_conf_t* conf, uint16_t x, uint16_t y, luat_color_t color);
  89. int luat_lcd_draw_line(luat_lcd_conf_t* conf,uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, luat_color_t color);
  90. int luat_lcd_draw_vline(luat_lcd_conf_t* conf, uint16_t x, uint16_t y,uint16_t h, luat_color_t color);
  91. int luat_lcd_draw_hline(luat_lcd_conf_t* conf, uint16_t x, uint16_t y,uint16_t h, luat_color_t color);
  92. int luat_lcd_draw_rectangle(luat_lcd_conf_t* conf,uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2, luat_color_t color);
  93. int luat_lcd_draw_circle(luat_lcd_conf_t* conf,uint16_t x0, uint16_t y0, uint8_t r, luat_color_t color);
  94. void luat_lcd_execute_cmds(luat_lcd_conf_t* conf, uint32_t* cmds, uint32_t count);
  95. typedef struct luat_lcd_custom {
  96. size_t init_cmd_count;
  97. uint32_t *initcmd; // 实际命令长度与init_cmd_count相同
  98. }luat_lcd_custom_t;
  99. #endif