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