]> git.donarmstrong.com Git - qmk_firmware.git/blob - quantum/rgb_matrix_types.h
Fix broken link to ps2avrgb flashing instructions (#7011)
[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