mirror of
https://github.com/Keychron/qmk_firmware.git
synced 2024-11-26 02:17:38 +06:00
Refactor staryu to current standards and enable support for backlight keycodes (#5487)
This commit is contained in:
parent
a0270b55e1
commit
9ef21d2e1c
|
@ -1,52 +0,0 @@
|
|||
#include "backlight.h"
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
/* backlighting */
|
||||
void init_backlight_led(void)
|
||||
{
|
||||
DDRC |= (1<<PC2 | 1<<PC7);
|
||||
DDRD |= (1<<PD5 | 1<<PD6);
|
||||
DDRB |= (1<<PB0);
|
||||
}
|
||||
|
||||
void backlight_led_off(uint8_t index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0:
|
||||
PORTC |= (1<<PC2);
|
||||
break;
|
||||
case 1:
|
||||
PORTC |= (1<<PC7);
|
||||
break;
|
||||
case 2:
|
||||
PORTD |= (1<<PD5);
|
||||
break;
|
||||
case 3:
|
||||
PORTD |= (1<<PD6);
|
||||
break;
|
||||
case 4:
|
||||
PORTB |= (1<<PB0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void backlight_led_on(uint8_t index)
|
||||
{
|
||||
switch (index) {
|
||||
case 0:
|
||||
PORTC &= ~(1<<PC2);
|
||||
break;
|
||||
case 1:
|
||||
PORTC &= ~(1<<PC7);
|
||||
break;
|
||||
case 2:
|
||||
PORTD &= ~(1<<PD5);
|
||||
break;
|
||||
case 3:
|
||||
PORTD &= ~(1<<PD6);
|
||||
break;
|
||||
case 4:
|
||||
PORTB &= ~(1<<PB0);
|
||||
break;
|
||||
}
|
||||
}
|
|
@ -1,12 +1,21 @@
|
|||
#ifndef STARYU_BL
|
||||
#define STARYU_BL
|
||||
/*
|
||||
Copyright 2019
|
||||
|
||||
#include <stdint.h>
|
||||
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.
|
||||
|
||||
void init_backlight_led(void);
|
||||
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.
|
||||
|
||||
void backlight_led_on(uint8_t index);
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
void backlight_led_off(uint8_t index);
|
||||
|
||||
#endif
|
||||
// Add backwards compatibility for existing keymaps
|
||||
#define backlight_led_off(i) backlight_set_value(i, 0)
|
||||
#define backlight_led_on(i) backlight_set_value(i, 1)
|
|
@ -14,8 +14,7 @@ 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/>.
|
||||
*/
|
||||
#ifndef CONFIG_H
|
||||
#define CONFIG_H
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
|
@ -32,43 +31,38 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
#define MATRIX_COLS 5
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_ROW_PINS { }
|
||||
#define MATRIX_ROW_PINS { NO_PIN }
|
||||
#define MATRIX_COL_PINS { D0, D1, D2, D3, D4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
// from light_ws2812_config @
|
||||
// https://github.com/kairyu/tmk_keyboard_custom/tree/master/keyboard/staryu
|
||||
#define RGB_DI_PIN C6
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
#define RGBLED_NUM 1 // Number of LEDs
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define RGB_DI_PIN C6
|
||||
#define RGBLED_NUM 1 // Number of LEDs
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
// #ifdef RGB_DI_PIN
|
||||
// #define RGBLIGHT_HUE_STEP 8
|
||||
// #define RGBLIGHT_SAT_STEP 8
|
||||
// #define RGBLIGHT_VAL_STEP 8
|
||||
// #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||
// #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||
// /*== all animations enable ==*/
|
||||
// #define RGBLIGHT_ANIMATIONS
|
||||
// /*== or choose animations ==*/
|
||||
// #define RGBLIGHT_EFFECT_BREATHING
|
||||
// #define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
// #define RGBLIGHT_EFFECT_SNAKE
|
||||
// #define RGBLIGHT_EFFECT_KNIGHT
|
||||
// #define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
// #define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
// #define RGBLIGHT_EFFECT_RGB_TEST
|
||||
// #define RGBLIGHT_EFFECT_ALTERNATING
|
||||
// #endif
|
||||
|
||||
#define BACKLIGHT_LEVELS 1 // either on/off
|
||||
#define RGBLIGHT_LIMIT_VAL 200
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCING_DELAY 5
|
||||
|
||||
// TODO backlighting
|
||||
#define BACKLIGHT_LEVELS 10
|
||||
// #define BACKLIGHT_PIN B7
|
||||
/*
|
||||
Backlight: C2, C7, D5, D6, B0
|
||||
switch (index) {
|
||||
case 0:
|
||||
PORTC &= ~(1<<PC2);
|
||||
break;
|
||||
case 1:
|
||||
PORTC &= ~(1<<PC7);
|
||||
break;
|
||||
case 2:
|
||||
PORTD &= ~(1<<PD5);
|
||||
break;
|
||||
case 3:
|
||||
PORTD &= ~(1<<PD6);
|
||||
break;
|
||||
case 4:
|
||||
PORTB &= ~(1<<PB0);
|
||||
break;
|
||||
*/
|
||||
|
||||
#endif
|
||||
|
|
|
@ -20,62 +20,85 @@ enum layers {
|
|||
_LAYER0,
|
||||
_LAYER1,
|
||||
_LAYER2,
|
||||
_LAYER3
|
||||
_LAYER3,
|
||||
_LAYER4
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_LAYER0] = LAYOUT(
|
||||
/* ┌─────────┬─────────┬─────────┐ */
|
||||
KC_UP, TO(_LAYER1),
|
||||
/* ├─────────┼─────────┼─────────┤ */
|
||||
KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
/* └─────────┴─────────┴─────────┘ */
|
||||
),
|
||||
|
||||
[_LAYER1] = LAYOUT(
|
||||
/* ┌─────────┬─────────┬─────────┐ */
|
||||
KC_PGUP, TO(_LAYER2),
|
||||
/* ├─────────┼─────────┼─────────┤ */
|
||||
KC_HOME, KC_PGDN, KC_END
|
||||
/* └─────────┴─────────┴─────────┘ */
|
||||
),
|
||||
|
||||
[_LAYER2] = LAYOUT(
|
||||
/* ┌─────────┬─────────┬─────────┐ */
|
||||
KC_MSEL, TO(_LAYER3),
|
||||
/* ├─────────┼─────────┼─────────┤ */
|
||||
KC_MPRV, KC_MPLY, KC_MNXT
|
||||
/* └─────────┴─────────┴─────────┘ */
|
||||
),
|
||||
|
||||
[_LAYER3] = LAYOUT(
|
||||
/* ┌─────────┬─────────┬─────────┐ */
|
||||
KC_MS_U, TO(_LAYER4),
|
||||
/* ├─────────┼─────────┼─────────┤ */
|
||||
KC_MS_L, KC_MS_D, KC_MS_R
|
||||
/* └─────────┴─────────┴─────────┘ */
|
||||
),
|
||||
|
||||
[_LAYER4] = LAYOUT(
|
||||
/* ┌─────────┬─────────┬─────────┐ */
|
||||
XXXXXXX, TO(_LAYER0),
|
||||
/* ├─────────┼─────────┼─────────┤ */
|
||||
RGB_TOG, BL_TOGG, BL_STEP
|
||||
/* └─────────┴─────────┴─────────┘ */
|
||||
),
|
||||
|
||||
const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS] PROGMEM = {
|
||||
/* Keymap 0
|
||||
* ,-----------.
|
||||
* | |Up |Fn0|
|
||||
* |---+---+---|
|
||||
* |Lef|Dow|Rig|
|
||||
* `-----------'
|
||||
*/
|
||||
LAYOUT( KC_UP, TO(_LAYER1), KC_LEFT,KC_DOWN,KC_RIGHT ),
|
||||
/* Keymap 1
|
||||
* ,-----------.
|
||||
* | |PgU|Fn1|
|
||||
* |---+---+---|
|
||||
* |Hom|PgD|End|
|
||||
* `-----------'
|
||||
*/
|
||||
LAYOUT( KC_PGUP,TO(_LAYER2), KC_HOME,KC_PGDN,KC_END ),
|
||||
/* Keymap 2
|
||||
* ,-----------.
|
||||
* | |Sel|Fn2|
|
||||
* |---+---+---|
|
||||
* |Pre|Pla|Nex|
|
||||
* `-----------'
|
||||
*/
|
||||
LAYOUT( KC_MSEL,TO(_LAYER3), KC_MPRV,KC_MPLY,KC_MNXT ),
|
||||
/* Keymap 3
|
||||
* ,-----------.
|
||||
* | |MsU|Fn3|
|
||||
* |---+---+---|
|
||||
* |MsL|MsD|MsR|
|
||||
* `-----------'
|
||||
*/
|
||||
LAYOUT( KC_MS_U,TO(_LAYER0), KC_MS_L,KC_MS_D,KC_MS_R ),
|
||||
// /* Keymap 4
|
||||
// * ,-----------.
|
||||
// * | |Fn6|Fn4|
|
||||
// * |---+---+---|
|
||||
// * |Fn7|Fn5|Fn8|
|
||||
// * `-----------'
|
||||
// */
|
||||
// LAYOUT( FN6, FN4, FN7, FN5, FN8 ),
|
||||
};
|
||||
|
||||
const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) {
|
||||
return MACRO_NONE ;
|
||||
void eeconfig_init_user(void) {
|
||||
// use the non noeeprom versions, to write these values to EEPROM too
|
||||
rgblight_enable();
|
||||
rgblight_mode(RGBLIGHT_MODE_BREATHING+1);
|
||||
|
||||
backlight_enable();
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
void keyboard_post_init_user(void) {
|
||||
//layer_state_set_user is not called for inital state - set it here
|
||||
rgblight_sethsv_noeeprom_white();
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
case _LAYER1:
|
||||
rgblight_sethsv_noeeprom_cyan();
|
||||
break;
|
||||
case _LAYER2:
|
||||
rgblight_sethsv_noeeprom_magenta();
|
||||
break;
|
||||
case _LAYER3:
|
||||
rgblight_sethsv_noeeprom_red();
|
||||
break;
|
||||
case _LAYER4:
|
||||
rgblight_sethsv_noeeprom_orange();
|
||||
break;
|
||||
case _LAYER0:
|
||||
default: // for any other layers, or the default layer
|
||||
rgblight_sethsv_noeeprom_white();
|
||||
break;
|
||||
}
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -1,10 +1,6 @@
|
|||
# MCU name
|
||||
MCU = atmega32u2
|
||||
|
||||
BOOTLOADER = lufa-dfu
|
||||
|
||||
SRC = backlight_staryu.c
|
||||
|
||||
# Processor frequency.
|
||||
# This will define a symbol, F_CPU, in all source code files equal to the
|
||||
# processor frequency in Hz. You can then use this symbol in your source code to
|
||||
|
@ -40,21 +36,43 @@ F_USB = $(F_CPU)
|
|||
# Interrupt driven control endpoint task(+60)
|
||||
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# atmega32a bootloadHID
|
||||
BOOTLOADER = lufa-dfu
|
||||
|
||||
# Boot Section Size in *bytes*
|
||||
OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
# If you don't know the bootloader type, then you can specify the
|
||||
# Boot Section Size in *bytes* by uncommenting out the OPT_DEFS line
|
||||
# Teensy halfKay 512
|
||||
# Teensy++ halfKay 1024
|
||||
# Atmel DFU loader 4096
|
||||
# LUFA bootloader 4096
|
||||
# USBaspLoader 2048
|
||||
# OPT_DEFS += -DBOOTLOADER_SIZE=4096
|
||||
|
||||
|
||||
# Build Options
|
||||
# comment out to disable the options.
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = yes # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
NKRO_ENABLE = no # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = yes # In-switch LEDs
|
||||
AUDIO_ENABLE = no # There is no available timer or pin for audio on the NovelPad
|
||||
RGBLIGHT_ENABLE = yes # RGB LEDs for underglow, installed and enabled by default for the NovelPad
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration(+1000)
|
||||
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control(+450)
|
||||
CONSOLE_ENABLE = no # Console for debug(+400)
|
||||
COMMAND_ENABLE = no # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality on B7 by default
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config)
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400)
|
||||
|
|
|
@ -15,12 +15,30 @@ 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 "staryu.h"
|
||||
#include "backlight_staryu.h"
|
||||
|
||||
// for keyboard subdirectory level init functions
|
||||
// @Override
|
||||
void matrix_init_kb(void) {
|
||||
// call user level keymaps, if any
|
||||
init_backlight_led();
|
||||
matrix_init_user();
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
|
||||
#ifdef BACKLIGHT_PIN
|
||||
#pragma error "BACKLIGHT_PIN must stay undefined otherwise software pwm is incorrectly used"
|
||||
#endif
|
||||
|
||||
#define BACKLIGHT_PIN_COUNT 5
|
||||
static const pin_t backlight_pins[BACKLIGHT_PIN_COUNT] = { C2, C7, D5, D6, B0 };
|
||||
|
||||
void backlight_init_ports(void) {
|
||||
for (uint8_t index = 0; index < BACKLIGHT_PIN_COUNT; index++) {
|
||||
setPinOutput(backlight_pins[index]);
|
||||
}
|
||||
}
|
||||
|
||||
void backlight_set_value(uint8_t index, uint8_t level) {
|
||||
writePin(backlight_pins[index], !!level);
|
||||
}
|
||||
|
||||
void backlight_set(uint8_t level) {
|
||||
for (uint8_t index = 0; index < BACKLIGHT_PIN_COUNT; index++) {
|
||||
backlight_set_value(index, level);
|
||||
}
|
||||
}
|
||||
|
||||
#endif //BACKLIGHT_ENABLE
|
||||
|
|
|
@ -14,15 +14,19 @@ 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/>.
|
||||
*/
|
||||
#ifndef KB_H
|
||||
#define KB_H
|
||||
#pragma once
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT( \
|
||||
K00, K01, \
|
||||
K10, K11, K12 \
|
||||
K00, K01, \
|
||||
K10, K11, K12 \
|
||||
) { \
|
||||
{ K00, K01, K12, K11, K10 }, \
|
||||
}
|
||||
|
||||
|
||||
#ifdef BACKLIGHT_ENABLE
|
||||
|
||||
void backlight_set_value(uint8_t index, uint8_t level);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user