/* Copyright 2021 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "util.h" #if defined(LED_MATRIX_KEYPRESSES) || defined(LED_MATRIX_KEYRELEASES) # define LED_MATRIX_KEYREACTIVE_ENABLED #endif // Last led hit #ifndef LED_HITS_TO_REMEMBER # define LED_HITS_TO_REMEMBER 8 #endif // LED_HITS_TO_REMEMBER #ifdef LED_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 // LED_MATRIX_KEYREACTIVE_ENABLED typedef enum led_task_states { STARTING, RENDERING, FLUSHING, SYNCING } led_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 { uint8_t x; uint8_t y; } led_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_KEYLIGHT 0x04 #define LED_FLAG_INDICATOR 0x08 #define NO_LED 255 typedef struct PACKED { uint8_t matrix_co[MATRIX_ROWS][MATRIX_COLS]; led_point_t point[LED_MATRIX_LED_COUNT]; uint8_t flags[LED_MATRIX_LED_COUNT]; } led_config_t; typedef union { uint32_t raw; struct PACKED { uint8_t enable : 2; uint8_t mode : 6; uint8_t val; uint8_t speed; led_flags_t flags; }; } led_eeconfig_t; _Static_assert(sizeof(led_eeconfig_t) == sizeof(uint32_t), "LED Matrix EECONFIG out of spec.");