#pragma once #include #include #include "color.h" #if defined(__GNUC__) #define PACKED __attribute__ ((__packed__)) #else #define PACKED #endif #if defined(_MSC_VER) #pragma pack( push, 1 ) #endif #if defined(RGB_MATRIX_KEYPRESSES) || defined(RGB_MATRIX_KEYRELEASES) #define RGB_MATRIX_KEYREACTIVE_ENABLED #endif // Last led hit #ifndef LED_HITS_TO_REMEMBER #define LED_HITS_TO_REMEMBER 8 #endif // LED_HITS_TO_REMEMBER #ifdef RGB_MATRIX_KEYREACTIVE_ENABLED typedef struct PACKED { uint8_t count; uint8_t x[LED_HITS_TO_REMEMBER]; uint8_t y[LED_HITS_TO_REMEMBER]; uint8_t index[LED_HITS_TO_REMEMBER]; uint16_t tick[LED_HITS_TO_REMEMBER]; } last_hit_t; #endif // RGB_MATRIX_KEYREACTIVE_ENABLED typedef enum rgb_task_states { STARTING, RENDERING, FLUSHING, SYNCING } rgb_task_states; typedef uint8_t led_flags_t; typedef struct PACKED { uint8_t iter; led_flags_t flags; bool init; } effect_params_t; typedef struct PACKED { // Global tick at 20 Hz uint32_t tick; // Ticks since this key was last hit. uint32_t any_key_hit; } rgb_counters_t; typedef struct PACKED { uint8_t x; uint8_t y; } point_t; #define HAS_FLAGS(bits, flags) ((bits & flags) == flags) #define HAS_ANY_FLAGS(bits, flags) ((bits & flags) != 0x00) #define LED_FLAG_ALL 0xFF #define LED_FLAG_NONE 0x00 #define LED_FLAG_MODIFIER 0x01 #define LED_FLAG_UNDERGLOW 0x02 #define LED_FLAG_KEYLIGHT 0x04 #define NO_LED 255 typedef struct PACKED { uint8_t matrix_co[MATRIX_ROWS][MATRIX_COLS]; point_t point[DRIVER_LED_TOTAL]; uint8_t flags[DRIVER_LED_TOTAL]; } led_config_t; typedef union { uint32_t raw; struct PACKED { uint8_t enable :2; uint8_t mode :6; HSV hsv; uint8_t speed; //EECONFIG needs to be increased to support this }; } rgb_config_t; #if defined(_MSC_VER) #pragma pack( pop ) #endif