|
|
@ -106,15 +106,23 @@ void busyCallback(const void* p) { |
|
|
|
#if DISPLAY == OLED |
|
|
|
#if DISPLAY == OLED |
|
|
|
Adafruit_SSD1306 display(DISP_W, DISP_H, &Wire, DISP_RST); |
|
|
|
Adafruit_SSD1306 display(DISP_W, DISP_H, &Wire, DISP_RST); |
|
|
|
float disp_target_fps = 7; |
|
|
|
float disp_target_fps = 7; |
|
|
|
|
|
|
|
#define SCREENSAVER_TIME 500 // ms
|
|
|
|
|
|
|
|
uint32_t last_screensaver = 0; |
|
|
|
|
|
|
|
uint32_t screensaver_interval = 600000; // 10 minutes in ms
|
|
|
|
|
|
|
|
bool screensaver_enabled = false; |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#if BOARD_MODEL == BOARD_RAK4631 |
|
|
|
#if BOARD_MODEL == BOARD_RAK4631 |
|
|
|
#if DISPLAY == EINK_BW |
|
|
|
#if DISPLAY == EINK_BW |
|
|
|
GxEPD2_BW<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); |
|
|
|
GxEPD2_BW<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); |
|
|
|
float disp_target_fps = 0.2; |
|
|
|
float disp_target_fps = 0.2; |
|
|
|
|
|
|
|
uint32_t last_epd_refresh = 0; |
|
|
|
|
|
|
|
#define REFRESH_PERIOD 300000 // 5 minutes in ms
|
|
|
|
#elif DISPLAY == EINK_3C |
|
|
|
#elif DISPLAY == EINK_3C |
|
|
|
GxEPD2_3C<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); |
|
|
|
GxEPD2_3C<DISPLAY_MODEL, DISPLAY_MODEL::HEIGHT> display(DISPLAY_MODEL(pin_disp_cs, pin_disp_dc, pin_disp_reset, pin_disp_busy)); |
|
|
|
float disp_target_fps = 0.05; // refresh usually takes longer on 3C, hence 4x the refresh period
|
|
|
|
float disp_target_fps = 0.05; // refresh usually takes longer on 3C, hence this is 4x the BW refresh period
|
|
|
|
|
|
|
|
uint32_t last_epd_refresh = 0; |
|
|
|
|
|
|
|
#define REFRESH_PERIOD 600000 // 10 minutes in ms
|
|
|
|
#endif |
|
|
|
#endif |
|
|
|
#else |
|
|
|
#else |
|
|
|
// add more eink compatible boards here
|
|
|
|
// add more eink compatible boards here
|
|
|
@ -130,11 +138,6 @@ unsigned char fb[512]; |
|
|
|
uint32_t last_disp_update = 0; |
|
|
|
uint32_t last_disp_update = 0; |
|
|
|
int disp_update_interval = 1000/disp_target_fps; |
|
|
|
int disp_update_interval = 1000/disp_target_fps; |
|
|
|
|
|
|
|
|
|
|
|
#define SCREENSAVER_TIME 500 // ms
|
|
|
|
|
|
|
|
uint32_t last_screensaver = 0; |
|
|
|
|
|
|
|
uint32_t screensaver_interval = 600000; |
|
|
|
|
|
|
|
bool screensaver_enabled = false; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t last_page_flip = 0; |
|
|
|
uint32_t last_page_flip = 0; |
|
|
|
uint32_t last_interface_page_flip = 0; |
|
|
|
uint32_t last_interface_page_flip = 0; |
|
|
|
int page_interval = 4000; |
|
|
|
int page_interval = 4000; |
|
|
@ -1117,13 +1120,17 @@ void update_display(bool blank = false) { |
|
|
|
update_stat_area(); |
|
|
|
update_stat_area(); |
|
|
|
update_disp_area(); |
|
|
|
update_disp_area(); |
|
|
|
display.display(); |
|
|
|
display.display(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32_t current = millis(); |
|
|
|
// Invert display to protect against OLED screen burn in
|
|
|
|
// Invert display to protect against OLED screen burn in
|
|
|
|
if (millis()-last_screensaver >= screensaver_interval+SCREENSAVER_TIME && screensaver_enabled) { |
|
|
|
if (screensaver_enabled) { |
|
|
|
display.invertDisplay(0); |
|
|
|
if (current-last_screensaver >= screensaver_interval+SCREENSAVER_TIME) { |
|
|
|
last_screensaver = millis(); |
|
|
|
display.invertDisplay(0); |
|
|
|
screensaver_enabled = false; |
|
|
|
last_screensaver = current; |
|
|
|
|
|
|
|
screensaver_enabled = false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
else if (millis()-last_screensaver >= screensaver_interval) { |
|
|
|
else if (current-last_screensaver >= screensaver_interval) { |
|
|
|
display.invertDisplay(1); |
|
|
|
display.invertDisplay(1); |
|
|
|
screensaver_enabled = true; |
|
|
|
screensaver_enabled = true; |
|
|
|
} |
|
|
|
} |
|
|
@ -1132,9 +1139,18 @@ void update_display(bool blank = false) { |
|
|
|
display.fillScreen(GxEPD_WHITE); |
|
|
|
display.fillScreen(GxEPD_WHITE); |
|
|
|
update_stat_area(); |
|
|
|
update_stat_area(); |
|
|
|
update_disp_area(); |
|
|
|
update_disp_area(); |
|
|
|
display.display(true); |
|
|
|
|
|
|
|
|
|
|
|
uint32_t current = millis(); |
|
|
|
|
|
|
|
if (current-last_epd_refresh >= REFRESH_PERIOD) { |
|
|
|
|
|
|
|
// Perform a full refresh after the correct time has elapsed
|
|
|
|
|
|
|
|
display.display(false); |
|
|
|
|
|
|
|
last_epd_refresh = current; |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
// Only perform a partial refresh
|
|
|
|
|
|
|
|
display.display(true); |
|
|
|
|
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
last_disp_update = millis(); |
|
|
|
last_disp_update = current; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|