@@ -48,54 +48,42 @@ void pbsys_hub_light_grid_init() {
4848 pbio_light_grid_init (pbsys_hub_light_grid , 5 , & pbsys_hub_light_grid_funcs );
4949}
5050
51- // FIXME: compress / implement differently
52- static const uint8_t pbsys_hub_light_grid_user_program_animation_cells [] = {
53- 0 , 0 , 0 , 0 , 0 , 10 , 61 , 99 , 79 , 25 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
54- 0 , 0 , 0 , 0 , 0 , 6 , 53 , 97 , 85 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
55- 0 , 0 , 0 , 0 , 0 , 3 , 45 , 94 , 90 , 39 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
56- 0 , 0 , 0 , 0 , 0 , 1 , 38 , 89 , 94 , 47 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
57- 0 , 0 , 0 , 0 , 0 , 0 , 30 , 84 , 97 , 55 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
58- 0 , 0 , 0 , 0 , 0 , 1 , 23 , 78 , 99 , 63 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
59- 0 , 0 , 0 , 0 , 0 , 2 , 17 , 71 , 100 , 70 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
60- 0 , 0 , 0 , 0 , 0 , 5 , 12 , 63 , 99 , 77 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
61- 0 , 0 , 0 , 0 , 0 , 9 , 7 , 56 , 98 , 83 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
62- 0 , 0 , 0 , 0 , 0 , 14 , 4 , 48 , 95 , 89 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
63- 0 , 0 , 0 , 0 , 0 , 20 , 1 , 40 , 91 , 93 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
64- 0 , 0 , 0 , 0 , 0 , 27 , 0 , 33 , 86 , 97 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
65- 0 , 0 , 0 , 0 , 0 , 34 , 0 , 25 , 80 , 99 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
66- 0 , 0 , 0 , 0 , 0 , 42 , 2 , 19 , 73 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
67- 0 , 0 , 0 , 0 , 0 , 49 , 4 , 13 , 66 , 100 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
68- 0 , 0 , 0 , 0 , 0 , 57 , 8 , 8 , 58 , 98 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
69- 0 , 0 , 0 , 0 , 0 , 65 , 12 , 5 , 50 , 96 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
70- 0 , 0 , 0 , 0 , 0 , 72 , 18 , 2 , 43 , 92 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
71- 0 , 0 , 0 , 0 , 0 , 79 , 24 , 0 , 35 , 87 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
72- 0 , 0 , 0 , 0 , 0 , 85 , 32 , 0 , 28 , 82 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
73- 0 , 0 , 0 , 0 , 0 , 90 , 39 , 1 , 21 , 75 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
74- 0 , 0 , 0 , 0 , 0 , 94 , 47 , 3 , 15 , 68 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
75- 0 , 0 , 0 , 0 , 0 , 97 , 55 , 6 , 10 , 61 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
76- 0 , 0 , 0 , 0 , 0 , 99 , 62 , 11 , 6 , 53 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
77- 0 , 0 , 0 , 0 , 0 , 100 , 70 , 16 , 3 , 45 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
78- 0 , 0 , 0 , 0 , 0 , 99 , 77 , 22 , 1 , 37 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
79- 0 , 0 , 0 , 0 , 0 , 98 , 83 , 29 , 0 , 30 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
80- 0 , 0 , 0 , 0 , 0 , 95 , 88 , 37 , 1 , 23 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
81- 0 , 0 , 0 , 0 , 0 , 91 , 93 , 44 , 2 , 17 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
82- 0 , 0 , 0 , 0 , 0 , 86 , 96 , 52 , 5 , 11 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
83- 0 , 0 , 0 , 0 , 0 , 80 , 99 , 60 , 9 , 7 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
84- 0 , 0 , 0 , 0 , 0 , 73 , 100 , 67 , 14 , 3 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
85- 0 , 0 , 0 , 0 , 0 , 66 , 100 , 75 , 20 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
86- 0 , 0 , 0 , 0 , 0 , 58 , 98 , 81 , 27 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
87- 0 , 0 , 0 , 0 , 0 , 51 , 96 , 87 , 34 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
88- 0 , 0 , 0 , 0 , 0 , 43 , 92 , 92 , 42 , 2 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
89- 0 , 0 , 0 , 0 , 0 , 35 , 88 , 95 , 50 , 4 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
90- 0 , 0 , 0 , 0 , 0 , 28 , 82 , 98 , 57 , 8 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
91- 0 , 0 , 0 , 0 , 0 , 21 , 76 , 100 , 65 , 13 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
92- 0 , 0 , 0 , 0 , 0 , 15 , 68 , 100 , 72 , 18 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
93- };
51+ static uint32_t pbsys_hub_light_grid_user_program_animation_next (pbio_light_animation_t * animation ) {
52+ // The indexes of pixels to light up
53+ static const uint8_t indexes [] = { 6 , 7 , 8 , 13 , 18 , 17 , 16 , 11 };
54+ // sine wave for brightness
55+ static const uint8_t data [] = {
56+ 0 , 1 , 2 , 3 , 5 , 7 , 10 , 13 , 17 , 21 , 25 , 30 , 35 , 40 , 45 , 50 ,
57+ 56 , 61 , 66 , 71 , 75 , 80 , 84 , 88 , 91 , 94 , 96 , 98 , 99 , 100 , 100 , 100 ,
58+ 99 , 98 , 96 , 94 , 91 , 88 , 84 , 80 , 75 , 71 , 66 , 61 , 56 , 50 , 45 , 40 ,
59+ 35 , 30 , 25 , 21 , 17 , 13 , 10 , 7 , 5 , 3 , 2 , 1 , 0 , 0 , 0 , 0 ,
60+ };
61+ // keeps track of where we are in the animation
62+ static uint8_t offset = 0 ;
63+
64+ pbdrv_led_array_dev_t * array ;
65+ if (pbdrv_led_array_get_dev (0 , & array ) == PBIO_SUCCESS ) {
66+ for (int i = 0 ; i < PBIO_ARRAY_SIZE (indexes ); i ++ ) {
67+ // Pixels are offset equally from each other in the data array so that
68+ // we get an animation that looks like the brightess is smoothly moving
69+ // from pixel to pixel.
70+ uint8_t brightness = data [(i * PBIO_ARRAY_SIZE (indexes ) + offset ++ ) % PBIO_ARRAY_SIZE (data )];
71+ pbdrv_led_array_set_brightness (array , indexes [i ], brightness );
72+ // As long as PBIO_ARRAY_SIZE(data) is a multiple of the max offset (+1),
73+ // offset wraps around correctly when the addition overflows.
74+ _Static_assert ((1 << (sizeof (offset ) * 8 )) % PBIO_ARRAY_SIZE (data ) == 0 , "needed for correct wraparound" );
75+ }
76+ }
77+
78+ return 100 ;
79+ }
9480
9581void pbsys_hub_light_grid_handle_event (process_event_t event , process_data_t data ) {
9682 if (event == PBIO_EVENT_STATUS_SET && (pbsys_status_t )data == PBSYS_STATUS_USER_PROGRAM_RUNNING ) {
97- pbio_light_grid_start_animation (pbsys_hub_light_grid , pbsys_hub_light_grid_user_program_animation_cells ,
98- PBIO_ARRAY_SIZE (pbsys_hub_light_grid_user_program_animation_cells ) / 25 , 25 );
83+ uint8_t rows [5 ] = {0 };
84+ pbio_light_grid_set_rows (pbsys_hub_light_grid , rows );
85+ pbio_light_animation_init (& pbsys_hub_light_grid -> animation , pbsys_hub_light_grid_user_program_animation_next );
86+ pbio_light_animation_start (& pbsys_hub_light_grid -> animation );
9987 }
10088 if (event == PBIO_EVENT_STATUS_CLEARED && (pbsys_status_t )data == PBSYS_STATUS_USER_PROGRAM_RUNNING ) {
10189 uint8_t rows [5 ] = {0 };
0 commit comments