]> git.donarmstrong.com Git - qmk_firmware.git/blob - quantum/rgb_matrix_types.h
Switching rgb_config_t to use HSV struct
[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 {
37   STARTING,
38   RENDERING,
39   FLUSHING,
40   SYNCING
41 } rgb_task_states;
42
43 typedef uint8_t led_flags_t;
44
45 typedef struct PACKED {
46   uint8_t iter;
47   led_flags_t flags;
48   bool init;
49 } effect_params_t;
50
51 typedef struct PACKED {
52   // Global tick at 20 Hz
53   uint32_t tick;
54   // Ticks since this key was last hit.
55   uint32_t any_key_hit;
56 } rgb_counters_t;
57
58 typedef struct PACKED {
59         uint8_t x;
60         uint8_t y;
61 } point_t;
62
63 #define HAS_FLAGS(bits, flags) ((bits & flags) == flags)
64 #define HAS_ANY_FLAGS(bits, flags) ((bits & flags) != 0x00)
65
66 #define LED_FLAG_ALL 0xFF
67 #define LED_FLAG_NONE 0x00
68 #define LED_FLAG_MODIFIER 0x01
69 #define LED_FLAG_UNDERGLOW 0x02
70 #define LED_FLAG_KEYLIGHT 0x04
71
72 #define NO_LED 255
73
74 typedef struct PACKED {
75   uint8_t matrix_co[MATRIX_ROWS][MATRIX_COLS];
76   point_t point[DRIVER_LED_TOTAL];
77   uint8_t flags[DRIVER_LED_TOTAL];
78 } led_config_t;
79
80 typedef union {
81   uint32_t raw;
82   struct PACKED {
83     uint8_t  enable  :2;
84     uint8_t  mode    :6;
85     HSV      hsv;
86     uint8_t  speed;  //EECONFIG needs to be increased to support this
87   };
88 } rgb_config_t;
89
90 #if defined(_MSC_VER)
91 #pragma pack( pop )
92 #endif