clang-format changes

This commit is contained in:
skullY
2019-08-30 11:19:03 -07:00
committed by skullydazed
parent 61af76a10d
commit b624f32f94
502 changed files with 32259 additions and 39062 deletions

View File

@ -22,7 +22,6 @@
#ifndef COMMON_GFXCONF_H
#define COMMON_GFXCONF_H
///////////////////////////////////////////////////////////////////////////
// GOS - One of these must be defined, preferably in your Makefile //
///////////////////////////////////////////////////////////////////////////
@ -41,11 +40,11 @@
// #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
#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_NO_INLINE FALSE
// #define GFX_COMPILER GFX_COMPILER_UNKNOWN
// #define GFX_CPU GFX_CPU_UNKNOWN
// #define GFX_OS_HEAP_SIZE 0
@ -55,32 +54,31 @@
// #define GFX_OS_EXTRA_INIT_FUNCTION myOSInitRoutine
// #define GFX_OS_EXTRA_DEINIT_FUNCTION myOSDeInitRoutine
///////////////////////////////////////////////////////////////////////////
// GDISP //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GDISP TRUE
#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_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_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 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_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
@ -90,10 +88,10 @@
// #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_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_FIXED_5X8 TRUE
// #define GDISP_INCLUDE_FONT_DEJAVUSANS12_AA FALSE
// #define GDISP_INCLUDE_FONT_DEJAVUSANS16_AA FALSE
// #define GDISP_INCLUDE_FONT_DEJAVUSANS20_AA FALSE
@ -118,50 +116,49 @@
// #define GDISP_NEED_IMAGE_PNG FALSE
// #define GDISP_NEED_IMAGE_ACCOUNTING FALSE
#ifdef EMULATOR
#define GDISP_NEED_PIXMAP TRUE
# 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_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
#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
# 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_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 GFX_USE_GWIN FALSE
//#define GWIN_NEED_WINDOWMANAGER FALSE
// #define GWIN_REDRAW_IMMEDIATE FALSE
@ -210,30 +207,27 @@
// #define GWIN_NEED_TABSET FALSE
// #define GWIN_TABSET_TABHEIGHT 18
///////////////////////////////////////////////////////////////////////////
// GEVENT //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GEVENT TRUE
#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 GFX_USE_GTIMER FALSE
//#define GTIMER_THREAD_PRIORITY HIGH_PRIORITY
//#define GTIMER_THREAD_WORKAREA_SIZE 2048
///////////////////////////////////////////////////////////////////////////
// GQUEUE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GQUEUE FALSE
#define GFX_USE_GQUEUE FALSE
//#define GQUEUE_NEED_ASYNC FALSE
//#define GQUEUE_NEED_GSYNC FALSE
@ -243,7 +237,7 @@
///////////////////////////////////////////////////////////////////////////
// GINPUT //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GINPUT FALSE
#define GFX_USE_GINPUT FALSE
//#define GINPUT_NEED_MOUSE FALSE
// #define GINPUT_TOUCH_STARTRAW FALSE
@ -264,11 +258,10 @@
//#define GINPUT_NEED_TOGGLE FALSE
//#define GINPUT_NEED_DIAL FALSE
///////////////////////////////////////////////////////////////////////////
// GFILE //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GFILE FALSE
#define GFX_USE_GFILE FALSE
//#define GFILE_NEED_PRINTG FALSE
//#define GFILE_NEED_SCANG FALSE
@ -292,26 +285,24 @@
///////////////////////////////////////////////////////////////////////////
// GADC //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GADC FALSE
#define GFX_USE_GADC FALSE
//#define GADC_MAX_LOWSPEED_DEVICES 4
///////////////////////////////////////////////////////////////////////////
// GAUDIO //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GAUDIO FALSE
#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 GFX_USE_GAUDIN GFX_USE_GAUDIO
// #define GAUDIO_NEED_PLAY FALSE
// #define GAUDIO_NEED_RECORD FALSE
///////////////////////////////////////////////////////////////////////////
// GMISC //
///////////////////////////////////////////////////////////////////////////
#define GFX_USE_GMISC TRUE
#define GFX_USE_GMISC TRUE
//#define GMISC_NEED_ARRAYOPS FALSE
//#define GMISC_NEED_FASTTRIG FALSE
@ -319,7 +310,7 @@
//#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
#define GMISC_NEED_MATRIXFLOAT2D TRUE
#define GMISC_NEED_MATRIXFIXED2D FALSE
#endif /* COMMON_GFXCONF_H */

View File

@ -16,161 +16,162 @@
#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
# 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
# ifdef BACKLIGHT_ENABLE
# include "led_backlight_keyframes.h"
# endif
#include "visualizer_keyframes.h"
# include "visualizer_keyframes.h"
#if defined(LCD_ENABLE) || defined(LCD_BACKLIGHT_ENABLE) || defined(BACKLIGHT_ENABLE)
# 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
# ifdef LCD_ENABLE
lcd_keyframe_enable(animation, state);
#endif
#ifdef LCD_BACKLIGHT_ENABLE
# endif
# ifdef LCD_BACKLIGHT_ENABLE
lcd_backlight_keyframe_enable(animation, state);
#endif
#ifdef BACKLIGHT_ENABLE
# endif
# ifdef BACKLIGHT_ENABLE
led_backlight_keyframe_enable(animation, state);
#endif
# endif
return false;
}
static bool keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {
#ifdef LCD_ENABLE
# ifdef LCD_ENABLE
lcd_keyframe_disable(animation, state);
#endif
#ifdef LCD_BACKLIGHT_ENABLE
# endif
# ifdef LCD_BACKLIGHT_ENABLE
lcd_backlight_keyframe_disable(animation, state);
#endif
#ifdef BACKLIGHT_ENABLE
# endif
# ifdef BACKLIGHT_ENABLE
led_backlight_keyframe_disable(animation, state);
#endif
# endif
return false;
}
static bool keyframe_fade_in(keyframe_animation_t* animation, visualizer_state_t* state) {
bool ret = false;
#ifdef LCD_BACKLIGHT_ENABLE
# ifdef LCD_BACKLIGHT_ENABLE
ret |= lcd_backlight_keyframe_animate_color(animation, state);
#endif
#ifdef BACKLIGHT_ENABLE
# endif
# ifdef BACKLIGHT_ENABLE
ret |= led_backlight_keyframe_fade_in_all(animation, state);
#endif
# endif
return ret;
}
static bool keyframe_fade_out(keyframe_animation_t* animation, visualizer_state_t* state) {
bool ret = false;
#ifdef LCD_BACKLIGHT_ENABLE
# ifdef LCD_BACKLIGHT_ENABLE
ret |= lcd_backlight_keyframe_animate_color(animation, state);
#endif
#ifdef BACKLIGHT_ENABLE
# endif
# ifdef BACKLIGHT_ENABLE
ret |= led_backlight_keyframe_fade_out_all(animation, state);
#endif
# 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
# if LCD_ENABLE
.num_frames = 3,
#else
# else
.num_frames = 2,
#endif
.loop = false,
.frame_lengths = {
0,
#if LCD_ENABLE
0,
#endif
gfxMillisecondsToTicks(5000)},
.frame_functions = {
# endif
.loop = false,
.frame_lengths = {0,
# if LCD_ENABLE
0,
# endif
gfxMillisecondsToTicks(5000)},
.frame_functions =
{
keyframe_enable,
#if LCD_ENABLE
# if LCD_ENABLE
lcd_keyframe_draw_logo,
#endif
# endif
keyframe_fade_in,
},
},
};
keyframe_animation_t default_suspend_animation = {
#if LCD_ENABLE
# if LCD_ENABLE
.num_frames = 3,
#else
# else
.num_frames = 2,
#endif
# endif
.loop = false,
.frame_lengths = {
#if LCD_ENABLE
0,
#endif
gfxMillisecondsToTicks(1000),
0},
.frame_functions = {
#if LCD_ENABLE
.frame_lengths =
{
# if LCD_ENABLE
0,
# endif
gfxMillisecondsToTicks(1000), 0},
.frame_functions =
{
# if LCD_ENABLE
lcd_keyframe_display_layer_text,
#endif
# endif
keyframe_fade_out,
keyframe_disable,
},
},
};
#endif
# endif
#if defined(BACKLIGHT_ENABLE)
#define CROSSFADE_TIME 1000
#define GRADIENT_TIME 3000
# 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
.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,
},
},
.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
#endif

View File

@ -25,9 +25,9 @@ SOFTWARE.
#include "lcd_backlight.h"
#include <math.h>
static uint8_t current_hue = 0;
static uint8_t current_hue = 0;
static uint8_t current_saturation = 0;
static uint8_t current_intensity = 0;
static uint8_t current_intensity = 0;
static uint8_t current_brightness = 0;
void lcd_backlight_init(void) {
@ -40,26 +40,26 @@ void lcd_backlight_init(void) {
// http://blog.saikoled.com/post/43693602826/why-every-led-light-should-be-using-hsi
static void hsi_to_rgb(float h, float s, float i, uint16_t* r_out, uint16_t* g_out, uint16_t* b_out) {
unsigned int r, g, b;
h = fmodf(h, 360.0f); // cycle h around to 0-360 degrees
h = 3.14159f * h / 180.0f; // Convert to radians.
s = s > 0.0f ? (s < 1.0f ? s : 1.0f) : 0.0f; // clamp s and i to interval [0,1]
h = fmodf(h, 360.0f); // cycle h around to 0-360 degrees
h = 3.14159f * h / 180.0f; // Convert to radians.
s = s > 0.0f ? (s < 1.0f ? s : 1.0f) : 0.0f; // clamp s and i to interval [0,1]
i = i > 0.0f ? (i < 1.0f ? i : 1.0f) : 0.0f;
// Math! Thanks in part to Kyle Miller.
if(h < 2.09439f) {
r = 65535.0f * i/3.0f *(1.0f + s * cos(h) / cosf(1.047196667f - h));
g = 65535.0f * i/3.0f *(1.0f + s *(1.0f - cosf(h) / cos(1.047196667f - h)));
b = 65535.0f * i/3.0f *(1.0f - s);
} else if(h < 4.188787) {
if (h < 2.09439f) {
r = 65535.0f * i / 3.0f * (1.0f + s * cos(h) / cosf(1.047196667f - h));
g = 65535.0f * i / 3.0f * (1.0f + s * (1.0f - cosf(h) / cos(1.047196667f - h)));
b = 65535.0f * i / 3.0f * (1.0f - s);
} else if (h < 4.188787) {
h = h - 2.09439;
g = 65535.0f * i/3.0f *(1.0f + s * cosf(h) / cosf(1.047196667f - h));
b = 65535.0f * i/3.0f *(1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h)));
r = 65535.0f * i/3.0f *(1.0f - s);
g = 65535.0f * i / 3.0f * (1.0f + s * cosf(h) / cosf(1.047196667f - h));
b = 65535.0f * i / 3.0f * (1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h)));
r = 65535.0f * i / 3.0f * (1.0f - s);
} else {
h = h - 4.188787;
b = 65535.0f*i/3.0f * (1.0f + s * cosf(h) / cosf(1.047196667f - h));
r = 65535.0f*i/3.0f * (1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h)));
g = 65535.0f*i/3.0f * (1.0f - s);
b = 65535.0f * i / 3.0f * (1.0f + s * cosf(h) / cosf(1.047196667f - h));
r = 65535.0f * i / 3.0f * (1.0f + s * (1.0f - cosf(h) / cosf(1.047196667f - h)));
g = 65535.0f * i / 3.0f * (1.0f - s);
}
*r_out = r > 65535 ? 65535 : r;
*g_out = g > 65535 ? 65535 : g;
@ -68,15 +68,15 @@ static void hsi_to_rgb(float h, float s, float i, uint16_t* r_out, uint16_t* g_o
void lcd_backlight_color(uint8_t hue, uint8_t saturation, uint8_t intensity) {
uint16_t r, g, b;
float hue_f = 360.0f * (float)hue / 255.0f;
float saturation_f = (float)saturation / 255.0f;
float intensity_f = (float)intensity / 255.0f;
float hue_f = 360.0f * (float)hue / 255.0f;
float saturation_f = (float)saturation / 255.0f;
float intensity_f = (float)intensity / 255.0f;
intensity_f *= (float)current_brightness / 255.0f;
hsi_to_rgb(hue_f, saturation_f, intensity_f, &r, &g, &b);
current_hue = hue;
current_saturation = saturation;
current_intensity = intensity;
lcd_backlight_hal_color(r, g, b);
current_hue = hue;
current_saturation = saturation;
current_intensity = intensity;
lcd_backlight_hal_color(r, g, b);
}
void lcd_backlight_brightness(uint8_t b) {
@ -84,6 +84,4 @@ void lcd_backlight_brightness(uint8_t b) {
lcd_backlight_color(current_hue, current_saturation, current_intensity);
}
uint8_t lcd_get_backlight_brightness(void) {
return current_brightness;
}
uint8_t lcd_get_backlight_brightness(void) { return current_brightness; }

View File

@ -32,13 +32,11 @@ SOFTWARE.
#define LCD_SAT(color) ((color >> 8) & 0xFF)
#define LCD_INT(color) (color & 0xFF)
static inline uint32_t change_lcd_color_intensity(uint32_t color, uint8_t new_intensity) {
return (color & 0xFFFFFF00) | new_intensity;
}
static inline uint32_t change_lcd_color_intensity(uint32_t color, uint8_t new_intensity) { return (color & 0xFFFFFF00) | new_intensity; }
void lcd_backlight_init(void);
void lcd_backlight_color(uint8_t hue, uint8_t saturation, uint8_t intensity);
void lcd_backlight_brightness(uint8_t b);
void lcd_backlight_init(void);
void lcd_backlight_color(uint8_t hue, uint8_t saturation, uint8_t intensity);
void lcd_backlight_brightness(uint8_t b);
uint8_t lcd_get_backlight_brightness(void);
void lcd_backlight_hal_init(void);

View File

@ -17,46 +17,40 @@
#include "lcd_backlight_keyframes.h"
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);
uint8_t t_s = LCD_SAT(state->target_lcd_color);
uint8_t t_i = LCD_INT(state->target_lcd_color);
uint8_t p_h = LCD_HUE(state->prev_lcd_color);
uint8_t p_s = LCD_SAT(state->prev_lcd_color);
uint8_t p_i = LCD_INT(state->prev_lcd_color);
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);
uint8_t t_s = LCD_SAT(state->target_lcd_color);
uint8_t t_i = LCD_INT(state->target_lcd_color);
uint8_t p_h = LCD_HUE(state->prev_lcd_color);
uint8_t p_s = LCD_SAT(state->prev_lcd_color);
uint8_t p_i = LCD_INT(state->prev_lcd_color);
uint8_t d_h1 = t_h - p_h; //Modulo arithmetic since we want to wrap around
int d_h2 = t_h - p_h;
uint8_t d_h1 = t_h - p_h; // Modulo arithmetic since we want to wrap around
int d_h2 = t_h - p_h;
// Chose the shortest way around
int d_h = abs(d_h2) < d_h1 ? d_h2 : d_h1;
int d_s = t_s - p_s;
int d_i = t_i - p_i;
int hue = (d_h * current_pos) / frame_length;
int sat = (d_s * current_pos) / frame_length;
int hue = (d_h * current_pos) / frame_length;
int sat = (d_s * current_pos) / frame_length;
int intensity = (d_i * current_pos) / frame_length;
//dprintf("%X -> %X = %X\n", p_h, t_h, hue);
// dprintf("%X -> %X = %X\n", p_h, t_h, hue);
hue += p_h;
sat += p_s;
intensity += p_i;
state->current_lcd_color = LCD_COLOR(hue, sat, intensity);
lcd_backlight_color(
LCD_HUE(state->current_lcd_color),
LCD_SAT(state->current_lcd_color),
LCD_INT(state->current_lcd_color));
lcd_backlight_color(LCD_HUE(state->current_lcd_color), LCD_SAT(state->current_lcd_color), LCD_INT(state->current_lcd_color));
return true;
}
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->prev_lcd_color = state->target_lcd_color;
state->current_lcd_color = state->target_lcd_color;
lcd_backlight_color(
LCD_HUE(state->current_lcd_color),
LCD_SAT(state->current_lcd_color),
LCD_INT(state->current_lcd_color));
lcd_backlight_color(LCD_HUE(state->current_lcd_color), LCD_SAT(state->current_lcd_color), LCD_INT(state->current_lcd_color));
return false;
}
@ -70,8 +64,6 @@ bool lcd_backlight_keyframe_disable(keyframe_animation_t* animation, visualizer_
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),
LCD_SAT(state->current_lcd_color),
LCD_INT(state->current_lcd_color));
lcd_backlight_color(LCD_HUE(state->current_lcd_color), LCD_SAT(state->current_lcd_color), LCD_INT(state->current_lcd_color));
return false;
}

View File

@ -28,8 +28,7 @@ bool lcd_keyframe_display_layer_text(keyframe_animation_t* animation, visualizer
}
static void format_layer_bitmap_string(uint16_t default_layer, uint16_t layer, char* buffer) {
for (int i=0; i<16;i++)
{
for (int i = 0; i < 16; i++) {
uint32_t mask = (1u << i);
if (default_layer & mask) {
if (layer & mask) {
@ -44,7 +43,7 @@ static void format_layer_bitmap_string(uint16_t default_layer, uint16_t layer, c
}
++buffer;
if (i==3 || i==7 || i==11) {
if (i == 3 || i == 7 || i == 11) {
*buffer = ' ';
++buffer;
}
@ -55,7 +54,7 @@ static void format_layer_bitmap_string(uint16_t default_layer, uint16_t layer, c
bool lcd_keyframe_display_layer_bitmap(keyframe_animation_t* animation, visualizer_state_t* state) {
(void)animation;
const char* layer_help = "1=On D=Default B=Both";
char layer_buffer[16 + 4]; // 3 spaces and one null terminator
char layer_buffer[16 + 4]; // 3 spaces and one null terminator
gdispClear(White);
gdispDrawString(0, 0, layer_help, state->font_fixed5x8, Black);
format_layer_bitmap_string(state->status.default_layer, state->status.layer, layer_buffer);
@ -69,8 +68,7 @@ static void format_mods_bitmap_string(uint8_t mods, char* buffer) {
*buffer = ' ';
++buffer;
for (int i = 0; i<8; i++)
{
for (int i = 0; i < 8; i++) {
uint32_t mask = (1u << i);
if (mods & mask) {
*buffer = '1';
@ -79,7 +77,7 @@ static void format_mods_bitmap_string(uint8_t mods, char* buffer) {
}
++buffer;
if (i==3) {
if (i == 3) {
*buffer = ' ';
++buffer;
}
@ -90,9 +88,9 @@ static void format_mods_bitmap_string(uint8_t mods, char* buffer) {
bool lcd_keyframe_display_mods_bitmap(keyframe_animation_t* animation, visualizer_state_t* state) {
(void)animation;
const char* title = "Modifier states";
const char* title = "Modifier states";
const char* mods_header = " CSAG CSAG ";
char status_buffer[12];
char status_buffer[12];
gdispClear(White);
gdispDrawString(0, 0, title, state->font_fixed5x8, Black);
@ -109,30 +107,29 @@ static void get_led_state_string(char* output, visualizer_state_t* state) {
uint8_t pos = 0;
if (state->status.leds & (1u << USB_LED_NUM_LOCK)) {
memcpy(output + pos, "NUM ", 4);
pos += 4;
memcpy(output + pos, "NUM ", 4);
pos += 4;
}
if (state->status.leds & (1u << USB_LED_CAPS_LOCK)) {
memcpy(output + pos, "CAPS ", 5);
pos += 5;
memcpy(output + pos, "CAPS ", 5);
pos += 5;
}
if (state->status.leds & (1u << USB_LED_SCROLL_LOCK)) {
memcpy(output + pos, "SCRL ", 5);
pos += 5;
memcpy(output + pos, "SCRL ", 5);
pos += 5;
}
if (state->status.leds & (1u << USB_LED_COMPOSE)) {
memcpy(output + pos, "COMP ", 5);
pos += 5;
memcpy(output + pos, "COMP ", 5);
pos += 5;
}
if (state->status.leds & (1u << USB_LED_KANA)) {
memcpy(output + pos, "KANA", 4);
pos += 4;
memcpy(output + pos, "KANA", 4);
pos += 4;
}
output[pos] = 0;
}
bool lcd_keyframe_display_led_states(keyframe_animation_t* animation, visualizer_state_t* state)
{
bool lcd_keyframe_display_led_states(keyframe_animation_t* animation, visualizer_state_t* state) {
(void)animation;
char output[LED_STATE_STRING_SIZE];
get_led_state_string(output, state);
@ -165,14 +162,13 @@ bool lcd_keyframe_draw_logo(keyframe_animation_t* animation, visualizer_state_t*
// You can use static variables for things that can't be found in the animation
// or state structs, here we use the image
//gdispGBlitArea is a tricky function to use since it supports blitting part of 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 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;
}
bool lcd_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state) {
(void)animation;
(void)state;

View File

@ -35,5 +35,4 @@ bool lcd_keyframe_draw_logo(keyframe_animation_t* animation, visualizer_state_t*
bool lcd_keyframe_disable(keyframe_animation_t* animation, visualizer_state_t* state);
bool lcd_keyframe_enable(keyframe_animation_t* animation, visualizer_state_t* state);
#endif /* QUANTUM_VISUALIZER_LCD_KEYFRAMES_H_ */

View File

@ -27,15 +27,15 @@ SOFTWARE.
static uint8_t fade_led_color(keyframe_animation_t* animation, int from, int to) {
int frame_length = animation->frame_lengths[animation->current_frame];
int current_pos = frame_length - animation->time_left_in_frame;
int delta = to - from;
int luma = (delta * current_pos) / frame_length;
int current_pos = frame_length - animation->time_left_in_frame;
int delta = to - from;
int luma = (delta * current_pos) / frame_length;
luma += from;
return luma;
}
static void keyframe_fade_all_leds_from_to(keyframe_animation_t* animation, uint8_t from, uint8_t to) {
uint8_t luma = fade_led_color(animation, from, to);
uint8_t luma = fade_led_color(animation, from, to);
color_t color = LUMA2COLOR(luma);
gdispGClear(LED_DISPLAY, color);
}
@ -48,10 +48,10 @@ static uint8_t crossfade_start_frame[NUM_ROWS][NUM_COLS];
static uint8_t crossfade_end_frame[NUM_ROWS][NUM_COLS];
static uint8_t compute_gradient_color(float t, float index, float num) {
const float two_pi = M_PI * 2.0f;
float normalized_index = (1.0f - index / (num - 1.0f)) * two_pi;
float x = t * two_pi + normalized_index;
float v = 0.5 * (cosf(x) + 1.0f);
const float two_pi = M_PI * 2.0f;
float normalized_index = (1.0f - index / (num - 1.0f)) * two_pi;
float x = t * two_pi + normalized_index;
float v = 0.5 * (cosf(x) + 1.0f);
return (uint8_t)(255.0f * v);
}
@ -70,9 +70,9 @@ bool led_backlight_keyframe_fade_out_all(keyframe_animation_t* animation, visual
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;
float t = current_pos / frame_length;
for (int i=0; i< NUM_COLS; i++) {
float current_pos = frame_length - animation->time_left_in_frame;
float t = current_pos / frame_length;
for (int i = 0; i < NUM_COLS; i++) {
uint8_t color = compute_gradient_color(t, i, NUM_COLS);
gdispGDrawLine(LED_DISPLAY, i, 0, i, NUM_ROWS - 1, LUMA2COLOR(color));
}
@ -82,9 +82,9 @@ bool led_backlight_keyframe_left_to_right_gradient(keyframe_animation_t* animati
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;
float t = current_pos / frame_length;
for (int i=0; i< NUM_ROWS; i++) {
float current_pos = frame_length - animation->time_left_in_frame;
float t = current_pos / frame_length;
for (int i = 0; i < NUM_ROWS; i++) {
uint8_t color = compute_gradient_color(t, i, NUM_ROWS);
gdispGDrawLine(LED_DISPLAY, 0, i, NUM_COLS - 1, i, LUMA2COLOR(color));
}
@ -92,9 +92,9 @@ bool led_backlight_keyframe_top_to_bottom_gradient(keyframe_animation_t* animati
}
static void copy_current_led_state(uint8_t* dest) {
for (int i=0;i<NUM_ROWS;i++) {
for (int j=0;j<NUM_COLS;j++) {
dest[i*NUM_COLS + j] = gdispGGetPixelColor(LED_DISPLAY, j, i);
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
dest[i * NUM_COLS + j] = gdispGGetPixelColor(LED_DISPLAY, j, i);
}
}
}
@ -105,9 +105,9 @@ bool led_backlight_keyframe_crossfade(keyframe_animation_t* animation, visualize
run_next_keyframe(animation, state);
copy_current_led_state(&crossfade_end_frame[0][0]);
}
for (int i=0;i<NUM_ROWS;i++) {
for (int j=0;j<NUM_COLS;j++) {
color_t color = LUMA2COLOR(fade_led_color(animation, crossfade_start_frame[i][j], crossfade_end_frame[i][j]));
for (int i = 0; i < NUM_ROWS; i++) {
for (int j = 0; j < NUM_COLS; j++) {
color_t color = LUMA2COLOR(fade_led_color(animation, crossfade_start_frame[i][j], crossfade_end_frame[i][j]));
gdispGDrawPixel(LED_DISPLAY, j, i, color);
}
}

View File

@ -40,5 +40,4 @@ bool led_backlight_keyframe_enable(keyframe_animation_t* animation, visualizer_s
extern keyframe_animation_t led_test_animation;
#endif /* LED_KEYFRAMES_H */

View File

@ -16,7 +16,6 @@
#include "resources.h"
// To generate an image array like this
// Ensure the image is 128 x 32 or smaller
// Convert the bitmap to a C array using a program like http://www.riuson.com/lcd-image-converter/
@ -24,39 +23,7 @@
// Update array in the source code with the C array produced by the conversion program
// The image below is generated from lcd_logo.png
__attribute__((weak))
const uint8_t resource_lcd_logo[512] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xf8, 0xfe, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x06, 0x29, 0x41, 0x24, 0x52, 0x24, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x42, 0xaa, 0xaa, 0xaa, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x82, 0x28, 0xaa, 0xae, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x43, 0x28, 0xaa, 0xaa, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x0a, 0x55, 0x42, 0x28, 0xaa, 0xaa, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x05, 0x45, 0x42, 0x28, 0x89, 0x4a, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1c, 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x03, 0xff, 0x80, 0x04, 0x45, 0x14, 0xa4, 0x92, 0x83, 0x52, 0x22, 0x22, 0x36, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xba, 0x84, 0x55, 0x55, 0x57, 0x45, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x08, 0xaa, 0xaa, 0xaa, 0x92, 0xb2, 0x55, 0x55, 0x42, 0x65, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x08, 0xaa, 0xaa, 0xaa, 0x92, 0x81, 0x56, 0x65, 0x42, 0x45, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x92, 0x81, 0x54, 0x45, 0x42, 0x45, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x04, 0x48, 0xa2, 0x4a, 0x89, 0x06, 0x24, 0x42, 0x41, 0x36, 0x00, 0x00,
0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
__attribute__((weak)) const uint8_t resource_lcd_logo[512] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xfe, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x38, 0x38, 0x38, 0x06, 0x29, 0x41, 0x24, 0x52, 0x24, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x42, 0xaa, 0xaa, 0xaa, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x82, 0x28, 0xaa, 0xae, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x09, 0x55, 0x43, 0x28, 0xaa, 0xaa, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x0a, 0x55, 0x42, 0x28, 0xaa, 0xaa, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x05, 0x45, 0x42, 0x28, 0x89, 0x4a, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x38, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x38, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x0e, 0x38, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x80, 0x04, 0x45, 0x14, 0xa4, 0x92, 0x83, 0x52, 0x22, 0x22, 0x36, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xba, 0x84, 0x55, 0x55, 0x57, 0x45, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, 0xaa, 0xaa, 0xaa, 0x92, 0xb2, 0x55, 0x55, 0x42, 0x65, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x08, 0xaa, 0xaa, 0xaa, 0x92, 0x81, 0x56, 0x65, 0x42, 0x45, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0x92, 0x81, 0x54, 0x45, 0x42, 0x45, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x04, 0x48, 0xa2, 0x4a, 0x89, 0x06, 0x24, 0x42, 0x41, 0x36, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

View File

@ -23,5 +23,4 @@
extern const uint8_t resource_lcd_logo[];
#endif
#endif /* QUANTUM_VISUALIZER_RESOURCES_RESOURCES_H_ */

View File

@ -26,26 +26,26 @@ SOFTWARE.
#include "visualizer.h"
#include <string.h>
#ifdef PROTOCOL_CHIBIOS
#include "ch.h"
# include "ch.h"
#endif
#include "gfx.h"
#ifdef LCD_BACKLIGHT_ENABLE
#include "lcd_backlight.h"
# include "lcd_backlight.h"
#endif
//#define DEBUG_VISUALIZER
#ifdef DEBUG_VISUALIZER
#include "debug.h"
# include "debug.h"
#else
#include "nodebug.h"
# include "nodebug.h"
#endif
#ifdef SERIAL_LINK_ENABLE
#include "serial_link/protocol/transport.h"
#include "serial_link/system/serial_link.h"
# include "serial_link/protocol/transport.h"
# include "serial_link/system/serial_link.h"
#endif
#include "action_util.h"
@ -53,36 +53,31 @@ SOFTWARE.
// Define this in config.h
#ifndef VISUALIZER_THREAD_PRIORITY
// The visualizer needs gfx thread priorities
#define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)
# define VISUALIZER_THREAD_PRIORITY (NORMAL_PRIORITY - 2)
#endif
static visualizer_keyboard_status_t current_status = {
.layer = 0xFFFFFFFF,
.default_layer = 0xFFFFFFFF,
.leds = 0xFFFFFFFF,
static visualizer_keyboard_status_t current_status = {.layer = 0xFFFFFFFF,
.default_layer = 0xFFFFFFFF,
.leds = 0xFFFFFFFF,
#ifdef BACKLIGHT_ENABLE
.backlight_level = 0,
.backlight_level = 0,
#endif
.mods = 0xFF,
.suspended = false,
.mods = 0xFF,
.suspended = false,
#ifdef VISUALIZER_USER_DATA_SIZE
.user_data = {0}
.user_data = {0}
#endif
};
static bool same_status(visualizer_keyboard_status_t* status1, visualizer_keyboard_status_t* status2) {
return status1->layer == status2->layer &&
status1->default_layer == status2->default_layer &&
status1->mods == status2->mods &&
status1->leds == status2->leds &&
status1->suspended == status2->suspended
return status1->layer == status2->layer && status1->default_layer == status2->default_layer && status1->mods == status2->mods && status1->leds == status2->leds && status1->suspended == status2->suspended
#ifdef BACKLIGHT_ENABLE
&& status1->backlight_level == status2->backlight_level
&& status1->backlight_level == status2->backlight_level
#endif
#ifdef VISUALIZER_USER_DATA_SIZE
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
&& memcmp(status1->user_data, status2->user_data, VISUALIZER_USER_DATA_SIZE) == 0
#endif
;
;
}
static bool visualizer_enabled = false;
@ -107,44 +102,38 @@ GDisplay* LCD_DISPLAY = 0;
GDisplay* LED_DISPLAY = 0;
#ifdef LCD_DISPLAY_NUMBER
__attribute__((weak))
GDisplay* get_lcd_display(void) {
return gdispGetDisplay(LCD_DISPLAY_NUMBER);
}
__attribute__((weak)) GDisplay* get_lcd_display(void) { return gdispGetDisplay(LCD_DISPLAY_NUMBER); }
#endif
#ifdef LED_DISPLAY_NUMBER
__attribute__((weak))
GDisplay* get_led_display(void) {
return gdispGetDisplay(LED_DISPLAY_NUMBER);
}
__attribute__((weak)) GDisplay* get_led_display(void) { return gdispGetDisplay(LED_DISPLAY_NUMBER); }
#endif
void start_keyframe_animation(keyframe_animation_t* animation) {
animation->current_frame = -1;
animation->current_frame = -1;
animation->time_left_in_frame = 0;
animation->need_update = true;
int free_index = -1;
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
animation->need_update = true;
int free_index = -1;
for (int i = 0; i < MAX_SIMULTANEOUS_ANIMATIONS; i++) {
if (animations[i] == animation) {
return;
}
if (free_index == -1 && animations[i] == NULL) {
free_index=i;
free_index = i;
}
}
if (free_index!=-1) {
if (free_index != -1) {
animations[free_index] = animation;
}
}
void stop_keyframe_animation(keyframe_animation_t* animation) {
animation->current_frame = animation->num_frames;
animation->time_left_in_frame = 0;
animation->need_update = true;
animation->current_frame = animation->num_frames;
animation->time_left_in_frame = 0;
animation->need_update = true;
animation->first_update_of_frame = false;
animation->last_update_of_frame = false;
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
animation->last_update_of_frame = false;
for (int i = 0; i < MAX_SIMULTANEOUS_ANIMATIONS; i++) {
if (animations[i] == animation) {
animations[i] = NULL;
return;
@ -153,21 +142,21 @@ void stop_keyframe_animation(keyframe_animation_t* animation) {
}
void stop_all_keyframe_animations(void) {
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
for (int i = 0; i < MAX_SIMULTANEOUS_ANIMATIONS; i++) {
if (animations[i]) {
animations[i]->current_frame = animations[i]->num_frames;
animations[i]->time_left_in_frame = 0;
animations[i]->need_update = true;
animations[i]->current_frame = animations[i]->num_frames;
animations[i]->time_left_in_frame = 0;
animations[i]->need_update = true;
animations[i]->first_update_of_frame = false;
animations[i]->last_update_of_frame = false;
animations[i] = NULL;
animations[i]->last_update_of_frame = false;
animations[i] = NULL;
}
}
}
static uint8_t get_num_running_animations(void) {
uint8_t count = 0;
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
for (int i = 0; i < MAX_SIMULTANEOUS_ANIMATIONS; i++) {
count += animations[i] ? 1 : 0;
}
return count;
@ -175,46 +164,44 @@ static uint8_t get_num_running_animations(void) {
static bool update_keyframe_animation(keyframe_animation_t* animation, visualizer_state_t* state, systemticks_t delta, systemticks_t* sleep_time) {
// TODO: Clean up this messy code
dprintf("Animation frame%d, left %d, delta %d\n", animation->current_frame,
animation->time_left_in_frame, delta);
dprintf("Animation frame%d, left %d, delta %d\n", animation->current_frame, animation->time_left_in_frame, delta);
if (animation->current_frame == animation->num_frames) {
animation->need_update = false;
return false;
}
if (animation->current_frame == -1) {
animation->current_frame = 0;
animation->time_left_in_frame = animation->frame_lengths[0];
animation->need_update = true;
animation->first_update_of_frame = true;
animation->current_frame = 0;
animation->time_left_in_frame = animation->frame_lengths[0];
animation->need_update = true;
animation->first_update_of_frame = true;
} else {
animation->time_left_in_frame -= delta;
while (animation->time_left_in_frame <= 0) {
int left = animation->time_left_in_frame;
if (animation->need_update) {
animation->time_left_in_frame = 0;
animation->time_left_in_frame = 0;
animation->last_update_of_frame = true;
(*animation->frame_functions[animation->current_frame])(animation, state);
animation->last_update_of_frame = false;
}
animation->current_frame++;
animation->need_update = true;
animation->need_update = true;
animation->first_update_of_frame = true;
if (animation->current_frame == animation->num_frames) {
if (animation->loop) {
animation->current_frame = 0;
}
else {
} else {
stop_keyframe_animation(animation);
return false;
}
}
delta = -left;
delta = -left;
animation->time_left_in_frame = animation->frame_lengths[animation->current_frame];
animation->time_left_in_frame -= delta;
}
}
if (animation->need_update) {
animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state);
animation->need_update = (*animation->frame_functions[animation->current_frame])(animation, state);
animation->first_update_of_frame = false;
}
@ -231,13 +218,13 @@ void run_next_keyframe(keyframe_animation_t* animation, visualizer_state_t* stat
if (next_frame == animation->num_frames) {
next_frame = 0;
}
keyframe_animation_t temp_animation = *animation;
temp_animation.current_frame = next_frame;
temp_animation.time_left_in_frame = animation->frame_lengths[next_frame];
keyframe_animation_t temp_animation = *animation;
temp_animation.current_frame = next_frame;
temp_animation.time_left_in_frame = animation->frame_lengths[next_frame];
temp_animation.first_update_of_frame = true;
temp_animation.last_update_of_frame = false;
temp_animation.need_update = false;
visualizer_state_t temp_state = *state;
temp_animation.last_update_of_frame = false;
temp_animation.need_update = false;
visualizer_state_t temp_state = *state;
(*temp_animation.frame_functions[next_frame])(&temp_animation, &temp_state);
}
@ -252,70 +239,64 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
visualizer_keyboard_status_t initial_status = {
.default_layer = 0xFFFFFFFF,
.layer = 0xFFFFFFFF,
.mods = 0xFF,
.leds = 0xFFFFFFFF,
.suspended = false,
#ifdef BACKLIGHT_ENABLE
.layer = 0xFFFFFFFF,
.mods = 0xFF,
.leds = 0xFFFFFFFF,
.suspended = false,
#ifdef BACKLIGHT_ENABLE
.backlight_level = 0,
#endif
#ifdef VISUALIZER_USER_DATA_SIZE
#endif
#ifdef VISUALIZER_USER_DATA_SIZE
.user_data = {0},
#endif
#endif
};
visualizer_state_t state = {
.status = initial_status,
.current_lcd_color = 0,
visualizer_state_t state = {.status = initial_status,
.current_lcd_color = 0,
#ifdef LCD_ENABLE
.font_fixed5x8 = gdispOpenFont("fixed_5x8"),
.font_dejavusansbold12 = gdispOpenFont("DejaVuSansBold12")
.font_fixed5x8 = gdispOpenFont("fixed_5x8"),
.font_dejavusansbold12 = gdispOpenFont("DejaVuSansBold12")
#endif
};
initialize_user_visualizer(&state);
state.prev_lcd_color = state.current_lcd_color;
#ifdef LCD_BACKLIGHT_ENABLE
lcd_backlight_color(
LCD_HUE(state.current_lcd_color),
LCD_SAT(state.current_lcd_color),
LCD_INT(state.current_lcd_color));
lcd_backlight_color(LCD_HUE(state.current_lcd_color), LCD_SAT(state.current_lcd_color), LCD_INT(state.current_lcd_color));
#endif
systemticks_t sleep_time = TIME_INFINITE;
systemticks_t sleep_time = TIME_INFINITE;
systemticks_t current_time = gfxSystemTicks();
bool force_update = true;
bool force_update = true;
while(true) {
while (true) {
systemticks_t new_time = gfxSystemTicks();
systemticks_t delta = new_time - current_time;
current_time = new_time;
bool enabled = visualizer_enabled;
systemticks_t delta = new_time - current_time;
current_time = new_time;
bool enabled = visualizer_enabled;
if (force_update || !same_status(&state.status, &current_status)) {
force_update = false;
#if BACKLIGHT_ENABLE
if(current_status.backlight_level != state.status.backlight_level) {
#if BACKLIGHT_ENABLE
if (current_status.backlight_level != state.status.backlight_level) {
if (current_status.backlight_level != 0) {
gdispGSetPowerMode(LED_DISPLAY, powerOn);
uint16_t percent = (uint16_t)current_status.backlight_level * 100 / BACKLIGHT_LEVELS;
gdispGSetBacklight(LED_DISPLAY, percent);
}
else {
} else {
gdispGSetPowerMode(LED_DISPLAY, powerOff);
}
state.status.backlight_level = current_status.backlight_level;
}
#endif
#endif
if (visualizer_enabled) {
if (current_status.suspended) {
stop_all_keyframe_animations();
visualizer_enabled = false;
state.status = current_status;
state.status = current_status;
user_visualizer_suspend(&state);
}
else {
} else {
visualizer_keyboard_status_t prev_status = state.status;
state.status = current_status;
state.status = current_status;
update_user_visualizer_state(&state, &prev_status);
}
state.prev_lcd_color = state.current_lcd_color;
@ -324,14 +305,14 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
if (!enabled && state.status.suspended && current_status.suspended == false) {
// Setting the status to the initial status will force an update
// when the visualizer is enabled again
state.status = initial_status;
state.status = initial_status;
state.status.suspended = false;
stop_all_keyframe_animations();
user_visualizer_resume(&state);
state.prev_lcd_color = state.current_lcd_color;
}
sleep_time = TIME_INFINITE;
for (int i=0;i<MAX_SIMULTANEOUS_ANIMATIONS;i++) {
for (int i = 0; i < MAX_SIMULTANEOUS_ANIMATIONS; i++) {
if (animations[i]) {
update_keyframe_animation(animations[i], &state, delta, &sleep_time);
}
@ -350,17 +331,16 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
// Enable the visualizer when the startup or the suspend animation has finished
if (!visualizer_enabled && state.status.suspended == false && get_num_running_animations() == 0) {
visualizer_enabled = true;
force_update = true;
sleep_time = 0;
force_update = true;
sleep_time = 0;
}
systemticks_t after_update = gfxSystemTicks();
unsigned update_delta = after_update - current_time;
unsigned update_delta = after_update - current_time;
if (sleep_time != TIME_INFINITE) {
if (sleep_time > update_delta) {
sleep_time -= update_delta;
}
else {
} else {
sleep_time = 0;
}
}
@ -388,26 +368,25 @@ static DECLARE_THREAD_FUNCTION(visualizerThread, arg) {
void visualizer_init(void) {
gfxInit();
#ifdef LCD_BACKLIGHT_ENABLE
#ifdef LCD_BACKLIGHT_ENABLE
lcd_backlight_init();
#endif
#endif
#ifdef SERIAL_LINK_ENABLE
add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*) );
#endif
#ifdef SERIAL_LINK_ENABLE
add_remote_objects(remote_objects, sizeof(remote_objects) / sizeof(remote_object_t*));
#endif
#ifdef LCD_ENABLE
#ifdef LCD_ENABLE
LCD_DISPLAY = get_lcd_display();
#endif
#endif
#ifdef BACKLIGHT_ENABLE
#ifdef BACKLIGHT_ENABLE
LED_DISPLAY = get_led_display();
#endif
#endif
// We are using a low priority thread, the idea is to have it run only
// when the main thread is sleeping during the matrix scanning
gfxThreadCreate(visualizerThreadStack, sizeof(visualizerThreadStack),
VISUALIZER_THREAD_PRIORITY, visualizerThread, NULL);
gfxThreadCreate(visualizerThreadStack, sizeof(visualizerThreadStack), VISUALIZER_THREAD_PRIORITY, visualizerThread, NULL);
}
void update_status(bool changed) {
@ -418,33 +397,31 @@ void update_status(bool changed) {
}
}
#ifdef SERIAL_LINK_ENABLE
static systime_t last_update = 0;
systime_t current_update = chVTGetSystemTimeX();
systime_t delta = current_update - last_update;
static systime_t last_update = 0;
systime_t current_update = chVTGetSystemTimeX();
systime_t delta = current_update - last_update;
if (changed || delta > MS2ST(10)) {
last_update = current_update;
last_update = current_update;
visualizer_keyboard_status_t* r = begin_write_current_status();
*r = current_status;
*r = current_status;
end_write_current_status();
}
#endif
}
uint8_t visualizer_get_mods() {
uint8_t mods = get_mods();
uint8_t mods = get_mods();
#ifndef NO_ACTION_ONESHOT
if (!has_oneshot_mods_timed_out()) {
mods |= get_oneshot_mods();
}
if (!has_oneshot_mods_timed_out()) {
mods |= get_oneshot_mods();
}
#endif
return mods;
return mods;
}
#ifdef VISUALIZER_USER_DATA_SIZE
void visualizer_set_user_data(void* u) {
memcpy(user_data, u, VISUALIZER_USER_DATA_SIZE);
}
void visualizer_set_user_data(void* u) { memcpy(user_data, u, VISUALIZER_USER_DATA_SIZE); }
#endif
void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t mods, uint32_t leds) {
@ -455,34 +432,33 @@ void visualizer_update(layer_state_t default_state, layer_state_t state, uint8_t
bool changed = false;
#ifdef SERIAL_LINK_ENABLE
if (is_serial_link_connected ()) {
if (is_serial_link_connected()) {
visualizer_keyboard_status_t* new_status = read_current_status();
if (new_status) {
if (!same_status(&current_status, new_status)) {
changed = true;
changed = true;
current_status = *new_status;
}
}
}
else {
} else {
#else
{
{
#endif
visualizer_keyboard_status_t new_status = {
.layer = state,
.layer = state,
.default_layer = default_state,
.mods = mods,
.leds = leds,
.mods = mods,
.leds = leds,
#ifdef BACKLIGHT_ENABLE
.backlight_level = current_status.backlight_level,
#endif
.suspended = current_status.suspended,
};
#ifdef VISUALIZER_USER_DATA_SIZE
memcpy(new_status.user_data, user_data, VISUALIZER_USER_DATA_SIZE);
memcpy(new_status.user_data, user_data, VISUALIZER_USER_DATA_SIZE);
#endif
if (!same_status(&current_status, &new_status)) {
changed = true;
changed = true;
current_status = new_status;
}
}

View File

@ -33,11 +33,11 @@ SOFTWARE.
#include "action_layer.h"
#ifdef LCD_BACKLIGHT_ENABLE
#include "lcd_backlight.h"
# include "lcd_backlight.h"
#endif
#ifdef BACKLIGHT_ENABLE
#include "backlight.h"
# include "backlight.h"
#endif
// use this function to merge both real_mods and oneshot_mods in a uint16_t
@ -71,9 +71,9 @@ struct keyframe_animation_t;
typedef struct {
layer_state_t layer;
layer_state_t default_layer;
uint32_t leds; // See led.h for available statuses
uint8_t mods;
bool suspended;
uint32_t leds; // See led.h for available statuses
uint8_t mods;
bool suspended;
#ifdef BACKLIGHT_ENABLE
uint8_t backlight_level;
#endif
@ -87,7 +87,7 @@ typedef struct {
// from the user customized code
typedef struct visualizer_state_t {
// The user code should primarily be modifying these
uint32_t target_lcd_color;
uint32_t target_lcd_color;
const char* layer_text;
// The user visualizer(and animation functions) can read these
@ -111,15 +111,15 @@ typedef bool (*frame_func)(struct keyframe_animation_t*, visualizer_state_t*);
// while others are meant to be initialized by the user code
typedef struct keyframe_animation_t {
// These should be initialized
int num_frames;
bool loop;
int frame_lengths[MAX_VISUALIZER_KEY_FRAMES];
int num_frames;
bool loop;
int frame_lengths[MAX_VISUALIZER_KEY_FRAMES];
frame_func frame_functions[MAX_VISUALIZER_KEY_FRAMES];
// Used internally by the system, and can also be read by
// keyframe update functions
int current_frame;
int time_left_in_frame;
int current_frame;
int time_left_in_frame;
bool first_update_of_frame;
bool last_update_of_frame;
bool need_update;