PixelKey
NeoPixel USB Key
Loading...
Searching...
No Matches
keyframes.h
1#ifndef KEYFRAMES_H
2#define KEYFRAMES_H
3
4#include <stdlib.h>
5#include <stdint.h>
6#include <stdbool.h>
7
8#include "color.h"
9
17#define FRAMERATE_MIN (1U)
18
23#define FRAMERATE_MAX (128U)
24
26#define TIMESTEP_FINISHED ((timestep_t) 0U)
27
29#define TIMESTEP_INDEFINITE ((timestep_t) UINT32_MAX)
30
32#define GROUP_CHILDREN_MAX_COUNT (16)
33
35typedef enum e_schedule_type
36{
42
44typedef enum e_keyframe_flag
45{
48 KEYFRAME_FLAG_GROUP = (1UL << 31),
50
52typedef uint32_t timestep_t;
53
55typedef uint8_t framerate_t;
56
58typedef struct st_keyframe_base keyframe_base_t; // Defined ahead for use in the api struct.
59
63typedef struct st_keyframe_base_api
64{
72 bool (* render_frame)(keyframe_base_t * const p_keyframe, timestep_t time, color_rgb_t * p_color_out);
73
80 void (* render_init)(keyframe_base_t * const p_keyframe, framerate_t framerate, color_rgb_t current_color);
81
87 keyframe_base_t * (* clone)(keyframe_base_t const * const p_keyframe);
89
91typedef struct st_keyframe_schedule
92{
94 union
95 {
96 uint64_t fixed_time;
97 uint64_t relative_time;
99 struct
100 {
101 uint64_t start;
102 uint64_t end;
105 } interval;
106 };
108
111{
119 uint32_t flags;
121 struct
122 {
124 int32_t repeat_count;
127};
128
130typedef struct st_keyframe_group
131{
133 keyframe_base_t base;
134
135 uint8_t children_len;
138 keyframe_base_t * const children[GROUP_CHILDREN_MAX_COUNT];
140
150typedef struct st_keyframe_blink
151{
153 keyframe_base_t base;
155 struct
156 {
159 float period;
160 uint8_t duty_cycle;
163 } args;
165 struct
166 {
169 } state;
171
183typedef struct st_keyframe_set
184{
186 keyframe_base_t base;
188 struct
189 {
191 } args;
193
196#include "keyframe_fade.h"
197
198keyframe_base_t * keyframe_blink_parse(char * p_str);
199keyframe_base_t * keyframe_blink_ctor(keyframe_blink_t * p_blink);
200
201keyframe_base_t * keyframe_fade_parse(char * p_str);
202keyframe_base_t * keyframe_fade_ctor(keyframe_fade_t * p_fade);
203
204keyframe_base_t * keyframe_set_parse(char * p_str);
205keyframe_base_t * keyframe_set_ctor(keyframe_set_t * p_set);
206
209#endif // KEYFRAMES_H
keyframe_base_t * keyframe_blink_parse(char *p_str)
Parses a command string into a Blink Keyframe.
Definition: keyframe_blink.c:132
uint8_t framerate_t
Number of frames per second.
Definition: keyframes.h:55
keyframe_flag_t
Management flags for keyframes.
Definition: keyframes.h:45
uint32_t timestep_t
The base unit of time for animating keyframes; resolution of 1 frame.
Definition: keyframes.h:52
keyframe_base_t * keyframe_blink_ctor(keyframe_blink_t *p_blink)
Initialize a Blink keyframe with the appropriate keyframe_base_t and state values.
Definition: keyframe_blink.c:243
keyframe_base_t * keyframe_set_parse(char *p_str)
Parses a command string into a Set Keyframe.
Definition: keyframe_set.c:80
schedule_type_t
Types of supported keyframe schedules.
Definition: keyframes.h:36
keyframe_base_t * keyframe_fade_parse(char *p_str)
Parses a command string into a Fade Keyframe.
Definition: keyframe_fade.c:279
#define GROUP_CHILDREN_MAX_COUNT
Maximum allowed child keyframes.
Definition: keyframes.h:32
keyframe_base_t * keyframe_set_ctor(keyframe_set_t *p_set)
Initialize a Set keyframe with the appropriate keyframe_base_t values.
Definition: keyframe_set.c:133
keyframe_base_t * keyframe_fade_ctor(keyframe_fade_t *p_fade)
Initialize a Fade keyframe with the appropriate keyframe_base_t and state values.
Definition: keyframe_fade.c:491
@ KEYFRAME_FLAG_NONE
No flags are set.
Definition: keyframes.h:46
@ KEYFRAME_FLAG_INITIALIZED
The keyframe has been initialized.
Definition: keyframes.h:47
@ KEYFRAME_FLAG_GROUP
The keyframe is a group keyframe.
Definition: keyframes.h:48
@ SCHEDULE_TYPE_RELATIVE
Schedule is for a relative time in the future.
Definition: keyframes.h:39
@ SCHEDULE_TYPE_FIXED
Schedule is fixed at a specific time.
Definition: keyframes.h:38
@ SCHEDULE_TYPE_INTERVAL
Schedule is for a variable interval of a start and end time.
Definition: keyframes.h:40
@ SCHEDULE_TYPE_NONE
No schedule.
Definition: keyframes.h:37
Color represented in red-green-blue color space.
Definition: color.h:70
Represents a color in a defined color space.
Definition: color.h:112
Base API for all keyframe types.
Definition: keyframes.h:64
Fade keyframe.
Definition: keyframe_fade.h:70
Storage and state for keyframe groups.
Definition: keyframes.h:131
uint8_t current_child_idx
Index of the child keyframe being rendered.
Definition: keyframes.h:136
keyframe_base_t base
Keyframe base; MUST be the first entry in the struct.
Definition: keyframes.h:133
uint8_t children_len
Number of child keyframes in this group.
Definition: keyframes.h:135
Provides scheduled time information for keyframes.
Definition: keyframes.h:92
bool start_is_relative
true for start time is a relative time, false indicates fixed/absolute time.
Definition: keyframes.h:103
uint64_t start
Interval start time.
Definition: keyframes.h:101
uint64_t fixed_time
Fixed/absolute timestamp of keyframe start.
Definition: keyframes.h:96
uint64_t relative_time
Relative time to start the keyframe.
Definition: keyframes.h:97
bool end_is_relative
true for end time is a relative time, false indicates fixed/absolute time.
Definition: keyframes.h:104
schedule_type_t type
Type of schedule modifier.
Definition: keyframes.h:93
uint64_t end
Interval end time.
Definition: keyframes.h:102
Set keyframe.
Definition: keyframes.h:184
keyframe_base_t base
Keyframe base; MUST be the first entry in the struct.
Definition: keyframes.h:186
color_t color
Color to set.
Definition: keyframes.h:190
Base struct for all keyframe types, must be the first element in child structs.
Definition: keyframes.h:111
int32_t repeat_count
Total number of times to render the keyframe; negative is indefinite.
Definition: keyframes.h:124
keyframe_schedule_t schedule
Schedule times for this keyframe.
Definition: keyframes.h:123
struct st_keyframe_base::@11 modifiers
Modifiers applied to this keyframe.
uint32_t flags
Flags used for identification and rendering.
Definition: keyframes.h:119
bool schedule_is_repeating
Indicates the schedule should repeat instead of the frame.
Definition: keyframes.h:125
keyframe_base_api_t const *const p_api
Pointer to the base API struct for the keyframe instance.
Definition: keyframes.h:113