@@ -79,20 +79,21 @@ mouse_report_t *screensaver_pong(device_t *state) {
7979mouse_report_t * screensaver_jitter (device_t * state ) {
8080 const int16_t jitter_distance = 2 ;
8181 static mouse_report_t report = {
82- .x = jitter_distance ,
8382 .y = jitter_distance ,
8483 .mode = RELATIVE ,
8584 };
86-
87- report .x = - report .x ;
8885 report .y = - report .y ;
8986
9087 return & report ;
9188}
9289
9390/* Have something fun and entertaining when idle. */
9491void screensaver_task (device_t * state ) {
95- const int mouse_move_delay = 5000 ;
92+ const uint32_t delays [] = {
93+ 0 , /* DISABLED, unused index 0 */
94+ 5000 , /* PONG, move mouse every 5 ms for a high framerate */
95+ 10000000 , /* JITTER, once every 10 sec is more than enough */
96+ };
9697 static int last_pointer_move = 0 ;
9798 screensaver_t * screensaver = & state -> config .output [BOARD_ROLE ].screensaver ;
9899 uint64_t inactivity_period = time_us_64 () - state -> last_activity [BOARD_ROLE ];
@@ -101,8 +102,8 @@ void screensaver_task(device_t *state) {
101102 if (screensaver -> mode == DISABLED )
102103 return ;
103104
104- /* System is still not idle for long enough to activate or we've been running for too long */
105- if (inactivity_period < screensaver -> idle_time_us )
105+ /* System is still not idle for long enough to activate or screensaver mode is not supported */
106+ if (inactivity_period < screensaver -> idle_time_us || screensaver -> mode > MAX_SS_VAL )
106107 return ;
107108
108109 /* We exceeded the maximum permitted screensaver runtime */
@@ -115,7 +116,7 @@ void screensaver_task(device_t *state) {
115116 return ;
116117
117118 /* We're active! Now check if it's time to move the cursor yet. */
118- if (( time_us_32 ()) - last_pointer_move < mouse_move_delay )
119+ if (time_us_32 () - last_pointer_move < delays [ screensaver -> mode ] )
119120 return ;
120121
121122 mouse_report_t * report ;
0 commit comments