diff options
Diffstat (limited to 'quantum/visualizer')
| -rw-r--r-- | quantum/visualizer/common_gfxconf.h | 325 | ||||
| -rw-r--r-- | quantum/visualizer/default_animations.c | 176 | ||||
| -rw-r--r-- | quantum/visualizer/default_animations.h (renamed from quantum/visualizer/lcd_backlight_keyframes.h) | 18 | ||||
| -rw-r--r-- | quantum/visualizer/lcd_backlight_keyframes.c | 8 | ||||
| -rw-r--r-- | quantum/visualizer/lcd_keyframes.c | 4 | ||||
| -rw-r--r-- | quantum/visualizer/led_backlight_keyframes.c (renamed from quantum/visualizer/led_keyframes.c) | 24 | ||||
| -rw-r--r-- | quantum/visualizer/led_backlight_keyframes.h (renamed from quantum/visualizer/led_keyframes.h) | 22 | ||||
| -rw-r--r-- | quantum/visualizer/visualizer.c | 7 | ||||
| -rw-r--r-- | quantum/visualizer/visualizer.mk | 42 | 
9 files changed, 586 insertions, 40 deletions
| diff --git a/quantum/visualizer/common_gfxconf.h b/quantum/visualizer/common_gfxconf.h new file mode 100644 index 0000000000..eb705b1881 --- /dev/null +++ b/quantum/visualizer/common_gfxconf.h @@ -0,0 +1,325 @@ +/** + * This file has a different license to the rest of the uGFX system. + * You can copy, modify and distribute this file as you see fit. + * You do not need to publish your source modifications to this file. + * The only thing you are not permitted to do is to relicense it + * under a different license. + */ + +/** + * Copy this file into your project directory and rename it as gfxconf.h + * Edit your copy to turn on the uGFX features you want to use. + * The values below are the defaults. + * + * Only remove the comments from lines where you want to change the + * default value. This allows definitions to be included from + * driver makefiles when required and provides the best future + * compatibility for your project. + * + * Please use spaces instead of tabs in this file. + */ + +#ifndef COMMON_GFXCONF_H +#define COMMON_GFXCONF_H + + +/////////////////////////////////////////////////////////////////////////// +// GOS - One of these must be defined, preferably in your Makefile       // +/////////////////////////////////////////////////////////////////////////// +//#define GFX_USE_OS_CHIBIOS                           TRUE +//#define GFX_USE_OS_FREERTOS                          FALSE +//    #define GFX_FREERTOS_USE_TRACE                   FALSE +//#define GFX_USE_OS_WIN32                             FALSE +//#define GFX_USE_OS_LINUX                             FALSE +//#define GFX_USE_OS_OSX                               FALSE +//#define GFX_USE_OS_ECOS                              FALSE +//#define GFX_USE_OS_RAWRTOS                           FALSE +//#define GFX_USE_OS_ARDUINO                           FALSE +//#define GFX_USE_OS_KEIL                              FALSE +//#define GFX_USE_OS_CMSIS                             FALSE +//#define GFX_USE_OS_RAW32                             FALSE +//    #define INTERRUPTS_OFF()                         optional_code +//    #define INTERRUPTS_ON()                          optional_code +// These are not defined by default for some reason +#define GOS_NEED_X_THREADS	FALSE +#define GOS_NEED_X_HEAP		FALSE + +// Options that (should where relevant) apply to all operating systems +    #define GFX_NO_INLINE                            FALSE +//    #define GFX_COMPILER                             GFX_COMPILER_UNKNOWN +//    #define GFX_CPU                                  GFX_CPU_UNKNOWN +//    #define GFX_OS_HEAP_SIZE                         0 +//    #define GFX_OS_NO_INIT                           FALSE +//    #define GFX_OS_INIT_NO_WARNING                   FALSE +//    #define GFX_OS_PRE_INIT_FUNCTION                 myHardwareInitRoutine +//    #define GFX_OS_EXTRA_INIT_FUNCTION               myOSInitRoutine +//    #define GFX_OS_EXTRA_DEINIT_FUNCTION             myOSDeInitRoutine + + +/////////////////////////////////////////////////////////////////////////// +// GDISP                                                                 // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GDISP                                TRUE + +//#define GDISP_NEED_AUTOFLUSH                         FALSE +//#define GDISP_NEED_TIMERFLUSH                        FALSE +//#define GDISP_NEED_VALIDATION                        TRUE +//#define GDISP_NEED_CLIP                              TRUE +#define GDISP_NEED_CIRCLE                            TRUE +#define GDISP_NEED_ELLIPSE                           TRUE +#define GDISP_NEED_ARC                               TRUE +#define GDISP_NEED_ARCSECTORS                        TRUE +#define GDISP_NEED_CONVEX_POLYGON                    TRUE +//#define GDISP_NEED_SCROLL                            FALSE +#define GDISP_NEED_PIXELREAD                         TRUE +#define GDISP_NEED_CONTROL                           TRUE +//#define GDISP_NEED_QUERY                             FALSE +//#define GDISP_NEED_MULTITHREAD                       FALSE +//#define GDISP_NEED_STREAMING                         FALSE +#define GDISP_NEED_TEXT                              TRUE +//    #define GDISP_NEED_TEXT_WORDWRAP                 FALSE +//    #define GDISP_NEED_ANTIALIAS                     FALSE +//    #define GDISP_NEED_UTF8                          FALSE +    #define GDISP_NEED_TEXT_KERNING                  TRUE +//    #define GDISP_INCLUDE_FONT_UI1                   FALSE +//    #define GDISP_INCLUDE_FONT_UI2                   FALSE		// The smallest preferred font. +//    #define GDISP_INCLUDE_FONT_LARGENUMBERS          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS10          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24          FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32          FALSE +    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12      TRUE +//    #define GDISP_INCLUDE_FONT_FIXED_10X20           FALSE +//    #define GDISP_INCLUDE_FONT_FIXED_7X14            FALSE +    #define GDISP_INCLUDE_FONT_FIXED_5X8             TRUE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA       FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA       FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA       FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS24_AA       FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANS32_AA       FALSE +//    #define GDISP_INCLUDE_FONT_DEJAVUSANSBOLD12_AA   FALSE +//    #define GDISP_INCLUDE_USER_FONTS                 FALSE + +//#define GDISP_NEED_IMAGE                             FALSE +//    #define GDISP_NEED_IMAGE_NATIVE                  FALSE +//    #define GDISP_NEED_IMAGE_GIF                     FALSE +//    #define GDISP_NEED_IMAGE_BMP                     FALSE +//        #define GDISP_NEED_IMAGE_BMP_1               FALSE +//        #define GDISP_NEED_IMAGE_BMP_4               FALSE +//        #define GDISP_NEED_IMAGE_BMP_4_RLE           FALSE +//        #define GDISP_NEED_IMAGE_BMP_8               FALSE +//        #define GDISP_NEED_IMAGE_BMP_8_RLE           FALSE +//        #define GDISP_NEED_IMAGE_BMP_16              FALSE +//        #define GDISP_NEED_IMAGE_BMP_24              FALSE +//        #define GDISP_NEED_IMAGE_BMP_32              FALSE +//    #define GDISP_NEED_IMAGE_JPG                     FALSE +//    #define GDISP_NEED_IMAGE_PNG                     FALSE +//    #define GDISP_NEED_IMAGE_ACCOUNTING              FALSE +#ifdef EMULATOR +#define GDISP_NEED_PIXMAP                            TRUE +#endif +//    #define GDISP_NEED_PIXMAP_IMAGE                  FALSE + +//#define GDISP_DEFAULT_ORIENTATION                    GDISP_ROTATE_LANDSCAPE    // If not defined the native hardware orientation is used. +//#define GDISP_LINEBUF_SIZE                           128 +//#define GDISP_STARTUP_COLOR                          Black +#define GDISP_NEED_STARTUP_LOGO                      FALSE + +//#define GDISP_TOTAL_DISPLAYS		                 2 + +    #ifdef GDISP_DRIVER_LIST +        // For code and speed optimization define as TRUE or FALSE if all controllers have the same capability +        #define GDISP_HARDWARE_STREAM_WRITE          FALSE +        #define GDISP_HARDWARE_STREAM_READ           FALSE +        #define GDISP_HARDWARE_STREAM_POS            FALSE +        #define GDISP_HARDWARE_DRAWPIXEL             TRUE +        #define GDISP_HARDWARE_CLEARS                FALSE +        #define GDISP_HARDWARE_FILLS                 FALSE +        //#define GDISP_HARDWARE_BITFILLS              FALSE +        #define GDISP_HARDWARE_SCROLL                FALSE +        #define GDISP_HARDWARE_PIXELREAD             TRUE +        #define GDISP_HARDWARE_CONTROL               TRUE +        #define GDISP_HARDWARE_QUERY                 FALSE +        #define GDISP_HARDWARE_CLIP                  FALSE + +        #define GDISP_PIXELFORMAT                    GDISP_PIXELFORMAT_RGB888 +    #endif + +// The custom format is not defined for some reason, so define it as error +// so we don't get compiler warnings +#define GDISP_PIXELFORMAT_CUSTOM GDISP_PIXELFORMAT_ERROR + +#define GDISP_USE_GFXNET                             FALSE +//    #define GDISP_GFXNET_PORT                        13001 +//    #define GDISP_GFXNET_CUSTOM_LWIP_STARTUP         FALSE +//    #define GDISP_DONT_WAIT_FOR_NET_DISPLAY          FALSE +//    #define GDISP_GFXNET_UNSAFE_SOCKETS              FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GWIN                                                                  // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GWIN                                 FALSE + +//#define GWIN_NEED_WINDOWMANAGER                      FALSE +//    #define GWIN_REDRAW_IMMEDIATE                    FALSE +//    #define GWIN_REDRAW_SINGLEOP                     FALSE +//    #define GWIN_NEED_FLASHING                       FALSE +//        #define GWIN_FLASHING_PERIOD                 250 + +//#define GWIN_NEED_CONSOLE                            FALSE +//    #define GWIN_CONSOLE_USE_HISTORY                 FALSE +//        #define GWIN_CONSOLE_HISTORY_AVERAGING       FALSE +//        #define GWIN_CONSOLE_HISTORY_ATCREATE        FALSE +//    #define GWIN_CONSOLE_ESCSEQ                      FALSE +//    #define GWIN_CONSOLE_USE_BASESTREAM              FALSE +//    #define GWIN_CONSOLE_USE_FLOAT                   FALSE +//#define GWIN_NEED_GRAPH                              FALSE +//#define GWIN_NEED_GL3D                               FALSE + +//#define GWIN_NEED_WIDGET                             FALSE +//#define GWIN_FOCUS_HIGHLIGHT_WIDTH                   1 +//    #define GWIN_NEED_LABEL                          FALSE +//        #define GWIN_LABEL_ATTRIBUTE                 FALSE +//    #define GWIN_NEED_BUTTON                         FALSE +//        #define GWIN_BUTTON_LAZY_RELEASE             FALSE +//    #define GWIN_NEED_SLIDER                         FALSE +//        #define GWIN_SLIDER_NOSNAP                   FALSE +//        #define GWIN_SLIDER_DEAD_BAND                5 +//        #define GWIN_SLIDER_TOGGLE_INC               20 +//    #define GWIN_NEED_CHECKBOX                       FALSE +//    #define GWIN_NEED_IMAGE                          FALSE +//        #define GWIN_NEED_IMAGE_ANIMATION            FALSE +//    #define GWIN_NEED_RADIO                          FALSE +//    #define GWIN_NEED_LIST                           FALSE +//        #define GWIN_NEED_LIST_IMAGES                FALSE +//    #define GWIN_NEED_PROGRESSBAR                    FALSE +//        #define GWIN_PROGRESSBAR_AUTO                FALSE +//    #define GWIN_NEED_KEYBOARD                       FALSE +//        #define GWIN_KEYBOARD_DEFAULT_LAYOUT         VirtualKeyboard_English1 +//        #define GWIN_NEED_KEYBOARD_ENGLISH1          TRUE +//    #define GWIN_NEED_TEXTEDIT                       FALSE +//    #define GWIN_FLAT_STYLING                        FALSE +//    #define GWIN_WIDGET_TAGS                         FALSE + +//#define GWIN_NEED_CONTAINERS                         FALSE +//    #define GWIN_NEED_CONTAINER                      FALSE +//    #define GWIN_NEED_FRAME                          FALSE +//    #define GWIN_NEED_TABSET                         FALSE +//        #define GWIN_TABSET_TABHEIGHT                18 + + +/////////////////////////////////////////////////////////////////////////// +// GEVENT                                                                // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GEVENT                               TRUE + +//#define GEVENT_ASSERT_NO_RESOURCE                    FALSE +//#define GEVENT_MAXIMUM_SIZE                          32 +//#define GEVENT_MAX_SOURCE_LISTENERS                  32 + + +/////////////////////////////////////////////////////////////////////////// +// GTIMER                                                                // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GTIMER                               FALSE + +//#define GTIMER_THREAD_PRIORITY                       HIGH_PRIORITY +//#define GTIMER_THREAD_WORKAREA_SIZE                  2048 + + +/////////////////////////////////////////////////////////////////////////// +// GQUEUE                                                                // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GQUEUE                               FALSE + +//#define GQUEUE_NEED_ASYNC                            FALSE +//#define GQUEUE_NEED_GSYNC                            FALSE +//#define GQUEUE_NEED_FSYNC                            FALSE +//#define GQUEUE_NEED_BUFFERS                          FALSE + +/////////////////////////////////////////////////////////////////////////// +// GINPUT                                                                // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GINPUT                               FALSE + +//#define GINPUT_NEED_MOUSE                            FALSE +//    #define GINPUT_TOUCH_STARTRAW                    FALSE +//    #define GINPUT_TOUCH_NOTOUCH                     FALSE +//    #define GINPUT_TOUCH_NOCALIBRATE                 FALSE +//    #define GINPUT_TOUCH_NOCALIBRATE_GUI             FALSE +//    #define GINPUT_MOUSE_POLL_PERIOD                 25 +//    #define GINPUT_MOUSE_CLICK_TIME                  300 +//    #define GINPUT_TOUCH_CXTCLICK_TIME               700 +//    #define GINPUT_TOUCH_USER_CALIBRATION_LOAD       FALSE +//    #define GINPUT_TOUCH_USER_CALIBRATION_SAVE       FALSE +//    #define GMOUSE_DRIVER_LIST                       GMOUSEVMT_Win32, GMOUSEVMT_Win32 +//#define GINPUT_NEED_KEYBOARD                         FALSE +//    #define GINPUT_KEYBOARD_POLL_PERIOD              200 +//    #define GKEYBOARD_DRIVER_LIST                    GKEYBOARDVMT_Win32, GKEYBOARDVMT_Win32 +//    #define GKEYBOARD_LAYOUT_OFF                     FALSE +//        #define GKEYBOARD_LAYOUT_SCANCODE2_US        FALSE +//#define GINPUT_NEED_TOGGLE                           FALSE +//#define GINPUT_NEED_DIAL                             FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GFILE                                                                 // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GFILE                                FALSE + +//#define GFILE_NEED_PRINTG                            FALSE +//#define GFILE_NEED_SCANG                             FALSE +//#define GFILE_NEED_STRINGS                           FALSE +//#define GFILE_NEED_FILELISTS                         FALSE +//#define GFILE_NEED_STDIO                             FALSE +//#define GFILE_NEED_NOAUTOMOUNT                       FALSE +//#define GFILE_NEED_NOAUTOSYNC                        FALSE + +//#define GFILE_NEED_MEMFS                             FALSE +//#define GFILE_NEED_ROMFS                             FALSE +//#define GFILE_NEED_RAMFS                             FALSE +//#define GFILE_NEED_FATFS                             FALSE +//#define GFILE_NEED_NATIVEFS                          FALSE +//#define GFILE_NEED_CHBIOSFS                          FALSE + +//#define GFILE_ALLOW_FLOATS                           FALSE +//#define GFILE_ALLOW_DEVICESPECIFIC                   FALSE +//#define GFILE_MAX_GFILES                             3 + +/////////////////////////////////////////////////////////////////////////// +// GADC                                                                  // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GADC                                 FALSE + +//#define GADC_MAX_LOWSPEED_DEVICES                    4 + + +/////////////////////////////////////////////////////////////////////////// +// GAUDIO                                                                // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GAUDIO                               FALSE +// There seems to be a bug in the ugfx code, the wrong define is used +// So define it in order to avoid warnings +#define GFX_USE_GAUDIN                               GFX_USE_GAUDIO +//    #define GAUDIO_NEED_PLAY                         FALSE +//    #define GAUDIO_NEED_RECORD                       FALSE + + +/////////////////////////////////////////////////////////////////////////// +// GMISC                                                                 // +/////////////////////////////////////////////////////////////////////////// +#define GFX_USE_GMISC                                TRUE + +//#define GMISC_NEED_ARRAYOPS                          FALSE +//#define GMISC_NEED_FASTTRIG                          FALSE +//#define GMISC_NEED_FIXEDTRIG                         FALSE +//#define GMISC_NEED_INVSQRT                           FALSE +//    #define GMISC_INVSQRT_MIXED_ENDIAN               FALSE +//    #define GMISC_INVSQRT_REAL_SLOW                  FALSE +#define GMISC_NEED_MATRIXFLOAT2D                     TRUE +#define GMISC_NEED_MATRIXFIXED2D                     FALSE + +#endif /* COMMON_GFXCONF_H */ diff --git a/quantum/visualizer/default_animations.c b/quantum/visualizer/default_animations.c new file mode 100644 index 0000000000..2d03273720 --- /dev/null +++ b/quantum/visualizer/default_animations.c @@ -0,0 +1,176 @@ +/* Copyright 2017 Fred Sundvik + * + * 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 <http://www.gnu.org/licenses/>. + */ + +#if defined(VISUALIZER_ENABLE) + +#include "default_animations.h" +#include "visualizer.h" +#ifdef LCD_ENABLE +#include "lcd_keyframes.h" +#endif +#ifdef LCD_BACKLIGHT_ENABLE +#include "lcd_backlight_keyframes.h" +#endif + +#ifdef BACKLIGHT_ENABLE +#include "led_backlight_keyframes.h" +#endif + +#include "visualizer_keyframes.h" + + +#if defined(LCD_ENABLE) || defined(LCD_BACKLIGHT_ENABLE) || defined(BACKLIGHT_ENABLE) + +static bool keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) { +#ifdef LCD_ENABLE +    lcd_keyframe_enable(animation, state); +#endif +#ifdef LCD_BACKLIGHT_ENABLE +    lcd_backlight_keyframe_enable(animation, state); +#endif +#ifdef BACKLIGHT_ENABLE +    led_backlight_keyframe_enable(animation, state); +#endif +    return false; +} + +static bool keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) { +#ifdef LCD_ENABLE +    lcd_keyframe_disable(animation, state); +#endif +#ifdef LCD_BACKLIGHT_ENABLE +    lcd_backlight_keyframe_disable(animation, state); +#endif +#ifdef BACKLIGHT_ENABLE +    led_backlight_keyframe_disable(animation, state); +#endif +    return false; +} + +static bool keyframe_fade_in(keyframe_animation_t* animation, visualizer_state_t* state) { +    bool ret = false; +#ifdef LCD_BACKLIGHT_ENABLE +    ret |= lcd_backlight_keyframe_animate_color(animation, state); +#endif +#ifdef BACKLIGHT_ENABLE +    ret |= led_backlight_keyframe_fade_in_all(animation, state); +#endif +    return ret; +} + +static bool keyframe_fade_out(keyframe_animation_t* animation, visualizer_state_t* state) { +    bool ret = false; +#ifdef LCD_BACKLIGHT_ENABLE +    ret |= lcd_backlight_keyframe_animate_color(animation, state); +#endif +#ifdef BACKLIGHT_ENABLE +    ret |= led_backlight_keyframe_fade_out_all(animation, state); +#endif +    return ret; +} + + +// Don't worry, if the startup animation is long, you can use the keyboard like normal +// during that time +keyframe_animation_t default_startup_animation = { +#if LCD_ENABLE +    .num_frames = 3, +#else +    .num_frames = 2, +#endif +    .loop = false, +    .frame_lengths = { +        0,  +#if LCD_ENABLE +        0,  +#endif +        gfxMillisecondsToTicks(5000)}, +    .frame_functions = { +            keyframe_enable, +#if LCD_ENABLE +            lcd_keyframe_draw_logo, +#endif +            keyframe_fade_in, +    }, +}; + +keyframe_animation_t default_suspend_animation = { +#if LCD_ENABLE +    .num_frames = 3, +#else +    .num_frames = 2, +#endif +    .loop = false, +    .frame_lengths = { +#if LCD_ENABLE +        0,  +#endif +        gfxMillisecondsToTicks(1000),  +        0}, +    .frame_functions = { +#if LCD_ENABLE +            lcd_keyframe_display_layer_text, +#endif +            keyframe_fade_out, +            keyframe_disable, +    }, +}; +#endif + +#if defined(BACKLIGHT_ENABLE) +#define CROSSFADE_TIME 1000 +#define GRADIENT_TIME 3000 + +keyframe_animation_t led_test_animation = { +    .num_frames = 14, +    .loop = true, +    .frame_lengths = { +        gfxMillisecondsToTicks(1000), // fade in +        gfxMillisecondsToTicks(1000), // no op (leds on) +        gfxMillisecondsToTicks(1000), // fade out +        gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade +        gfxMillisecondsToTicks(GRADIENT_TIME), // left to rigt (outside in) +        gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade +        gfxMillisecondsToTicks(GRADIENT_TIME), // top_to_bottom +        0,           // mirror leds +        gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade +        gfxMillisecondsToTicks(GRADIENT_TIME), // left_to_right (mirrored, so inside out) +        gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade +        gfxMillisecondsToTicks(GRADIENT_TIME), // top_to_bottom +        0,           // normal leds +        gfxMillisecondsToTicks(CROSSFADE_TIME), // crossfade + +    }, +    .frame_functions = { +        led_backlight_keyframe_fade_in_all, +        keyframe_no_operation, +        led_backlight_keyframe_fade_out_all, +        led_backlight_keyframe_crossfade, +        led_backlight_keyframe_left_to_right_gradient, +        led_backlight_keyframe_crossfade, +        led_backlight_keyframe_top_to_bottom_gradient, +        led_backlight_keyframe_mirror_orientation, +        led_backlight_keyframe_crossfade, +        led_backlight_keyframe_left_to_right_gradient, +        led_backlight_keyframe_crossfade, +        led_backlight_keyframe_top_to_bottom_gradient, +        led_backlight_keyframe_normal_orientation, +        led_backlight_keyframe_crossfade, +    }, +}; +#endif + +#endif diff --git a/quantum/visualizer/lcd_backlight_keyframes.h b/quantum/visualizer/default_animations.h index e1c125cf91..51320b8b8a 100644 --- a/quantum/visualizer/lcd_backlight_keyframes.h +++ b/quantum/visualizer/default_animations.h @@ -14,17 +14,17 @@   * along with this program.  If not, see <http://www.gnu.org/licenses/>.   */ -#ifndef QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ -#define QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ +#ifndef DEFAULT_ANIMATIONS_H_ +#define DEFAULT_ANIMATIONS_H_  #include "visualizer.h" -// Animates the LCD backlight color between the current color and the target color (of the state) -bool backlight_keyframe_animate_color(keyframe_animation_t* animation, visualizer_state_t* state); -// Sets the backlight color to the target color -bool backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_state_t* state); +// You can use these default animations, but of course you can also write your own custom ones instead +extern keyframe_animation_t default_startup_animation; +extern keyframe_animation_t default_suspend_animation; -bool backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state); -bool backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state); +// An animation for testing and demonstrating the led support, should probably not be used for real world +// cases +extern keyframe_animation_t led_test_animation; -#endif /* QUANTUM_VISUALIZER_LCD_BACKLIGHT_KEYFRAMES_H_ */ +#endif /* DEFAULT_ANIMATIONS_H_ */ diff --git a/quantum/visualizer/lcd_backlight_keyframes.c b/quantum/visualizer/lcd_backlight_keyframes.c index 8436d4e3dd..8c402baf6c 100644 --- a/quantum/visualizer/lcd_backlight_keyframes.c +++ b/quantum/visualizer/lcd_backlight_keyframes.c @@ -16,7 +16,7 @@  #include "lcd_backlight_keyframes.h" -bool backlight_keyframe_animate_color(keyframe_animation_t* animation, visualizer_state_t* state) { +bool lcd_backlight_keyframe_animate_color(keyframe_animation_t* animation, visualizer_state_t* state) {      int frame_length = animation->frame_lengths[animation->current_frame];      int current_pos = frame_length - animation->time_left_in_frame;      uint8_t t_h = LCD_HUE(state->target_lcd_color); @@ -49,7 +49,7 @@ bool backlight_keyframe_animate_color(keyframe_animation_t* animation, visualize      return true;  } -bool backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_state_t* state) { +bool lcd_backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)animation;      state->prev_lcd_color = state->target_lcd_color;      state->current_lcd_color = state->target_lcd_color; @@ -60,14 +60,14 @@ bool backlight_keyframe_set_color(keyframe_animation_t* animation, visualizer_st      return false;  } -bool backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) { +bool lcd_backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)animation;      (void)state;      lcd_backlight_hal_color(0, 0, 0);      return false;  } -bool backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) { +bool lcd_backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)animation;      (void)state;      lcd_backlight_color(LCD_HUE(state->current_lcd_color), diff --git a/quantum/visualizer/lcd_keyframes.c b/quantum/visualizer/lcd_keyframes.c index 82e4184d2c..75eb457001 100644 --- a/quantum/visualizer/lcd_keyframes.c +++ b/quantum/visualizer/lcd_keyframes.c @@ -166,8 +166,8 @@ bool lcd_keyframe_draw_logo(keyframe_animation_t* animation, visualizer_state_t*      // or state structs, here we use the image      //gdispGBlitArea is a tricky function to use since it supports blitting part of the image -    // if you have full screen image, then just use 128 and 32 for both source and target dimensions -    gdispGBlitArea(GDISP, 0, 0, 128, 32, 0, 0, 128, (pixel_t*)resource_lcd_logo); +    // if you have full screen image, then just use LCD_WIDTH and LCD_HEIGHT for both source and target dimensions +    gdispGBlitArea(GDISP, 0, 0, LCD_WIDTH, LCD_HEIGHT, 0, 0, LCD_WIDTH, (pixel_t*)resource_lcd_logo);      return false;  } diff --git a/quantum/visualizer/led_keyframes.c b/quantum/visualizer/led_backlight_keyframes.c index 7e6e5d1ab9..eb3f5561d8 100644 --- a/quantum/visualizer/led_keyframes.c +++ b/quantum/visualizer/led_backlight_keyframes.c @@ -23,7 +23,7 @@ SOFTWARE.  */  #include "gfx.h"  #include "math.h" -#include "led_keyframes.h" +#include "led_backlight_keyframes.h"  static uint8_t fade_led_color(keyframe_animation_t* animation, int from, int to) {      int frame_length = animation->frame_lengths[animation->current_frame]; @@ -41,8 +41,8 @@ static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint  }  // TODO: Should be customizable per keyboard -#define NUM_ROWS LED_NUM_ROWS -#define NUM_COLS LED_NUM_COLS +#define NUM_ROWS LED_HEIGHT +#define NUM_COLS LED_WIDTH  static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS];  static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS]; @@ -55,19 +55,19 @@ static uint8_t compute_gradient_color(float t, float index, float num) {      return (uint8_t)(255.0f * v);  } -bool led_keyframe_fade_in_all(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_fade_in_all(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      keyframe_fade_all_leds_from_to(animation, 0, 255);      return true;  } -bool led_keyframe_fade_out_all(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_fade_out_all(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      keyframe_fade_all_leds_from_to(animation, 255, 0);      return true;  } -bool led_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      float frame_length = animation->frame_lengths[animation->current_frame];      float current_pos = frame_length - animation->time_left_in_frame; @@ -79,7 +79,7 @@ bool led_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visual      return true;  } -bool led_keyframe_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      float frame_length = animation->frame_lengths[animation->current_frame];      float current_pos = frame_length - animation->time_left_in_frame; @@ -98,7 +98,7 @@ static void copy_current_led_state(uint8_t* dest) {          }      }  } -bool led_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      if (animation->first_update_of_frame) {          copy_current_led_state(&crossfade_start_frame[0][0]); @@ -114,28 +114,28 @@ bool led_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t*      return true;  } -bool led_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      (void)animation;      gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_180);      return false;  } -bool led_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      (void)animation;      gdispGSetOrientation(LED_DISPLAY, GDISP_ROTATE_0);      return false;  } -bool led_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      (void)animation;      gdispGSetPowerMode(LED_DISPLAY, powerOff);      return false;  } -bool led_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) { +bool led_backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state) {      (void)state;      (void)animation;      gdispGSetPowerMode(LED_DISPLAY, powerOn); diff --git a/quantum/visualizer/led_keyframes.h b/quantum/visualizer/led_backlight_keyframes.h index a59a4f37d1..487151013a 100644 --- a/quantum/visualizer/led_keyframes.h +++ b/quantum/visualizer/led_backlight_keyframes.h @@ -22,21 +22,21 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  SOFTWARE.  */ -#ifndef LED_KEYFRAMES_H -#define LED_KEYFRAMES_H +#ifndef LED_BACKLIGHT_KEYFRAMES_H +#define LED_BACKLIGHT_KEYFRAMES_H  #include "visualizer.h" -bool led_keyframe_fade_in_all(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_fade_out_all(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_fade_in_all(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_fade_out_all(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_left_to_right_gradient(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_top_to_bottom_gradient(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_crossfade(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_mirror_orientation(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_normal_orientation(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state); -bool led_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state); +bool led_backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state);  extern keyframe_animation_t led_test_animation; diff --git a/quantum/visualizer/visualizer.c b/quantum/visualizer/visualizer.c index cc99d1e3b6..5b4d8d603e 100644 --- a/quantum/visualizer/visualizer.c +++ b/quantum/visualizer/visualizer.c @@ -52,7 +52,8 @@ SOFTWARE.  // Define this in config.h  #ifndef VISUALIZER_THREAD_PRIORITY -#define "Visualizer thread priority not defined" +// The visualizer needs gfx thread priorities +#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)  #endif  static visualizer_keyboard_status_t current_status = { @@ -255,6 +256,9 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {          .mods = 0xFF,          .leds = 0xFFFFFFFF,          .suspended = false, +    #ifdef BACKLIGHT_ENABLE +        .backlight_level = 0, +    #endif      #ifdef VISUALIZER_USER_DATA_SIZE          .user_data = {0},      #endif @@ -299,6 +303,7 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {                  else {                      gdispGSetPowerMode(LED_DISPLAY, powerOff);                  } +                state.status.backlight_level = current_status.backlight_level;              }      #endif              if (visualizer_enabled) { diff --git a/quantum/visualizer/visualizer.mk b/quantum/visualizer/visualizer.mk index 0f7d8636cf..102d23b7ef 100644 --- a/quantum/visualizer/visualizer.mk +++ b/quantum/visualizer/visualizer.mk @@ -20,6 +20,30 @@  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  # SOFTWARE. +define ADD_DRIVER +    $(1)_DRIVER:=$(strip $($(1)_DRIVER)) +    $(1)_WIDTH:=$(strip $($(1)_WIDTH)) +    $(1)_HEIGHT:=$(strip $($(1)_HEIGHT)) +    ifeq ($($(1)_DRIVER),) +        $$(error $(1)_DRIVER is not defined) +    endif +    ifeq ($($(1)_WIDTH),) +        $$(error $(1)_WIDTH is not defined) +    endif +    ifeq ($($(1)_HEIGHT),) +        $$(error $(1)_HEIGHT is not defined) +    endif +    OPT_DEFS+=-D$(1)_WIDTH=$($(1)_WIDTH) +    OPT_DEFS+=-D$(1)_HEIGHT=$($(1)_HEIGHT) +    GFXDEFS+=-D$(1)_WIDTH=$($(1)_WIDTH) +    GFXDEFS+=-D$(1)_HEIGHT=$($(1)_HEIGHT) +    $(1)_DISPLAY_NUMBER:=$$(words $$(GDISP_DRIVER_LIST)) +    OPT_DEFS+=-D$(1)_DISPLAY_NUMBER=$$($(1)_DISPLAY_NUMBER) +    include $(TOP_DIR)/drivers/ugfx/gdisp/$($(1)_DRIVER)/driver.mk +endef + +GDISP_DRIVER_LIST:= +  SRC += $(VISUALIZER_DIR)/visualizer.c \  	$(VISUALIZER_DIR)/visualizer_keyframes.c  EXTRAINCDIRS += $(GFXINC) $(VISUALIZER_DIR) @@ -40,16 +64,32 @@ SRC += $(VISUALIZER_DIR)/lcd_backlight_keyframes.c  # Note, that the linker will strip out any resources that are not actually in use  SRC += $(VISUALIZER_DIR)/resources/lcd_logo.c  OPT_DEFS += -DLCD_BACKLIGHT_ENABLE +$(eval $(call ADD_DRIVER,LCD))  endif  ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) -SRC += $(VISUALIZER_DIR)/led_keyframes.c +SRC += $(VISUALIZER_DIR)/led_backlight_keyframes.c +$(eval $(call ADD_DRIVER,LED))  endif +SRC += $(VISUALIZER_DIR)/default_animations.c +  include $(GFXLIB)/gfx.mk +# For the common_gfxconf.h +GFXINC += quantum/visualizer +  GFXSRC := $(patsubst $(TOP_DIR)/%,%,$(GFXSRC))  GFXDEFS := $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS))) +GDISP_LIST_COMMA=, +GDISP_LIST_EMPTY= +GDISP_LIST_SPACE=$(GDISP_LIST_EMPTY) $(GDISP_LIST_EMPTY) + +GDISP_DRIVER_LIST := $(strip $(GDISP_DRIVER_LIST)) +GDISP_DRIVER_LIST := $(subst $(GDISP_LIST_SPACE),$(GDISP_LIST_COMMA),$(GDISP_DRIVER_LIST)) + +GFXDEFS +=-DGDISP_DRIVER_LIST="$(GDISP_DRIVER_LIST)" +  ifneq ("$(wildcard $(KEYMAP_PATH)/visualizer.c)","")      SRC += keyboards/$(KEYBOARD)/keymaps/$(KEYMAP)/visualizer.c  else  | 
