4444#endif // ST7789_SPI_MODE
4545
4646static painter_device_t st7789_display ;
47- #ifdef QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
48- static painter_device_t st7789_170x320_surface_display ;
49- # if HAL_USE_SDRAM == TRUE
50- __attribute__((section (".ram7" )))
51- # endif
52- static uint8_t display_buffer [SURFACE_REQUIRED_BUFFER_BYTE_SIZE (240 , 320 , 16 )];
53- #else
54- # define st7789_170x320_surface_display st7789_display
55- #endif // QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
47+ painter_image_handle_t screen_saver ;
5648
5749static bool has_run = false, forced_reinit = false;
5850
@@ -90,21 +82,9 @@ void init_display_st7789_170x320_rotation(void) {
9082void init_display_st7789_170x320 (void ) {
9183 st7789_display = qp_st7789_make_spi_device (240 , 320 , ST7789_CS_PIN , ST7789_DC_PIN , ST7789_RST_PIN ,
9284 ST7789_SPI_DIVIDER , ST7789_SPI_MODE );
93-
94- #ifdef QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
95- st7789_170x320_surface_display = qp_make_rgb565_surface (240 , 320 , display_buffer );
96- #endif // QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
97-
9885 init_display_st7789_170x320_rotation ();
9986
100- #ifdef QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
101- qp_init (st7789_170x320_surface_display , QP_ROTATION_0 );
102-
103- qp_rect (st7789_170x320_surface_display , 0 , 0 , 240 - 1 , 320 - 1 , HSV_BLACK , true);
104- qp_surface_draw (st7789_170x320_surface_display , st7789_display , 0 , 0 , 0 );
105- #else
10687 qp_rect (st7789_display , 0 , 0 , 240 - 1 , 320 - 1 , 0 , 0 , 0 , true);
107- #endif
10888
10989 st7789_170x320_draw_user ();
11090}
@@ -120,40 +100,52 @@ __attribute__((weak)) void st7789_170x320_draw_user(void) {
120100
121101 static bool force_redraw = false;
122102#ifdef COMMUNITY_MODULE_DISPLAY_MENU_ENABLE
123- if (painter_render_menu (st7789_170x320_surface_display , font_oled , 0 , 0 , width , height , false,
103+ if (painter_render_menu (st7789_display , font_oled , 0 , 0 , width , height , false,
124104 userspace_config .display .painter .hsv .primary ,
125105 userspace_config .display .painter .hsv .secondary )) {
126106 force_redraw = true;
127107 } else
128108#endif // COMMUNITY_MODULE_DISPLAY_MENU_ENABLE
129109 {
130- static uint8_t display_logo = 0xFF ;
131- const uint8_t display_logo_ref = is_keyboard_left () ? userspace_config .display .painter .left .display_logo
132- : userspace_config .display .painter .right .display_logo ;
133-
134- if (display_logo != display_logo_ref ) {
135- display_logo = display_logo_ref ;
136- force_redraw = true;
110+ static uint16_t screen_saver_timer = 0 ;
111+ static bool screen_saver_redraw = true;
112+ static uint8_t display_mode_ref = 0 ;
113+ uint8_t display_logo_index = 0 ;
114+ bool display_logo_cycle = false;
115+ if (is_keyboard_left ()) {
116+ display_logo_index = userspace_config .display .painter .left .display_logo ;
117+ display_logo_cycle = userspace_config .display .painter .left .display_logo_cycle ;
118+ } else {
119+ display_logo_index = userspace_config .display .painter .right .display_logo ;
120+ display_logo_cycle = userspace_config .display .painter .right .display_logo_cycle ;
137121 }
138- if (force_redraw ) {
139- painter_image_handle_t screen_saver = qp_load_image_mem (screen_saver_image [display_logo ].data );
140122
123+ if (display_logo_cycle && timer_elapsed (screen_saver_timer ) > 5000 ) {
124+ static uint8_t last_display_mode = 0 ;
125+ if (last_display_mode != display_logo_index ) {
126+ last_display_mode = display_logo_index ;
127+ display_mode_ref = 0 ; // reset the reference
128+ } else {
129+ display_mode_ref ++ ;
130+ }
131+ screen_saver_redraw = true;
132+ screen_saver_timer = timer_read ();
133+ } else if (!display_logo_cycle ) {
134+ display_mode_ref = 0 ; // reset the reference
135+ // xprintf("Screen saver: %d, reset at %u\n", display_mode_ref, screen_saver_timer);
136+ }
137+ if (force_redraw || screen_saver_redraw ) {
138+ screen_saver_redraw = force_redraw = false;
139+ screen_saver = qp_load_image_mem (
140+ screen_saver_image [(display_logo_index + display_mode_ref ) % screensaver_image_size ].data );
141141 if (screen_saver != NULL ) {
142- #ifdef QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
143- qp_drawimage (st7789_170x320_surface_display , 0 , 0 , screen_saver );
144- #else // QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
145142 qp_drawimage (st7789_display , 0 , 0 , screen_saver );
146- #endif // QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
147143 qp_close_image (screen_saver );
144+ } else {
145+ qp_rect (st7789_display , 0 , 0 , width - 1 , height - 1 , 0 , 0 , 0 , true);
148146 }
149- force_redraw = false;
150- } else {
151- return ;
152147 }
153148 }
154- #ifdef QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
155- qp_surface_draw (st7789_170x320_surface_display , st7789_display , 0 , 0 , 0 );
156- #endif // QUANTUM_PAINTER_DRIVERS_ST7789_170X320_SURFACE
157149
158150 qp_flush (st7789_display );
159151}
0 commit comments