format code according to conventions [skip ci]
[jackhill/qmk/firmware.git] / quantum / rgb_matrix_types.h
1 #pragma once
2
3 #include <stdint.h>
4 #include <stdbool.h>
5 #include "color.h"
6
7 #if defined(__GNUC__)
8 # define PACKED __attribute__((__packed__))
9 #else
10 # define PACKED
11 #endif
12
13 #if defined(_MSC_VER)
14 # pragma pack(push, 1)
15 #endif
16
17 #if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES)
18 # define RGB_MATRIX_KEYREACTIVE_ENABLED
19 #endif
20
21 // Last led hit
22 #ifndef LED_HITS_TO_REMEMBER
23 # define LED_HITS_TO_REMEMBER 8
24 #endif // LED_HITS_TO_REMEMBER
25
26 #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
27 typedef struct PACKED {
28 uint8_t count;
29 uint8_t x[LED_HITS_TO_REMEMBER];
30 uint8_t y[LED_HITS_TO_REMEMBER];
31 uint8_t index[LED_HITS_TO_REMEMBER];
32 uint16_t tick[LED_HITS_TO_REMEMBER];
33 } last_hit_t;
34 #endif // RGB_MATRIX_KEYREACTIVE_ENABLED
35
36 typedef enum rgb_task_states { STARTING, RENDERING, FLUSHING, SYNCING } rgb_task_states;
37
38 typedef uint8_t led_flags_t;
39
40 typedef struct PACKED {
41 uint8_t iter;
42 led_flags_t flags;
43 bool init;
44 } effect_params_t;
45
46 typedef struct PACKED {
47 // Global tick at 20 Hz
48 uint32_t tick;
49 // Ticks since this key was last hit.
50 uint32_t any_key_hit;
51 } rgb_counters_t;
52
53 typedef struct PACKED {
54 uint8_t x;
55 uint8_t y;
56 } point_t;
57
58 #define HAS_FLAGS(bits, flags) ((bits & flags) == flags)
59 #define HAS_ANY_FLAGS(bits, flags) ((bits & flags) != 0x00)
60
61 #define LED_FLAG_ALL 0xFF
62 #define LED_FLAG_NONE 0x00
63 #define LED_FLAG_MODIFIER 0x01
64 #define LED_FLAG_UNDERGLOW 0x02
65 #define LED_FLAG_KEYLIGHT 0x04
66
67 #define NO_LED 255
68
69 typedef struct PACKED {
70 uint8_t matrix_co[MATRIX_ROWS][MATRIX_COLS];
71 point_t point[DRIVER_LED_TOTAL];
72 uint8_t flags[DRIVER_LED_TOTAL];
73 } led_config_t;
74
75 typedef union {
76 uint32_t raw;
77 struct PACKED {
78 uint8_t enable : 2;
79 uint8_t mode : 6;
80 HSV hsv;
81 uint8_t speed; // EECONFIG needs to be increased to support this
82 };
83 } rgb_config_t;
84
85 #if defined(_MSC_VER)
86 # pragma pack(pop)
87 #endif