mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-22 00:16:41 +06:00
Makefile changes and files to compile Visualizer
This commit is contained in:
parent
10f3a1b621
commit
70797bb8f2
15
Makefile
15
Makefile
|
@ -218,14 +218,6 @@ ifeq ($(strip $(SERIAL_LINK_ENABLE)), yes)
|
|||
VAPTH += $(SERIAL_PATH)
|
||||
endif
|
||||
|
||||
ifeq ($(MASTER),right)
|
||||
OPT_DEFS += -DMASTER_IS_ON_RIGHT
|
||||
else
|
||||
ifneq ($(MASTER),left)
|
||||
$(error MASTER does not have a valid value(left/right))
|
||||
endif
|
||||
endif
|
||||
|
||||
# Optimize size but this may cause error "relocation truncated to fit"
|
||||
#EXTRALDFLAGS = -Wl,--relax
|
||||
|
||||
|
@ -257,10 +249,17 @@ ifeq ($(PLATFORM),AVR)
|
|||
else ifeq ($(PLATFORM),CHIBIOS)
|
||||
include $(TMK_PATH)/protocol/chibios.mk
|
||||
include $(TMK_PATH)/chibios.mk
|
||||
OPT_OS = chibios
|
||||
else
|
||||
$(error Unknown platform)
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(VISUALIZER_ENABLE)), yes)
|
||||
VISUALIZER_DIR = $(QUANTUM_DIR)/visualizer
|
||||
VISUALIZER_PATH = $(QUANTUM_PATH)/visualizer
|
||||
include $(VISUALIZER_PATH)/visualizer.mk
|
||||
endif
|
||||
|
||||
include $(TMK_PATH)/rules.mk
|
||||
|
||||
GIT_VERSION := $(shell git describe --abbrev=6 --dirty --always --tags 2>/dev/null || date +"%Y-%m-%d-%H:%M:%S")
|
||||
|
|
|
@ -67,6 +67,9 @@ SLEEP_LED_ENABLE ?= yes # Breathing sleep LED during USB suspend
|
|||
NKRO_ENABLE ?= yes # USB Nkey Rollover
|
||||
CUSTOM_MATRIX ?= yes # Custom matrix file
|
||||
SERIAL_LINK_ENABLE = yes
|
||||
VISUALIZER_ENABLE ?= yes
|
||||
LCD_ENABLE ?= yes
|
||||
LCD_BACKLIGHT_ENABLE ?= yes
|
||||
|
||||
ifndef QUANTUM_DIR
|
||||
include ../../Makefile
|
||||
|
|
331
keyboards/infinity_ergodox/gfxconf.h
Normal file
331
keyboards/infinity_ergodox/gfxconf.h
Normal file
|
@ -0,0 +1,331 @@
|
|||
/**
|
||||
* 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 _GFXCONF_H
|
||||
#define _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
|
||||
|
||||
#ifndef EMULATOR
|
||||
#define GDISP_DRIVER_LIST GDISPVMT_ST7565_ERGODOX, GDISPVMT_IS31FL3731C_ERGODOX
|
||||
#else
|
||||
#define GDISP_DRIVER_LIST GDISPVMT_EMULATOR_LCD_ERGODOX, GDISPVMT_EMULATOR_LED_ERGODOX
|
||||
#endif
|
||||
|
||||
#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 /* _GFXCONF_H */
|
84
keyboards/infinity_ergodox/lcd_backlight_hal.c
Normal file
84
keyboards/infinity_ergodox/lcd_backlight_hal.c
Normal file
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
|
||||
Jun Wako <wakojun@gmail.com>
|
||||
|
||||
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/>.
|
||||
*/
|
||||
#include "lcd_backlight.h"
|
||||
#include "hal.h"
|
||||
|
||||
#define RED_PIN 1
|
||||
#define GREEN_PIN 2
|
||||
#define BLUE_PIN 3
|
||||
#define CHANNEL_RED FTM0->CHANNEL[0]
|
||||
#define CHANNEL_GREEN FTM0->CHANNEL[1]
|
||||
#define CHANNEL_BLUE FTM0->CHANNEL[2]
|
||||
|
||||
#define RGB_PORT PORTC
|
||||
#define RGB_PORT_GPIO GPIOC
|
||||
|
||||
// Base FTM clock selection (72 MHz system clock)
|
||||
// @ 0xFFFF period, 72 MHz / (0xFFFF * 2) = Actual period
|
||||
// Higher pre-scalar will use the most power (also look the best)
|
||||
// Pre-scalar calculations
|
||||
// 0 - 72 MHz -> 549 Hz
|
||||
// 1 - 36 MHz -> 275 Hz
|
||||
// 2 - 18 MHz -> 137 Hz
|
||||
// 3 - 9 MHz -> 69 Hz (Slightly visible flicker)
|
||||
// 4 - 4 500 kHz -> 34 Hz (Visible flickering)
|
||||
// 5 - 2 250 kHz -> 17 Hz
|
||||
// 6 - 1 125 kHz -> 9 Hz
|
||||
// 7 - 562 500 Hz -> 4 Hz
|
||||
// Using a higher pre-scalar without flicker is possible but FTM0_MOD will need to be reduced
|
||||
// Which will reduce the brightness range
|
||||
#define PRESCALAR_DEFINE 0
|
||||
|
||||
void lcd_backlight_hal_init(void) {
|
||||
// Setup Backlight
|
||||
SIM->SCGC6 |= SIM_SCGC6_FTM0;
|
||||
FTM0->CNT = 0; // Reset counter
|
||||
|
||||
// PWM Period
|
||||
// 16-bit maximum
|
||||
FTM0->MOD = 0xFFFF;
|
||||
|
||||
// Set FTM to PWM output - Edge Aligned, Low-true pulses
|
||||
#define CNSC_MODE FTM_SC_CPWMS | FTM_SC_PS(4) | FTM_SC_CLKS(0)
|
||||
CHANNEL_RED.CnSC = CNSC_MODE;
|
||||
CHANNEL_GREEN.CnSC = CNSC_MODE;
|
||||
CHANNEL_BLUE.CnSC = CNSC_MODE;
|
||||
|
||||
// System clock, /w prescalar setting
|
||||
FTM0->SC = FTM_SC_CLKS(1) | FTM_SC_PS(PRESCALAR_DEFINE);
|
||||
|
||||
CHANNEL_RED.CnV = 0;
|
||||
CHANNEL_GREEN.CnV = 0;
|
||||
CHANNEL_BLUE.CnV = 0;
|
||||
|
||||
RGB_PORT_GPIO->PDDR |= (1 << RED_PIN);
|
||||
RGB_PORT_GPIO->PDDR |= (1 << GREEN_PIN);
|
||||
RGB_PORT_GPIO->PDDR |= (1 << BLUE_PIN);
|
||||
|
||||
#define RGB_MODE PORTx_PCRn_SRE | PORTx_PCRn_DSE | PORTx_PCRn_MUX(4)
|
||||
RGB_PORT->PCR[RED_PIN] = RGB_MODE;
|
||||
RGB_PORT->PCR[GREEN_PIN] = RGB_MODE;
|
||||
RGB_PORT->PCR[BLUE_PIN] = RGB_MODE;
|
||||
}
|
||||
|
||||
void lcd_backlight_hal_color(uint16_t r, uint16_t g, uint16_t b) {
|
||||
CHANNEL_RED.CnV = r;
|
||||
CHANNEL_GREEN.CnV = g;
|
||||
CHANNEL_BLUE.CnV = b;
|
||||
}
|
||||
|
168
keyboards/infinity_ergodox/visualizer_user.c
Normal file
168
keyboards/infinity_ergodox/visualizer_user.c
Normal file
|
@ -0,0 +1,168 @@
|
|||
/*
|
||||
Copyright 2016 Fred Sundvik <fsundvik@gmail.com>
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
// Currently we are assuming that both the backlight and LCD are enabled
|
||||
// But it's entirely possible to write a custom visualizer that use only
|
||||
// one of them
|
||||
#ifndef LCD_BACKLIGHT_ENABLE
|
||||
#error This visualizer needs that LCD backlight is enabled
|
||||
#endif
|
||||
|
||||
#ifndef LCD_ENABLE
|
||||
#error This visualizer needs that LCD is enabled
|
||||
#endif
|
||||
|
||||
#include "visualizer.h"
|
||||
#include "led_test.h"
|
||||
|
||||
static const char* welcome_text[] = {"TMK", "Infinity Ergodox"};
|
||||
|
||||
// Just an example how to write custom keyframe functions, we could have moved
|
||||
// all this into the init function
|
||||
bool display_welcome(keyframe_animation_t* animation, visualizer_state_t* state) {
|
||||
(void)animation;
|
||||
// Read the uGFX documentation for information how to use the displays
|
||||
// http://wiki.ugfx.org/index.php/Main_Page
|
||||
gdispClear(White);
|
||||
// You can use static variables for things that can't be found in the animation
|
||||
// or state structs
|
||||
gdispDrawString(0, 3, welcome_text[0], state->font_dejavusansbold12, Black);
|
||||
gdispDrawString(0, 15, welcome_text[1], state->font_dejavusansbold12, Black);
|
||||
// Always remember to flush the display
|
||||
gdispFlush();
|
||||
// you could set the backlight color as well, but we won't do it here, since
|
||||
// it's part of the following animation
|
||||
// lcd_backlight_color(hue, saturation, intensity);
|
||||
// We don't need constant updates, just drawing the screen once is enough
|
||||
return false;
|
||||
}
|
||||
|
||||
// Feel free to modify the animations below, or even add new ones if needed
|
||||
|
||||
// Don't worry, if the startup animation is long, you can use the keyboard like normal
|
||||
// during that time
|
||||
static keyframe_animation_t startup_animation = {
|
||||
.num_frames = 4,
|
||||
.loop = false,
|
||||
.frame_lengths = {0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
|
||||
.frame_functions = {
|
||||
display_welcome,
|
||||
keyframe_animate_backlight_color,
|
||||
keyframe_no_operation,
|
||||
enable_visualization
|
||||
},
|
||||
};
|
||||
|
||||
// The color animation animates the LCD color when you change layers
|
||||
static keyframe_animation_t color_animation = {
|
||||
.num_frames = 2,
|
||||
.loop = false,
|
||||
// Note that there's a 200 ms no-operation frame,
|
||||
// this prevents the color from changing when activating the layer
|
||||
// momentarily
|
||||
.frame_lengths = {gfxMillisecondsToTicks(200), gfxMillisecondsToTicks(500)},
|
||||
.frame_functions = {keyframe_no_operation, keyframe_animate_backlight_color},
|
||||
};
|
||||
|
||||
// The LCD animation alternates between the layer name display and a
|
||||
// bitmap that displays all active layers
|
||||
static keyframe_animation_t lcd_animation = {
|
||||
.num_frames = 2,
|
||||
.loop = true,
|
||||
.frame_lengths = {gfxMillisecondsToTicks(2000), gfxMillisecondsToTicks(2000)},
|
||||
.frame_functions = {keyframe_display_layer_text, keyframe_display_layer_bitmap},
|
||||
};
|
||||
|
||||
static keyframe_animation_t suspend_animation = {
|
||||
.num_frames = 3,
|
||||
.loop = false,
|
||||
.frame_lengths = {0, gfxMillisecondsToTicks(1000), 0},
|
||||
.frame_functions = {
|
||||
keyframe_display_layer_text,
|
||||
keyframe_animate_backlight_color,
|
||||
keyframe_disable_lcd_and_backlight,
|
||||
},
|
||||
};
|
||||
|
||||
static keyframe_animation_t resume_animation = {
|
||||
.num_frames = 5,
|
||||
.loop = false,
|
||||
.frame_lengths = {0, 0, gfxMillisecondsToTicks(1000), gfxMillisecondsToTicks(5000), 0},
|
||||
.frame_functions = {
|
||||
keyframe_enable_lcd_and_backlight,
|
||||
display_welcome,
|
||||
keyframe_animate_backlight_color,
|
||||
keyframe_no_operation,
|
||||
enable_visualization,
|
||||
},
|
||||
};
|
||||
|
||||
void initialize_user_visualizer(visualizer_state_t* state) {
|
||||
// The brightness will be dynamically adjustable in the future
|
||||
// But for now, change it here.
|
||||
lcd_backlight_brightness(0x50);
|
||||
state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0xFF);
|
||||
state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
|
||||
start_keyframe_animation(&startup_animation);
|
||||
start_keyframe_animation(&led_test_animation);
|
||||
}
|
||||
|
||||
void update_user_visualizer_state(visualizer_state_t* state) {
|
||||
// Add more tests, change the colors and layer texts here
|
||||
// Usually you want to check the high bits (higher layers first)
|
||||
// because that's the order layers are processed for keypresses
|
||||
// You can for check for example:
|
||||
// state->status.layer
|
||||
// state->status.default_layer
|
||||
// state->status.leds (see led.h for available statuses)
|
||||
if (state->status.layer & 0x8) {
|
||||
state->target_lcd_color = LCD_COLOR(0xC0, 0xB0, 0xFF);
|
||||
state->layer_text = "Numpad";
|
||||
}
|
||||
else if (state->status.layer & 0x4) {
|
||||
state->target_lcd_color = LCD_COLOR(0, 0xB0, 0xFF);
|
||||
state->layer_text = "KBD functions";
|
||||
}
|
||||
else if (state->status.layer & 0x2) {
|
||||
state->target_lcd_color = LCD_COLOR(0x80, 0xB0, 0xFF);
|
||||
state->layer_text = "Function keys";
|
||||
}
|
||||
else {
|
||||
state->target_lcd_color = LCD_COLOR(0x40, 0xB0, 0xFF);
|
||||
state->layer_text = "Default";
|
||||
}
|
||||
// You can also stop existing animations, and start your custom ones here
|
||||
// remember that you should normally have only one animation for the LCD
|
||||
// and one for the background. But you can also combine them if you want.
|
||||
start_keyframe_animation(&lcd_animation);
|
||||
start_keyframe_animation(&color_animation);
|
||||
}
|
||||
|
||||
void user_visualizer_suspend(visualizer_state_t* state) {
|
||||
state->layer_text = "Suspending...";
|
||||
uint8_t hue = LCD_HUE(state->current_lcd_color);
|
||||
uint8_t sat = LCD_SAT(state->current_lcd_color);
|
||||
state->target_lcd_color = LCD_COLOR(hue, sat, 0);
|
||||
start_keyframe_animation(&suspend_animation);
|
||||
}
|
||||
|
||||
void user_visualizer_resume(visualizer_state_t* state) {
|
||||
state->current_lcd_color = LCD_COLOR(0x00, 0x00, 0x00);
|
||||
state->target_lcd_color = LCD_COLOR(0x10, 0xFF, 0xFF);
|
||||
start_keyframe_animation(&resume_animation);
|
||||
start_keyframe_animation(&led_test_animation);
|
||||
}
|
|
@ -29,9 +29,7 @@ SOFTWARE.
|
|||
#include "ch.h"
|
||||
#endif
|
||||
|
||||
#ifdef LCD_ENABLE
|
||||
#include "gfx.h"
|
||||
#endif
|
||||
|
||||
#ifdef LCD_BACKLIGHT_ENABLE
|
||||
#include "lcd_backlight.h"
|
||||
|
|
|
@ -28,9 +28,7 @@ SOFTWARE.
|
|||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#ifdef LCD_ENABLE
|
||||
#include "gfx.h"
|
||||
#endif
|
||||
|
||||
#ifdef LCD_BACKLIGHT_ENABLE
|
||||
#include "lcd_backlight.h"
|
||||
|
|
|
@ -20,14 +20,14 @@
|
|||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
|
||||
GFXLIB = $(VISUALIZER_DIR)/ugfx
|
||||
SRC += $(VISUALIZER_DIR)/visualizer.c
|
||||
UINCDIR += $(GFXINC) $(VISUALIZER_DIR)
|
||||
EXTRAINCDIRS += $(GFXINC) $(VISUALIZER_DIR)
|
||||
GFXLIB = $(LIB_PATH)/ugfx
|
||||
VPATH += $(VISUALIZER_PATH)
|
||||
|
||||
ifdef LCD_ENABLE
|
||||
UDEFS += -DLCD_ENABLE
|
||||
OPT_DEFS += -DLCD_ENABLE
|
||||
ULIBS += -lm
|
||||
USE_UGFX = yes
|
||||
endif
|
||||
|
||||
ifdef LCD_BACKLIGHT_ENABLE
|
||||
|
@ -35,21 +35,21 @@ SRC += $(VISUALIZER_DIR)/lcd_backlight.c
|
|||
ifndef EMULATOR
|
||||
SRC += lcd_backlight_hal.c
|
||||
endif
|
||||
UDEFS += -DLCD_BACKLIGHT_ENABLE
|
||||
OPT_DEFS += -DLCD_BACKLIGHT_ENABLE
|
||||
endif
|
||||
|
||||
ifdef LED_ENABLE
|
||||
SRC += $(VISUALIZER_DIR)/led_test.c
|
||||
UDEFS += -DLED_ENABLE
|
||||
USE_UGFX = yes
|
||||
endif
|
||||
|
||||
ifdef USE_UGFX
|
||||
include $(GFXLIB)/gfx.mk
|
||||
SRC += $(GFXSRC)
|
||||
UDEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS)))
|
||||
ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS)))
|
||||
endif
|
||||
#SERIAL_SRC = $(wildcard $(SERIAL_PATH)/protocol/*.c)
|
||||
#SERIAL_SRC += $(wildcard $(SERIAL_PATH)/system/*.c)
|
||||
#SRC += $(patsubst $(QUANTUM_PATH)/%,%,$(SERIAL_SRC))
|
||||
#SRC += $(GFXSRC)
|
||||
OPT_DEFS += $(patsubst %,-D%,$(patsubst -D%,%,$(GFXDEFS)))
|
||||
#ULIBS += $(patsubst %,-l%,$(patsubst -l%,%,$(GFXLIBS)))
|
||||
|
||||
ifndef VISUALIZER_USER
|
||||
VISUALIZER_USER = visualizer_user.c
|
||||
|
|
Loading…
Reference in New Issue
Block a user