Compare commits
20 Commits
0.13.15
...
drop-1.0.0
Author | SHA1 | Date | |
---|---|---|---|
|
99d89b124f | ||
|
8b5e4959a0 | ||
|
3cb242b47d | ||
|
9b80ceca52 | ||
|
9fdfae83d1 | ||
|
9075995ea3 | ||
|
c529972416 | ||
|
4c6b0f0291 | ||
|
9352fbee07 | ||
|
441b212c86 | ||
|
413a8938f1 | ||
|
082c835c26 | ||
|
0500497612 | ||
|
a0fac849eb | ||
|
e0e57110e0 | ||
|
02d6be34d7 | ||
|
151feb4723 | ||
|
ca618bcf6c | ||
|
d8936f3435 | ||
|
5fb9b45481 |
216
keyboards/georgi/keymaps/template/keymap.c
Normal file
216
keyboards/georgi/keymaps/template/keymap.c
Normal file
@ -0,0 +1,216 @@
|
||||
/*
|
||||
* Good on you for modifying your layout, this is the most nonQMK layout you will come across
|
||||
* There are three modes, Steno (the default), QWERTY (Toggleable) and a Momentary symbol layer
|
||||
*
|
||||
* Don't modify the steno layer directly, instead add chords using the keycodes and macros
|
||||
* from sten.h to the layout you want to modify.
|
||||
*
|
||||
* Observe the comment above processQWERTY!
|
||||
*
|
||||
* http://docs.gboards.ca
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "sten.h"
|
||||
#include "keymap_steno.h"
|
||||
#define IGNORE_MOD_TAP_INTERRUPT
|
||||
|
||||
int getKeymapCount(void);
|
||||
|
||||
// Proper Layers
|
||||
#define FUNCT (LSD | LK | LP | LH)
|
||||
#define MEDIA (LSD | LK | LW | LR)
|
||||
#define MOVE (ST1 | ST2)
|
||||
|
||||
/* Keyboard Layout
|
||||
* ,---------------------------------. ,------------------------------.
|
||||
* | FN | LSU | LFT | LP | LH | ST1 | | ST3 | RF | RP | RL | RT | RD |
|
||||
* |-----+-----+-----+----+----|-----| |-----|----+----+----+----+----|
|
||||
* | PWR | LSD | LK | LW | LR | ST2 | | ST4 | RR | RG | RB | RS | RZ |
|
||||
* `---------------------------------' `------------------------------'
|
||||
* ,---------------, .---------------.
|
||||
* | NUM | LA | LO | | RE | RU | NUM |
|
||||
* `---------------' `---------------'
|
||||
*/
|
||||
|
||||
// YOU MUST ORDER THIS!
|
||||
// P Will return from processing on the first match it finds. Therefore
|
||||
// PJ Will run the requested action, remove the matched chord and continue
|
||||
//
|
||||
// First any chords that would conflict with PJs need to be checked, then PJs, lastly Ps.
|
||||
// For all chords should be ordered by length in their section!
|
||||
//
|
||||
// http://docs.gboards.ca
|
||||
bool processQwerty(void) {
|
||||
// Place P's that would be trashed by PJ's here
|
||||
P( RT | RS | RD | RZ | NUM, SEND_STRING(VERSION); SEND_STRING(__DATE__));
|
||||
P( NUM | LA | LO | RE | RU, SEND(KC_MPLY));
|
||||
P( ST1 | ST2 | ST3 | ST4, SEND(KC_BSPC));
|
||||
|
||||
// Thumb Chords
|
||||
P( LA | LO | RE | RU, SEND(KC_CAPS));
|
||||
P( LA | RU, SEND(KC_ESC));
|
||||
PJ( LO | RE, SEND(KC_LCTL));
|
||||
PJ( NUM | LA | RU, SEND(KC_LCTL); SEND(KC_LSFT));
|
||||
PJ( NUM | LA | RE, SEND(KC_LCTL); SEND(KC_LSFT); SEND(KC_LALT));
|
||||
|
||||
// Mods
|
||||
PJ( RT | RD | RS | RZ, SEND(KC_LGUI));
|
||||
PJ( RT | RD, SEND(KC_LCTL));
|
||||
PJ( RS | RZ, SEND(KC_LALT));
|
||||
PJ( LA | NUM, SEND(KC_LCTL));
|
||||
PJ( LA | LO, SEND(KC_LALT));
|
||||
PJ( LO, SEND(KC_LSFT));
|
||||
|
||||
// Function Layer
|
||||
P( FUNCT | RF | RR, SEND(KC_F5));
|
||||
P( FUNCT | RP | RB, SEND(KC_F6));
|
||||
P( FUNCT | RL | RG, SEND(KC_F7));
|
||||
P( FUNCT | RT | RS, SEND(KC_F8));
|
||||
P( FUNCT | RF, SEND(KC_F1));
|
||||
P( FUNCT | RP, SEND(KC_F2));
|
||||
P( FUNCT | RL, SEND(KC_F3));
|
||||
P( FUNCT | RT, SEND(KC_F4));
|
||||
P( FUNCT | RR, SEND(KC_F9));
|
||||
P( FUNCT | RG, SEND(KC_F10));
|
||||
P( FUNCT | RB, SEND(KC_F11));
|
||||
P( FUNCT | RS, SEND(KC_F12));
|
||||
|
||||
// Movement Layer
|
||||
P( MOVE | RF, SEND(KC_LEFT));
|
||||
P( MOVE | RP, SEND(KC_DOWN));
|
||||
P( MOVE | RL, SEND(KC_UP));
|
||||
P( MOVE | RT, SEND(KC_RIGHT));
|
||||
P( MOVE | ST3, SEND(KC_PGUP));
|
||||
P( MOVE | ST4, SEND(KC_PGDN));
|
||||
|
||||
// Media Layer
|
||||
P( MEDIA | RF, SEND(KC_MPRV));
|
||||
P( MEDIA | RP, SEND(KC_MPLY));
|
||||
P( MEDIA | RL, SEND(KC_MPLY));
|
||||
P( MEDIA | RT, SEND(KC_MNXT));
|
||||
P( MEDIA | RD, SEND(KC_VOLU));
|
||||
P( MEDIA | RZ, SEND(KC_VOLD));
|
||||
P( MEDIA | RS, SEND(KC_MUTE));
|
||||
|
||||
// Mouse Keys
|
||||
P( LP | LH, clickMouse(KC_MS_BTN1));
|
||||
P( LW | LR, clickMouse(KC_MS_BTN2));
|
||||
|
||||
// Number Row
|
||||
P( NUM | LSU, SEND(KC_1));
|
||||
P( NUM | LFT, SEND(KC_2));
|
||||
P( NUM | LP, SEND(KC_3));
|
||||
P( NUM | LH, SEND(KC_4));
|
||||
P( NUM | ST1, SEND(KC_5));
|
||||
P( NUM | ST3, SEND(KC_6));
|
||||
P( NUM | RF, SEND(KC_7));
|
||||
P( NUM | RP, SEND(KC_8));
|
||||
P( NUM | RL, SEND(KC_9));
|
||||
P( NUM | RT, SEND(KC_0));
|
||||
P( NUM | LA, SEND(KC_5));
|
||||
P( NUM | RT, SEND(KC_0));
|
||||
|
||||
// Specials
|
||||
P( LA | NUM, SEND(KC_ESC));
|
||||
P( RU | NUM, SEND(KC_TAB));
|
||||
P( RE | RU, SEND(KC_BSPC));
|
||||
P( RD | RZ, SEND(KC_ENT));
|
||||
P( RE, SEND(KC_ENT));
|
||||
P( RD, SEND(KC_BSPC));
|
||||
P( NUM, SEND(KC_BSPC));
|
||||
P( LA, SEND(KC_SPC));
|
||||
P( RU, SEND(KC_SPC));
|
||||
P( RZ, SEND(KC_ESC));
|
||||
|
||||
// Letters
|
||||
P( LSU | LSD, SEND(KC_A));
|
||||
P( LFT | LK, SEND(KC_S));
|
||||
P( LP | LW, SEND(KC_D));
|
||||
P( LH | LR, SEND(KC_F));
|
||||
P( ST1 | ST2, SEND(KC_G));
|
||||
P( ST3 | ST4, SEND(KC_H));
|
||||
P( RF | RR, SEND(KC_J));
|
||||
P( RT | RS, SEND(KC_SCLN))
|
||||
P( RG | RL, SEND(KC_L));
|
||||
P( RP | RB, SEND(KC_K));
|
||||
P( LSU, SEND(KC_Q));
|
||||
P( LSD, SEND(KC_Z));
|
||||
P( LFT, SEND(KC_W));
|
||||
P( LK, SEND(KC_X));
|
||||
P( LP, SEND(KC_E));
|
||||
P( LW, SEND(KC_C));
|
||||
P( LH, SEND(KC_R));
|
||||
P( LR, SEND(KC_V));
|
||||
P( ST1, SEND(KC_T));
|
||||
P( ST2, SEND(KC_B));
|
||||
P( ST3, SEND(KC_Y));
|
||||
P( ST4, SEND(KC_N));
|
||||
P( RF, SEND(KC_U));
|
||||
P( RR, SEND(KC_M));
|
||||
P( RP, SEND(KC_I));
|
||||
P( RB, SEND(KC_COMM));
|
||||
P( RL, SEND(KC_O));
|
||||
P( RG, SEND(KC_DOT));
|
||||
P( RT, SEND(KC_P));
|
||||
P( RS, SEND(KC_SLSH));
|
||||
|
||||
// Symbols and Numbers
|
||||
P( PWR | RE | RU, SEND(KC_ENT));
|
||||
P( PWR | LA | LO, SEND(KC_SPC));
|
||||
P( PWR | LP | LW, SEND(KC_LSFT); SEND(KC_9)); // (
|
||||
P( PWR | LH | LR, SEND(KC_LSFT); SEND(KC_0)); // )
|
||||
P( PWR | ST1 | ST2, SEND(KC_GRV)); // `
|
||||
P( PWR | RD | RZ, SEND(KC_ESC));
|
||||
P( PWR | LSU | LSD, SEND(KC_LSFT); SEND(KC_3)); // #
|
||||
P( PWR | LFT | LK, SEND(KC_LSFT); SEND(KC_4)); // $
|
||||
P( PWR | LSU, SEND(KC_LSFT); SEND(KC_1)); // !
|
||||
P( PWR | LSD, SEND(KC_LSFT); SEND(KC_5)); // %
|
||||
P( PWR | LFT, SEND(KC_LSFT); SEND(KC_2)); // @
|
||||
P( PWR | LK, SEND(KC_LSFT); SEND(KC_6)); // ^
|
||||
P( PWR | LP, SEND(KC_LSFT); SEND(KC_LBRC)); // {
|
||||
P( PWR | LW, SEND(KC_LBRC));
|
||||
P( PWR | LH, SEND(KC_LSFT); SEND(KC_RBRC)); // }
|
||||
P( PWR | LR, SEND(KC_RBRC));
|
||||
P( PWR | ST1, SEND(KC_LSFT); SEND(KC_BSLS)); // |
|
||||
P( PWR | ST2, SEND(KC_LSFT); SEND(KC_GRV)); // ~
|
||||
P( PWR | ST3, SEND(KC_QUOT));
|
||||
P( PWR | ST4, SEND(KC_LSFT); SEND(KC_QUOT)); // "
|
||||
P( PWR | RF, SEND(KC_KP_PLUS));
|
||||
P( PWR | RR, SEND(KC_LSFT); SEND(KC_7)); // &
|
||||
P( PWR | RP, SEND(KC_MINS));
|
||||
P( PWR | RB, SEND(KC_EQL));
|
||||
P( PWR | RL, SEND(KC_SLSH));
|
||||
P( PWR | RG, SEND(KC_COMM));
|
||||
P( PWR | RT, SEND(KC_PAST));
|
||||
P( PWR | RS, SEND(KC_DOT));
|
||||
P( PWR | RD, SEND(KC_TAB));
|
||||
P( PWR | LA, SEND(KC_SCLN));
|
||||
P( PWR | LO, SEND(KC_SLSH));
|
||||
P( PWR | RE, SEND(KC_SCLN));
|
||||
P( PWR | RU, SEND(KC_SLSH));
|
||||
|
||||
|
||||
// If we make here, send as a steno chord
|
||||
// If plover is running we can hook that host side
|
||||
return false;
|
||||
}
|
||||
|
||||
#define STENO_LAYER 0
|
||||
|
||||
// "Layers"
|
||||
// Steno layer should be first in your map.
|
||||
// When PWR | FN | RR | RG | RB | RS is pressed, the layer is increased to the next map. You must return to STENO_LAYER at the end.
|
||||
// If you have only a single layer, you must set SINGLELAYER = yes in your rules.mk, otherwise you may experince undefined behaviour
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// Main layer, everything goes through here
|
||||
[STENO_LAYER] = LAYOUT_georgi(
|
||||
STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
|
||||
STN_PWR, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
|
||||
STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N1)
|
||||
};
|
||||
|
||||
int getKeymapCount(void) {
|
||||
return sizeof(keymaps)/sizeof(keymaps[0]);
|
||||
}
|
6
keyboards/georgi/keymaps/template/readme.md
Normal file
6
keyboards/georgi/keymaps/template/readme.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Georgi QWERTY/Steno firmware
|
||||
|
||||
This is a blank template configured with 5K of free space for your onboard dictionary!
|
||||
Read the docs over at [gBoards](http://docs.gboards.ca)
|
||||
|
||||
Ideally you should copy this directory and make your changes there. If you come up with a good layout submit a PR!
|
27
keyboards/georgi/keymaps/template/rules.mk
Normal file
27
keyboards/georgi/keymaps/template/rules.mk
Normal file
@ -0,0 +1,27 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# make georgi:extrakey:dfu
|
||||
# Make sure you have dfu-programmer installed!
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#Debug options
|
||||
VERBOSE = yes
|
||||
CONSOLE_ENABLE = yes
|
||||
DEBUG_MATRIX_SCAN_RATE = no
|
||||
DEBUG_MATRIX = no
|
||||
KEYBOARD_SHARED_EP = yes
|
||||
CUSTOM_MATRIX = yes
|
||||
MOUSEKEY_ENABLE = no
|
||||
SINGLE_LAYER = no
|
||||
|
||||
|
||||
# A bunch of stuff that you shouldn't touch unless you
|
||||
# know what you're doing.
|
||||
#
|
||||
# No touchy, capiche?
|
||||
SRC += matrix.c i2c_master.c
|
||||
ifeq ($(strip $(DEBUG_MATRIX)), yes)
|
||||
OPT_DEFS += -DDEBUG_MATRIX
|
||||
endif
|
||||
ifeq ($(strip $(SINGLE_LAYER)), yes)
|
||||
OPT_DEFS += -DSINGLE_LAYER
|
||||
endif
|
@ -2,7 +2,7 @@
|
||||
"keyboard_name": "kbd4x",
|
||||
"url": "",
|
||||
"maintainer": "qmk",
|
||||
"width": 12,
|
||||
"width": 14,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT_planck_mit": {
|
||||
|
@ -2,8 +2,8 @@
|
||||
"keyboard_name": "Iris",
|
||||
"url": "https://keeb.io",
|
||||
"maintainer": "Keebio",
|
||||
"width": 15,
|
||||
"height": 5.75,
|
||||
"width": 14.5,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
|
@ -54,7 +54,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define SR_EXP_OE_N_PIN 15
|
||||
/* SERCOM port to use for Shift Register SPI */
|
||||
/* DATAOUT and SCLK must be configured to use hardware pins of this port */
|
||||
#define SR_EXP_SERCOM SERCOM2
|
||||
#define SR_EXP_SERCOM_NUM 2
|
||||
/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */
|
||||
#define SR_EXP_DATAOUT_PORT PA
|
||||
#define SR_EXP_DATAOUT_PIN 12
|
||||
@ -94,6 +94,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
// Required BOOT key hold time (in ms) for restarting to bootloader -PS081419
|
||||
#define BOOTKEY_HOLD_MS 2000
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
//#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
|
81
keyboards/massdrop/alt/config_adc.h
Normal file
81
keyboards/massdrop/alt/config_adc.h
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
//ADC configuration table column indices
|
||||
#define ADC_PORT 0
|
||||
#define ADC_PIN 1
|
||||
#define ADC_MUX 2
|
||||
#define ADC_INDEX 3
|
||||
#define ADC_MUXPOS 4
|
||||
#define ADC_REFSEL 5
|
||||
#define ADC_SAMPLENUM 6
|
||||
#define ADC_SAMPLEN 7
|
||||
|
||||
//ADC configuration table row indices
|
||||
#define ADC_5V 0 //5V bus voltage
|
||||
#define ADC_C1A5 1 //Connector 1 A5 CC voltage
|
||||
#define ADC_C1B5 2 //Connector 1 B5 CC voltage
|
||||
#define ADC_C2A5 3 //Connector 2 A5 CC voltage
|
||||
#define ADC_C2B5 4 //Connector 2 B5 CC voltage
|
||||
#define ADC_C1I 5 //Connector 1 current
|
||||
#define ADC_C2I 6 //Connector 2 current
|
||||
|
||||
//ADC_PORT: PORT of the PIN on the MCU (Ex: 0 = PA, 1 = PB, ...)
|
||||
// Set ADC_PORT to ADC_NA if it is not available for use
|
||||
//ADC_PIN: PIN on the MCU (Ex: 0 = 00, 1 = 01, 12 = 12, ...)
|
||||
//ADC_MUX: PMUX setting for the MCU PIN (Ex: 0 = A, 1 = B, 2 = C, ...)
|
||||
//ADC_INDEX: ADC to use (Ex: 0 = ADC0, 1 = ADC1, ...)
|
||||
//ADC_MUXPOS: MUXPOS setting to read on the ADC (Use macros from Atmel library adc.h ADC_INPUTCTRL_MUXPOS_AIN*_Val)
|
||||
//ADC_REFSEL: Reference the ADC is to use (Use macros from Atmel library adc.h ADC_REFCTRL_REFSEL_*_Val)
|
||||
//ADC_SAMPLENUM: Number of samples to average for output (Use macros from Atmel library adc.h ADC_AVGCTRL_SAMPLENUM_*_Val)
|
||||
//ADC_SAMPLEN: Sampling time for each sample in units of CLK_ADC cycles depending on the ADC clock frequency
|
||||
// ADC_PORT ADC_MUX
|
||||
// | ADC_PIN | ADC_INDEX
|
||||
// | | | | ADC_MUXPOS ADC_REFSEL ADC_SAMPLENUM ADC_SAMPLEN
|
||||
#define ADC_CONFIG_5V 1, 0, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN12_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_4_Val, 45
|
||||
#define ADC_CONFIG_C1A5 1, 2, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN14_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_16_Val, 63
|
||||
#define ADC_CONFIG_C1B5 ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C2A5 1, 1, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN13_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_16_Val, 63
|
||||
#define ADC_CONFIG_C2B5 ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C1I ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C2I ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
//Conversion values dependant upon the circuitry
|
||||
#define ADC_5V_VOLTS_PER_COUNT 0.001904297f
|
||||
#define ADC_5V_VOLTS_OFFSET 0.0f
|
||||
#define ADC_5V_NOMINAL 5.0f
|
||||
#define ADC_5V_NOMINAL_COUNTS (ADC_5V_NOMINAL / ADC_5V_VOLTS_PER_COUNT)
|
||||
|
||||
//Conversion macros
|
||||
#define ADC_5V_C2V(icounts) ((float)icounts * ADC_5V_VOLTS_PER_COUNT + ADC_5V_VOLTS_OFFSET) //Converts 5V Bus counts to volts
|
||||
#define ADC_5V_V2C(v) (((float)v - ADC_5V_VOLTS_OFFSET) / ADC_5V_VOLTS_PER_COUNT) //Converts 5V Bus volts to counts
|
||||
#define ADC_CC_5VCOR(v5counts, cc) ((float)v5counts == 0 ? 0 : ADC_5V_NOMINAL_COUNTS / (float)v5counts * (float)cc) //Corrects CC counts to nominal 5V value
|
||||
|
||||
#define ADC_USBC_EXTRA_NOMINAL 850 //Nominal ADC value for detection of connected device
|
||||
#define ADC_USBC_EXTRA_NOMINAL_P1 1250 //Nominal ADC value for detection of connected device
|
||||
|
||||
//Note: Due to assembly error, USBC-1 J2 CC readings are wrong so we must check for special cases
|
||||
#define USBC_IS_SINK(a5, b5) (USB_HOST_IS_2(g_usb_host_port) ? \
|
||||
(a5 < ADC_USBC_EXTRA_NOMINAL_P1 || b5 < ADC_USBC_EXTRA_NOMINAL_P1) \
|
||||
: \
|
||||
(a5 < ADC_USBC_EXTRA_NOMINAL || b5 < ADC_USBC_EXTRA_NOMINAL) \
|
||||
)
|
||||
|
||||
#define POWER_CHECK_INTERVAL 1 //How often to check power usage for adjustment and safety (ms)
|
||||
#define V_5V_AVGS 50 //Number of 5V readings to average for algorithms wanting stable readings rather than instantaneous
|
@ -8,10 +8,14 @@
|
||||
// This table can be almost-automatically derived from ISSI3733_LED_MAP that is
|
||||
// defined in config_led.h
|
||||
|
||||
// scan in the following equations refers to the scan variable of ISSI3733_LED_MAP
|
||||
// col = (uint8_t)(scan / 8)
|
||||
// row = (uint8_t)(scan % 8)
|
||||
//
|
||||
// You can calculate the (0-244, 0-64) x/y values from the x/y values defined in
|
||||
// ISSI3733_LED_MAP with the following formula:
|
||||
// uint8_t rgb_x = ((ISSI3733_LED_MAP[i].x - MIN_X) / (MAX_X - MIN_X)) * 224;
|
||||
// uint8_t rgb_y = ((ISSI3733_LED_MAP[i].y - MIN_Y) / (MAX_Y - MIN_Y)) * 64;
|
||||
// uint8_t rgb_y = ((ISSI3733_LED_MAP[i].y - MIN_Y) / (MAX_Y - MIN_Y)) * 64; //TODO: 64 - this?
|
||||
// Where the min/max vars are the minimum and maximum "bounds" of x/y values
|
||||
// present in ISSI3733_LED_MAP
|
||||
//
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2018 Massdrop Inc.
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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
|
||||
@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
//Define number of ISSI3733 drivers being used (1...16)
|
||||
//Define number of IS31FL3733 drivers being used (1...16)
|
||||
#define ISSI3733_DRIVER_COUNT 2
|
||||
#define DRIVER_LED_TOTAL ISSI3733_LED_COUNT
|
||||
|
||||
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||
//Hardware address of each driver (Refer to IS31FL3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
|
||||
|
||||
//LED I2C bus speed
|
||||
@ -45,9 +45,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define ISSI3733_GCR_DEFAULT LED_GCR_MAX
|
||||
|
||||
//Automatic power rollback and recovery
|
||||
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
|
||||
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
|
||||
#define V5_HIGH 2494 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||
#define V5_LOW 2434 //5V low level (LED power rolled back to stay above this limit)
|
||||
#define V5_CAT 2206 //5V catastrophic level (Host USB port potential to shut down)
|
||||
|
||||
//LED Mapping - More practically generated from a spreadsheet program
|
||||
//id: ID of the LED (Sync with PCB callouts)
|
||||
@ -58,7 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//swr: Matrix wiring SW Red row (1-12)
|
||||
//swg: Matrix wiring SW Green row (1-12)
|
||||
//swb: Matrix wiring SW Blue row (1-12)
|
||||
//scan: Associated key scancode if any
|
||||
//scan: Associated key matrix scancode (set 255 if none or 254 for LED to turn off in alternating mode)
|
||||
//Note: Origin 0,0 may be located anywhere as the software will do the final layout
|
||||
#define ISSI3733_LED_MAP { \
|
||||
{ .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
|
||||
@ -129,46 +129,45 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
{ .id = 66, .x = 10.5, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 8, .swg = 7, .swb = 9 }, .scan = 73 }, \
|
||||
{ .id = 67, .x = 11.25, .y = -3, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 74 }, \
|
||||
{ .id = 68, .x = -0.338, .y = -3.338, .adr = { .drv = 2, .cs = 11, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 69, .x = 0.39, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 69, .x = 0.39, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
|
||||
{ .id = 70, .x = 1.263, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 71, .x = 2.135, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 71, .x = 2.135, .y = -3.443, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 72, .x = 3.008, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 73, .x = 3.88, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 73, .x = 3.88, .y = -3.443, .adr = { .drv = 2, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
{ .id = 74, .x = 4.753, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 75, .x = 5.625, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 75, .x = 5.625, .y = -3.443, .adr = { .drv = 2, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
|
||||
{ .id = 76, .x = 6.497, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 77, .x = 7.37, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 77, .x = 7.37, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
{ .id = 78, .x = 8.242, .y = -3.443, .adr = { .drv = 1, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 79, .x = 9.115, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 79, .x = 9.115, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 80, .x = 9.987, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 81, .x = 10.86, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 81, .x = 10.86, .y = -3.443, .adr = { .drv = 1, .cs = 13, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
{ .id = 82, .x = 11.588, .y = -3.338, .adr = { .drv = 1, .cs = 13, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 83, .x = 11.693, .y = -2.623, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 83, .x = 11.693, .y = -2.623, .adr = { .drv = 1, .cs = 12, .swr = 11, .swg = 10, .swb = 12 }, .scan = 254 }, \
|
||||
{ .id = 84, .x = 11.693, .y = -1.873, .adr = { .drv = 1, .cs = 8, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 85, .x = 11.693, .y = -1.123, .adr = { .drv = 1, .cs = 8, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 86, .x = 11.693, .y = -0.373, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 86, .x = 11.693, .y = -0.373, .adr = { .drv = 1, .cs = 8, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
{ .id = 87, .x = 11.588, .y = 0.338, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 88, .x = 9.908, .y = 0.443, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 89, .x = 9.288, .y = 0.443, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 89, .x = 9.288, .y = 0.443, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 90, .x = 8.625, .y = 0.443, .adr = { .drv = 1, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 91, .x = 7.875, .y = 0.443, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 91, .x = 7.875, .y = 0.443, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 92, .x = 7.125, .y = 0.443, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 93, .x = 6.375, .y = 0.443, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 93, .x = 6.375, .y = 0.443, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 94, .x = 5.625, .y = 0.443, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 95, .x = 4.875, .y = 0.443, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 95, .x = 4.875, .y = 0.443, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 96, .x = 4.125, .y = 0.443, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 97, .x = 3.375, .y = 0.443, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 97, .x = 3.375, .y = 0.443, .adr = { .drv = 2, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 98, .x = 2.625, .y = 0.443, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 99, .x = 1.875, .y = 0.443, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 99, .x = 1.875, .y = 0.443, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 100, .x = 1.125, .y = 0.443, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 101, .x = -0.338, .y = 0.338, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 102, .x = -0.443, .y = -0.373, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 102, .x = -0.443, .y = -0.373, .adr = { .drv = 2, .cs = 1, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
{ .id = 103, .x = -0.443, .y = -1.123, .adr = { .drv = 2, .cs = 1, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 104, .x = -0.443, .y = -1.873, .adr = { .drv = 2, .cs = 1, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 105, .x = -0.443, .y = -2.623, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 105, .x = -0.443, .y = -2.623, .adr = { .drv = 2, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 254 }, \
|
||||
};
|
||||
|
||||
|
||||
#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
|
||||
#ifdef USB_LED_INDICATOR_ENABLE //Scan codes refer to actual key matrix codes, not KC_* (255 to disable)
|
||||
#define USB_LED_NUM_LOCK_SCANCODE 255
|
||||
|
42
keyboards/massdrop/alt/config_spi.h
Normal file
42
keyboards/massdrop/alt/config_spi.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Data structure to define Shift Register output expander hardware */
|
||||
/* This structure gets shifted into registers LSB first */
|
||||
typedef union {
|
||||
struct {
|
||||
uint16_t RSVD4:1; /*!< bit: 0 */
|
||||
uint16_t RSVD3:1; /*!< bit: 1 */
|
||||
uint16_t RSVD2:1; /*!< bit: 2 */
|
||||
uint16_t RSVD1:1; /*!< bit: 3 */
|
||||
uint16_t SDB_N:1; /*!< bit: 4 SHUTDOWN IS31FL3733 CHIPS WHEN 0, RUN WHEN 1 */
|
||||
uint16_t IRST:1; /*!< bit: 5 RESET IS31FL3733 I2C WHEN 1, RUN WHEN 0 */
|
||||
uint16_t SRC_2:1; /*!< bit: 6 ADVERTISE A SOURCE TO USBC-2 CC */
|
||||
uint16_t SRC_1:1; /*!< bit: 7 ADVERTISE A SOURCE TO USBC-1 CC */
|
||||
uint16_t E_VBUS_2:1; /*!< bit: 8 ENABLE 5V OUT TO USBC-2 WHEN 1 */
|
||||
uint16_t E_VBUS_1:1; /*!< bit: 9 ENABLE 5V OUT TO USBC-1 WHEN 1 */
|
||||
uint16_t E_DN1_N:1; /*!< bit: 10 ENABLE DN1 1:2 MUX WHEN 0 */
|
||||
uint16_t S_DN1:1; /*!< bit: 11 SELECT DN1 PATH 0:USBC-1, 1:USBC-2 */
|
||||
uint16_t E_UP_N:1; /*!< bit: 12 ENABLE SUP 1:2 MUX WHEN 0 */
|
||||
uint16_t S_UP:1; /*!< bit: 13 SELECT UP PATH 0:USBC-1, 1:USBC-2 */
|
||||
uint16_t HUB_RESET_N:1; /*!< bit: 14 RESET USB HUB WHEN 0, RUN WHEN 1 */
|
||||
uint16_t HUB_CONNECT:1; /*!< bit: 15 SIGNAL VBUS CONNECT TO USB HUB WHEN 1 */
|
||||
} bit; /*!< Structure used for bit access */
|
||||
uint16_t reg; /*!< Type used for register access */
|
||||
} sr_exp_t;
|
28
keyboards/massdrop/alt/config_usb.h
Normal file
28
keyboards/massdrop/alt/config_usb.h
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
//Macros to Enable, Disable, and Update USB 5V bus connections
|
||||
#define USBC_CFG_5V1_VAR sr_exp_data.bit.E_VBUS_1 //Variable storing USBC-1 5V Bus state
|
||||
#define USBC_CFG_5V1_ENA 1 //Value to enable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V1_DIS 0 //Value to disable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V1_UPDATE SR_EXP_WriteData() //Command to run to update value
|
||||
#define USBC_CFG_5V2_VAR sr_exp_data.bit.E_VBUS_2 //Variable storing USBC-2 5V Bus state
|
||||
#define USBC_CFG_5V2_ENA 1 //Value to enable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V2_DIS 0 //Value to disable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V2_UPDATE SR_EXP_WriteData() //Command to run to update value
|
@ -1,8 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum alt_keycodes {
|
||||
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
U_T_AGCR = SAFE_RANGE, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
@ -24,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
@ -56,11 +55,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
|
||||
switch (keycode) {
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
|
@ -1,8 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum alt_keycodes {
|
||||
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
U_T_AGCR = SAFE_RANGE, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
@ -24,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
@ -56,11 +55,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
|
||||
switch (keycode) {
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
@ -90,7 +84,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
@ -125,3 +119,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true; //Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
led_instruction_t led_instructions[] = {
|
||||
{ .end = 1 }
|
||||
};
|
||||
|
@ -1,24 +1,28 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum alt_keycodes {
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase //Working
|
||||
L_BRD, //LED Brightness Decrease //Working
|
||||
L_PTN, //LED Pattern Select Next //Working
|
||||
L_PTP, //LED Pattern Select Previous //Working
|
||||
L_PSI, //LED Pattern Speed Increase //Working
|
||||
L_PSD, //LED Pattern Speed Decrease //Working
|
||||
L_T_MD, //LED Toggle Mode //Working
|
||||
L_T_ONF, //LED Toggle On / Off //Broken
|
||||
L_ON, //LED On //Broken
|
||||
L_OFF, //LED Off //Broken
|
||||
L_T_BR, //LED Toggle Breath Effect //Working
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction //Working
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control //Working
|
||||
DBG_TOG, //DEBUG Toggle On / Off //
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints //
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints //
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints //
|
||||
MD_BOOT //Restart into bootloader after hold timeout //Working
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||
L_BRD, //LED Brightness Decrease
|
||||
L_EDG_I, //LED Edge Brightness Increase
|
||||
L_EDG_D, //LED Edge Brightness Decrease
|
||||
L_EDG_M, //LED Edge lighting mode
|
||||
L_PTN, //LED Pattern Select Next
|
||||
L_PTP, //LED Pattern Select Previous
|
||||
L_PSI, //LED Pattern Speed Increase
|
||||
L_PSD, //LED Pattern Speed Decrease
|
||||
L_T_MD, //LED Toggle Mode
|
||||
L_T_ONF, //LED Toggle On / Off
|
||||
L_ON, //LED On
|
||||
L_OFF, //LED Off
|
||||
L_T_BR, //LED Toggle Breath Effect
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction and effect
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||
DBG_FAC, //DEBUG Factory light testing (All on white)
|
||||
MD_BOOT //Restart into bootloader after hold timeout
|
||||
};
|
||||
|
||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||
@ -35,10 +39,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, L_EDG_I, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, L_EDG_D, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, L_T_MD, L_T_ONF, _______, L_EDG_M, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, DBG_FAC, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
),
|
||||
/*
|
||||
[X] = LAYOUT(
|
||||
@ -59,12 +63,13 @@ void matrix_init_user(void) {
|
||||
void matrix_scan_user(void) {
|
||||
};
|
||||
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
static uint8_t scroll_effect = 0;
|
||||
|
||||
switch (keycode) {
|
||||
case L_BRI:
|
||||
@ -81,6 +86,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
return false;
|
||||
case L_EDG_M:
|
||||
if (record->event.pressed) {
|
||||
led_edge_mode++;
|
||||
if (led_edge_mode > LED_EDGE_MODE_MAX) {
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case L_EDG_I:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
return false;
|
||||
case L_EDG_D:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
return false;
|
||||
case L_PTN:
|
||||
if (record->event.pressed) {
|
||||
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||
@ -112,20 +137,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_ONF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = !led_enabled;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(!I2C3733_Control_Get());
|
||||
}
|
||||
return false;
|
||||
case L_ON:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 1;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case L_OFF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 0;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(0);
|
||||
}
|
||||
return false;
|
||||
case L_T_BR:
|
||||
@ -140,7 +162,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_PTD:
|
||||
if (record->event.pressed) {
|
||||
led_animation_direction = !led_animation_direction;
|
||||
scroll_effect++;
|
||||
if (scroll_effect == 1) { //Patterns with scroll move horizontal (Right to left)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 2) { //Patterns with scroll move vertical (Top to bottom)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 3) { //Patterns with scroll move vertical (Bottom to top)
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 4) { //Patterns with scroll explode from center
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else if (scroll_effect == 5) { //Patterns with scroll implode on center
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else { //Patterns with scroll move horizontal (Left to right)
|
||||
scroll_effect = 0;
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
@ -148,6 +196,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
}
|
||||
return false;
|
||||
case DBG_FAC:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
led_lighting_mode = LED_MODE_NORMAL;
|
||||
led_edge_brightness = 1;
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
led_animation_breathing = 0;
|
||||
led_animation_id = 7; //led_programs.c led_setups leds_white index
|
||||
gcr_desired = LED_GCR_MAX;
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case DBG_TOG:
|
||||
if (record->event.pressed) {
|
||||
TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
|
||||
@ -172,7 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum alt_keycodes {
|
||||
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
U_T_AGCR = SAFE_RANGE, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
@ -24,7 +23,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, DBG_TOG, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
@ -56,11 +55,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
|
||||
switch (keycode) {
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
@ -90,7 +84,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
@ -125,3 +119,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true; //Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
led_instruction_t led_instructions[] = {
|
||||
{ .end = 1 }
|
||||
};
|
||||
|
@ -1,24 +1,28 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum alt_keycodes {
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase //Working
|
||||
L_BRD, //LED Brightness Decrease //Working
|
||||
L_PTN, //LED Pattern Select Next //Working
|
||||
L_PTP, //LED Pattern Select Previous //Working
|
||||
L_PSI, //LED Pattern Speed Increase //Working
|
||||
L_PSD, //LED Pattern Speed Decrease //Working
|
||||
L_T_MD, //LED Toggle Mode //Working
|
||||
L_T_ONF, //LED Toggle On / Off //Broken
|
||||
L_ON, //LED On //Broken
|
||||
L_OFF, //LED Off //Broken
|
||||
L_T_BR, //LED Toggle Breath Effect //Working
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction //Working
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control //Working
|
||||
DBG_TOG, //DEBUG Toggle On / Off //
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints //
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints //
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints //
|
||||
MD_BOOT //Restart into bootloader after hold timeout //Working
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||
L_BRD, //LED Brightness Decrease
|
||||
L_EDG_I, //LED Edge Brightness Increase
|
||||
L_EDG_D, //LED Edge Brightness Decrease
|
||||
L_EDG_M, //LED Edge lighting mode
|
||||
L_PTN, //LED Pattern Select Next
|
||||
L_PTP, //LED Pattern Select Previous
|
||||
L_PSI, //LED Pattern Speed Increase
|
||||
L_PSD, //LED Pattern Speed Decrease
|
||||
L_T_MD, //LED Toggle Mode
|
||||
L_T_ONF, //LED Toggle On / Off
|
||||
L_ON, //LED On
|
||||
L_OFF, //LED Off
|
||||
L_T_BR, //LED Toggle Breath Effect
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction and effect
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||
DBG_FAC, //DEBUG Factory light testing (All on white)
|
||||
MD_BOOT //Restart into bootloader after hold timeout
|
||||
};
|
||||
|
||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||
@ -35,10 +39,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, L_EDG_I, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, L_EDG_D, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU, \
|
||||
_______, L_T_MD, L_T_ONF, _______, L_EDG_M, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_PGUP, KC_VOLD, \
|
||||
_______, _______, _______, DBG_FAC, _______, _______, KC_HOME, KC_PGDN, KC_END \
|
||||
),
|
||||
/*
|
||||
[X] = LAYOUT(
|
||||
@ -59,12 +63,13 @@ void matrix_init_user(void) {
|
||||
void matrix_scan_user(void) {
|
||||
};
|
||||
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
static uint8_t scroll_effect = 0;
|
||||
|
||||
switch (keycode) {
|
||||
case L_BRI:
|
||||
@ -81,6 +86,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
return false;
|
||||
case L_EDG_M:
|
||||
if (record->event.pressed) {
|
||||
led_edge_mode++;
|
||||
if (led_edge_mode > LED_EDGE_MODE_MAX) {
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case L_EDG_I:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
return false;
|
||||
case L_EDG_D:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
return false;
|
||||
case L_PTN:
|
||||
if (record->event.pressed) {
|
||||
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||
@ -112,20 +137,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_ONF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = !led_enabled;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(!I2C3733_Control_Get());
|
||||
}
|
||||
return false;
|
||||
case L_ON:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 1;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case L_OFF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 0;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(0);
|
||||
}
|
||||
return false;
|
||||
case L_T_BR:
|
||||
@ -140,7 +162,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_PTD:
|
||||
if (record->event.pressed) {
|
||||
led_animation_direction = !led_animation_direction;
|
||||
scroll_effect++;
|
||||
if (scroll_effect == 1) { //Patterns with scroll move horizontal (Right to left)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 2) { //Patterns with scroll move vertical (Top to bottom)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 3) { //Patterns with scroll move vertical (Bottom to top)
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 4) { //Patterns with scroll explode from center
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else if (scroll_effect == 5) { //Patterns with scroll implode on center
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else { //Patterns with scroll move horizontal (Left to right)
|
||||
scroll_effect = 0;
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
@ -148,6 +196,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
}
|
||||
return false;
|
||||
case DBG_FAC:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
led_lighting_mode = LED_MODE_NORMAL;
|
||||
led_edge_brightness = 1;
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
led_animation_breathing = 0;
|
||||
led_animation_id = 7; //led_programs.c led_setups leds_white index
|
||||
gcr_desired = LED_GCR_MAX;
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case DBG_TOG:
|
||||
if (record->event.pressed) {
|
||||
TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
|
||||
@ -172,7 +231,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,6 @@ enum alt_keycodes {
|
||||
L_OFF, //LED Off
|
||||
L_T_BR, //LED Toggle Breath Effect
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction
|
||||
U_T_AUTO, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
@ -38,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_MUTE, \
|
||||
_______, _______, _______, KC_UP, _______, _______, _______, U_T_AUTO,U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, _______, _______, KC_UP, _______, _______, _______, _______, U_T_AGCR,_______, KC_PSCR, KC_SLCK, KC_PAUS, _______, KC_END, \
|
||||
_______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, KC_VOLU, _______, \
|
||||
_______, _______, _______, KC_MPLY, MO(2), _______, KC_MRWD, KC_VOLD, KC_MFFD \
|
||||
@ -146,11 +145,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
led_animation_direction = !led_animation_direction;
|
||||
}
|
||||
return false;
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2018 Massdrop Inc.
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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
|
||||
@ -22,6 +22,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "clks.h"
|
||||
#include <string.h>
|
||||
|
||||
#define MCU_PORTS_USED 2 //PA, PB
|
||||
|
||||
matrix_row_t mlatest[MATRIX_ROWS];
|
||||
matrix_row_t mlast[MATRIX_ROWS];
|
||||
matrix_row_t mdebounced[MATRIX_ROWS];
|
||||
@ -30,7 +32,7 @@ uint8_t row_ports[] = { MATRIX_ROW_PORTS };
|
||||
uint8_t row_pins[] = { MATRIX_ROW_PINS };
|
||||
uint8_t col_ports[] = { MATRIX_COL_PORTS };
|
||||
uint8_t col_pins[] = { MATRIX_COL_PINS };
|
||||
uint32_t row_masks[2]; //NOTE: If more than PA PB used in the future, adjust code to accomodate
|
||||
uint32_t row_masks[MCU_PORTS_USED]; //Array size must match number of unique MCU ports used for reads (PA, PB, PC, etc)
|
||||
|
||||
__attribute__ ((weak))
|
||||
void matrix_init_kb(void) {
|
||||
@ -56,9 +58,9 @@ void matrix_init(void)
|
||||
memset(mlast, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||
memset(mdebounced, 0, MATRIX_ROWS * sizeof(matrix_row_t));
|
||||
|
||||
row_masks[PA] = 0;
|
||||
row_masks[PB] = 0;
|
||||
memset(row_masks, 0, sizeof(row_masks));
|
||||
|
||||
//Inputs
|
||||
uint8_t row;
|
||||
for (row = 0; row < MATRIX_ROWS; row++)
|
||||
{
|
||||
@ -69,6 +71,7 @@ void matrix_init(void)
|
||||
row_masks[row_ports[row]] |= 1 << row_pins[row]; //Add pin to proper row mask
|
||||
}
|
||||
|
||||
//Outputs
|
||||
uint8_t col;
|
||||
for (col = 0; col < MATRIX_COLS; col++)
|
||||
{
|
||||
@ -80,27 +83,29 @@ void matrix_init(void)
|
||||
}
|
||||
|
||||
uint64_t mdebouncing = 0;
|
||||
bool debouncing = false;
|
||||
|
||||
uint8_t matrix_scan(void)
|
||||
{
|
||||
uint8_t mchanged;
|
||||
uint64_t timer;
|
||||
uint8_t row;
|
||||
uint8_t col;
|
||||
uint32_t scans[2]; //PA PB
|
||||
|
||||
if (timer_read64() < mdebouncing) return 1; //mdebouncing == 0 when no debouncing active
|
||||
uint32_t scans[MCU_PORTS_USED]; //Array size must match number of unique MCU ports used for reads (PA, PB, PC, etc)
|
||||
|
||||
memset(mlatest, 0, MATRIX_ROWS * sizeof(matrix_row_t)); //Zero the result buffer
|
||||
|
||||
for (col = 0; col < MATRIX_COLS; col++)
|
||||
{
|
||||
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
|
||||
//Set output
|
||||
PORT->Group[col_ports[col]].OUTSET.reg = 1 << col_pins[col]; //Set col output
|
||||
wait_us(1); //Delay for output
|
||||
|
||||
wait_us(1); //Delay for output
|
||||
//Read input (add unique ports as needed, PA, PB, PC, etc)
|
||||
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
|
||||
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PA row pins data
|
||||
|
||||
scans[PA] = PORT->Group[PA].IN.reg & row_masks[PA]; //Read PA row pins data
|
||||
scans[PB] = PORT->Group[PB].IN.reg & row_masks[PB]; //Read PB row pins data
|
||||
|
||||
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
|
||||
//Clear output
|
||||
PORT->Group[col_ports[col]].OUTCLR.reg = 1 << col_pins[col]; //Clear col output
|
||||
|
||||
for (row = 0; row < MATRIX_ROWS; row++)
|
||||
{
|
||||
@ -110,25 +115,26 @@ uint8_t matrix_scan(void)
|
||||
}
|
||||
}
|
||||
|
||||
mchanged = 0; //Default to no matrix change since last
|
||||
timer = timer_read64();
|
||||
|
||||
for (row = 0; row < MATRIX_ROWS; row++)
|
||||
{
|
||||
if (mlast[row] != mlatest[row])
|
||||
mchanged = 1;
|
||||
if (mlast[row] != mlatest[row]) {
|
||||
debouncing = true;
|
||||
mdebouncing = timer + DEBOUNCE;
|
||||
}
|
||||
|
||||
mlast[row] = mlatest[row];
|
||||
}
|
||||
|
||||
if (!mchanged)
|
||||
if (debouncing && timer >= mdebouncing)
|
||||
{
|
||||
for (row = 0; row < MATRIX_ROWS; row++)
|
||||
for (row = 0; row < MATRIX_ROWS; row++) {
|
||||
mdebounced[row] = mlatest[row];
|
||||
}
|
||||
|
||||
mdebouncing = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
//Begin or extend debounce on change
|
||||
mdebouncing = timer_read64() + DEBOUNCE;
|
||||
debouncing = false;
|
||||
}
|
||||
|
||||
matrix_scan_quantum();
|
||||
|
@ -1,6 +1,8 @@
|
||||
# project specific files
|
||||
SRC = matrix.c
|
||||
SRC += config_led.c
|
||||
SRC += spi.c
|
||||
SRC += usb.c
|
||||
|
||||
#For platform and packs
|
||||
ARM_ATSAM = SAMD51J18A
|
||||
|
57
keyboards/massdrop/alt/spi.c
Normal file
57
keyboards/massdrop/alt/spi.c
Normal file
@ -0,0 +1,57 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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 "arm_atsam_protocol.h"
|
||||
|
||||
void SR_EXP_Init_kb(void) {
|
||||
/* Initialize shift register */
|
||||
SR_EXP_OE_N_DIS;
|
||||
SR_EXP_RCLK_HI;
|
||||
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.DORD = 1; //Data Order - LSB is transferred first
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.CPOL = 1; //Clock Polarity - SCK high when idle. Leading edge of cycle is falling. Trailing rising.
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.CPHA = 1; //Clock Phase - Leading Edge Falling, change, Trailing Edge - Rising, sample
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.DIPO = 3; //Data In Pinout - SERCOM PAD[3] is used as data input (Configure away from DOPO. Not using input.)
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.DOPO = 0; //Data Output PAD[0], Serial Clock PAD[1]
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.MODE = 3; //Operating Mode - Master operation
|
||||
|
||||
SR_EXP_SERCOM->SPI.CTRLA.bit.ENABLE = 1; //Enable - Peripheral is enabled or being enabled
|
||||
while (SR_EXP_SERCOM->SPI.SYNCBUSY.bit.ENABLE) { DBGC(DC_SPI_EXP_SYNC_ENABLING); }
|
||||
|
||||
/* Set default shift register values */
|
||||
sr_exp_data.reg = 0; //Clear data register
|
||||
sr_exp_data.bit.HUB_CONNECT = 0; //USB Hub disconnected
|
||||
sr_exp_data.bit.HUB_RESET_N = 0; //USB Hub in reset state
|
||||
|
||||
sr_exp_data.bit.SRC_1 = 1; //Set CON1 CC A5/B5 as Rd 5.1k
|
||||
sr_exp_data.bit.SRC_2 = 1; //Set CON2 CC A5/B5 as Rd 5.1k
|
||||
sr_exp_data.bit.S_UP = 0; //Default USB data to CON1
|
||||
sr_exp_data.bit.E_UP_N = 1; //Disable HOST
|
||||
sr_exp_data.bit.S_DN1 = 1; //Default EXTRA port to CON2
|
||||
sr_exp_data.bit.E_DN1_N = 1; //Disable EXTRA
|
||||
|
||||
sr_exp_data.bit.E_VBUS_1 = 0; //Disable CON1 5V
|
||||
sr_exp_data.bit.E_VBUS_2 = 0; //Disable CON2 5V
|
||||
sr_exp_data.bit.IRST = 1; //LED drivers I2C in reset
|
||||
sr_exp_data.bit.SDB_N = 0; //LED drivers in shutdown
|
||||
|
||||
/* Write shift register data */
|
||||
SR_EXP_WriteData();
|
||||
|
||||
/* Enable shift register output */
|
||||
SR_EXP_OE_N_ENA;
|
||||
}
|
83
keyboards/massdrop/alt/usb.c
Normal file
83
keyboards/massdrop/alt/usb.c
Normal file
@ -0,0 +1,83 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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 "arm_atsam_protocol.h"
|
||||
|
||||
//Note: rp_best_index not used
|
||||
void usb_set_host_kb(uint8_t con, uint8_t rp_best_index) {
|
||||
if (con == 1) {
|
||||
sr_exp_data.bit.S_UP = 0; //HOST to USBC-1
|
||||
sr_exp_data.bit.S_DN1 = 1; //EXTRA to USBC-2
|
||||
g_usb_host_port = USB_HOST_PORT_1; //Save host port
|
||||
sr_exp_data.bit.E_VBUS_1 = 1; //Enable CON1 5V
|
||||
SR_EXP_WriteData(); //Update port configuration
|
||||
} else if (con == 2) {
|
||||
sr_exp_data.bit.S_DN1 = 0; //HOST to USBC-2
|
||||
sr_exp_data.bit.S_UP = 1; //EXTRA to USBC-1
|
||||
g_usb_host_port = USB_HOST_PORT_2; //Save host port
|
||||
sr_exp_data.bit.E_VBUS_2 = 1; //Enable CON2 5V
|
||||
SR_EXP_WriteData(); //Update port configuration
|
||||
}
|
||||
}
|
||||
|
||||
void usb_set_extra_kb(uint8_t con) {
|
||||
if (con == 1) {
|
||||
sr_exp_data.bit.SRC_1 = 0; //Set CON1 CC A5/B5 as Rp 56k
|
||||
sr_exp_data.bit.E_VBUS_1 = 0; //Disable CON1 5V
|
||||
SR_EXP_WriteData(); //Update port configuration
|
||||
} else if (con == 2) {
|
||||
sr_exp_data.bit.SRC_2 = 0; //Set CON2 CC A5/B5 as Rp 56k
|
||||
sr_exp_data.bit.E_VBUS_2 = 0; //Disable CON2 5V
|
||||
SR_EXP_WriteData(); //Update port configuration
|
||||
}
|
||||
}
|
||||
|
||||
void usb_init_host_detection_kb(void) {
|
||||
//Disable 5V
|
||||
sr_exp_data.bit.E_VBUS_1 = 0; //Disable CON1 5V
|
||||
sr_exp_data.bit.E_VBUS_2 = 0; //Disable CON2 5V
|
||||
|
||||
//Configure default paths
|
||||
sr_exp_data.bit.S_UP = 0; //HOST to USBC-1
|
||||
sr_exp_data.bit.S_DN1 = 1; //EXTRA to USBC-2
|
||||
|
||||
//Configure CC lines
|
||||
sr_exp_data.bit.SRC_1 = 1; //Set CON1 CC A5/B5 as Rd 5.1k
|
||||
sr_exp_data.bit.SRC_2 = 1; //Set CON2 CC A5/B5 as Rd 5.1k
|
||||
|
||||
//Enable ports
|
||||
sr_exp_data.bit.E_UP_N = 0; //Enable HOST for use
|
||||
sr_exp_data.bit.E_DN1_N = 0; //Enable EXTRA for use
|
||||
|
||||
SR_EXP_WriteData(); //Update port configuration
|
||||
}
|
||||
|
||||
//Return 1 if configuration successful
|
||||
//Return 0 otherwise
|
||||
uint8_t usb_attach_port_configure_kb(uint8_t g_usb_host_port, uint16_t usbc_cc_a5_v, uint16_t usbc_cc_b5_v) {
|
||||
if (USB_HOST_IS_1(g_usb_host_port)) { //If host is port 1
|
||||
//Set up port 2
|
||||
usb_set_extra_kb(2);
|
||||
return 1;
|
||||
} else if (USB_HOST_IS_2(g_usb_host_port)) { //If host is on port 2
|
||||
//Set up port 1
|
||||
usb_set_extra_kb(1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -54,7 +54,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define SR_EXP_OE_N_PIN 15
|
||||
/* SERCOM port to use for Shift Register SPI */
|
||||
/* DATAOUT and SCLK must be configured to use hardware pins of this port */
|
||||
#define SR_EXP_SERCOM SERCOM2
|
||||
#define SR_EXP_SERCOM_NUM 2
|
||||
/* Shift Register SPI Data Out configuration (MCU.SERCOMx.PAD[0] to ShiftRegister.SER) */
|
||||
#define SR_EXP_DATAOUT_PORT PA
|
||||
#define SR_EXP_DATAOUT_PIN 12
|
||||
@ -94,6 +94,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
// Required BOOT key hold time (in ms) for restarting to bootloader -PS081419
|
||||
#define BOOTKEY_HOLD_MS 2000
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
//#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
|
75
keyboards/massdrop/ctrl/config_adc.h
Normal file
75
keyboards/massdrop/ctrl/config_adc.h
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
//ADC configuration table column indices
|
||||
#define ADC_PORT 0
|
||||
#define ADC_PIN 1
|
||||
#define ADC_MUX 2
|
||||
#define ADC_INDEX 3
|
||||
#define ADC_MUXPOS 4
|
||||
#define ADC_REFSEL 5
|
||||
#define ADC_SAMPLENUM 6
|
||||
#define ADC_SAMPLEN 7
|
||||
|
||||
//ADC configuration table row indices
|
||||
#define ADC_5V 0 //5V bus voltage
|
||||
#define ADC_C1A5 1 //Connector 1 A5 CC voltage
|
||||
#define ADC_C1B5 2 //Connector 1 B5 CC voltage
|
||||
#define ADC_C2A5 3 //Connector 2 A5 CC voltage
|
||||
#define ADC_C2B5 4 //Connector 2 B5 CC voltage
|
||||
#define ADC_C1I 5 //Connector 1 current
|
||||
#define ADC_C2I 6 //Connector 2 current
|
||||
|
||||
//ADC_PORT: PORT of the PIN on the MCU (Ex: 0 = PA, 1 = PB, ...)
|
||||
// Set ADC_PORT to ADC_NA if it is not available for use
|
||||
//ADC_PIN: PIN on the MCU (Ex: 0 = 00, 1 = 01, 12 = 12, ...)
|
||||
//ADC_MUX: PMUX setting for the MCU PIN (Ex: 0 = A, 1 = B, 2 = C, ...)
|
||||
//ADC_INDEX: ADC to use (Ex: 0 = ADC0, 1 = ADC1, ...)
|
||||
//ADC_MUXPOS: MUXPOS setting to read on the ADC (Use macros from Atmel library adc.h ADC_INPUTCTRL_MUXPOS_AIN*_Val)
|
||||
//ADC_REFSEL: Reference the ADC is to use (Use macros from Atmel library adc.h ADC_REFCTRL_REFSEL_*_Val)
|
||||
//ADC_SAMPLENUM: Number of samples to average for output (Use macros from Atmel library adc.h ADC_AVGCTRL_SAMPLENUM_*_Val)
|
||||
//ADC_SAMPLEN: Sampling time for each sample in units of CLK_ADC cycles depending on the ADC clock frequency
|
||||
// ADC_PORT ADC_MUX
|
||||
// | ADC_PIN | ADC_INDEX
|
||||
// | | | | ADC_MUXPOS ADC_REFSEL ADC_SAMPLENUM ADC_SAMPLEN
|
||||
#define ADC_CONFIG_5V 1, 0, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN12_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_4_Val, 45
|
||||
#define ADC_CONFIG_C1A5 1, 2, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN14_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_16_Val, 63
|
||||
#define ADC_CONFIG_C1B5 ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C2A5 1, 1, 1, 0, ADC_INPUTCTRL_MUXPOS_AIN13_Val, ADC_REFCTRL_REFSEL_INTREF_Val, ADC_AVGCTRL_SAMPLENUM_16_Val, 63
|
||||
#define ADC_CONFIG_C2B5 ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C1I ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
#define ADC_CONFIG_C2I ADC_NA, 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
//Conversion values dependant upon the circuitry
|
||||
#define ADC_5V_VOLTS_PER_COUNT 0.001904297f
|
||||
#define ADC_5V_VOLTS_OFFSET 0.0f
|
||||
#define ADC_5V_NOMINAL 5.0f
|
||||
#define ADC_5V_NOMINAL_COUNTS (ADC_5V_NOMINAL / ADC_5V_VOLTS_PER_COUNT)
|
||||
|
||||
//Conversion macros
|
||||
#define ADC_5V_C2V(icounts) ((float)icounts * ADC_5V_VOLTS_PER_COUNT + ADC_5V_VOLTS_OFFSET) //Converts 5V Bus counts to volts
|
||||
#define ADC_5V_V2C(v) (((float)v - ADC_5V_VOLTS_OFFSET) / ADC_5V_VOLTS_PER_COUNT) //Converts 5V Bus volts to counts
|
||||
#define ADC_CC_5VCOR(v5counts, cc) ((float)v5counts == 0 ? 0 : ADC_5V_NOMINAL_COUNTS / (float)v5counts * (float)cc) //Corrects CC counts to nominal 5V value
|
||||
|
||||
#define ADC_USBC_EXTRA_NOMINAL 850 //Nominal ADC value for detection of connected device
|
||||
|
||||
#define USBC_IS_SINK(a5, b5) (a5 < ADC_USBC_EXTRA_NOMINAL || b5 < ADC_USBC_EXTRA_NOMINAL)
|
||||
|
||||
#define POWER_CHECK_INTERVAL 1 //How often to check power usage for adjustment and safety (ms)
|
||||
#define V_5V_AVGS 50 //Number of 5V readings to average for algorithms wanting stable readings rather than instantaneous
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
Copyright 2018 Massdrop Inc.
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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
|
||||
@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
//Define number of ISSI3733 drivers being used (1...16)
|
||||
//Define number of IS31FL3733 drivers being used (1...16)
|
||||
#define ISSI3733_DRIVER_COUNT 2
|
||||
#define DRIVER_LED_TOTAL ISSI3733_LED_COUNT
|
||||
|
||||
//Hardware address of each driver (Refer to ISSI3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||
//Hardware address of each driver (Refer to IS31FL3733 pdf "Table 1 Slave Address" and keyboard schematic)
|
||||
#define ISSI3773_DRIVER_ADDRESSES { 0xA0, 0xBE }
|
||||
|
||||
//LED I2C bus speed
|
||||
@ -45,9 +45,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define ISSI3733_GCR_DEFAULT LED_GCR_MAX
|
||||
|
||||
//Automatic power rollback and recovery
|
||||
#define V5_HIGH 2540 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||
#define V5_LOW 2480 //5V low level (LED power rolled back to stay above this limit)
|
||||
#define V5_CAT 2200 //5V catastrophic level (Host USB port potential to shut down)
|
||||
#define V5_HIGH 2494 //5V high level (After low power detect, point at which LEDs are allowed to use more power )
|
||||
#define V5_LOW 2434 //5V low level (LED power rolled back to stay above this limit)
|
||||
#define V5_CAT 2206 //5V catastrophic level (Host USB port potential to shut down)
|
||||
|
||||
//LED Mapping - More practically generated from a spreadsheet program
|
||||
//id: ID of the LED (Sync with PCB callouts)
|
||||
@ -58,7 +58,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
//swr: Matrix wiring SW Red row (1-12)
|
||||
//swg: Matrix wiring SW Green row (1-12)
|
||||
//swb: Matrix wiring SW Blue row (1-12)
|
||||
//scan: Associated key scancode if any
|
||||
//scan: Associated key matrix scancode (set 255 if none or 254 for LED to turn off in alternating mode)
|
||||
//Note: Origin 0,0 may be located anywhere as the software will do the final layout
|
||||
#define ISSI3733_LED_MAP { \
|
||||
{ .id = 1, .x = 0, .y = 0, .adr = { .drv = 2, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 0 }, \
|
||||
@ -149,37 +149,37 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
{ .id = 86, .x = 12.375, .y = -4.125, .adr = { .drv = 1, .cs = 12, .swr = 5, .swg = 4, .swb = 6 }, .scan = 85 }, \
|
||||
{ .id = 87, .x = 13.125, .y = -4.125, .adr = { .drv = 1, .cs = 11, .swr = 5, .swg = 4, .swb = 6 }, .scan = 86 }, \
|
||||
{ .id = 88, .x = 13.433, .y = -4.43, .adr = { .drv = 1, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 89, .x = 12.285, .y = -4.535, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 89, .x = 12.285, .y = -4.535, .adr = { .drv = 1, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 90, .x = 11.14, .y = -4.535, .adr = { .drv = 1, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 91, .x = 9.995, .y = -4.535, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 91, .x = 9.995, .y = -4.535, .adr = { .drv = 1, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 92, .x = 8.85, .y = -4.535, .adr = { .drv = 1, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 93, .x = 7.705, .y = -4.535, .adr = { .drv = 1, .cs = 16, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 93, .x = 7.705, .y = -4.535, .adr = { .drv = 1, .cs = 16, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 94, .x = 6.56, .y = -4.535, .adr = { .drv = 2, .cs = 9, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 95, .x = 5.415, .y = -4.535, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 95, .x = 5.415, .y = -4.535, .adr = { .drv = 2, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 96, .x = 4.27, .y = -4.535, .adr = { .drv = 2, .cs = 11, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 97, .x = 3.125, .y = -4.535, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 97, .x = 3.125, .y = -4.535, .adr = { .drv = 2, .cs = 12, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 98, .x = 1.98, .y = -4.535, .adr = { .drv = 2, .cs = 13, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 99, .x = 0.835, .y = -4.535, .adr = { .drv = 2, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 99, .x = 0.835, .y = -4.535, .adr = { .drv = 2, .cs = 14, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 100, .x = -0.307, .y = -4.43, .adr = { .drv = 2, .cs = 15, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 101, .x = -0.41, .y = -3.245, .adr = { .drv = 2, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 101, .x = -0.41, .y = -3.245, .adr = { .drv = 2, .cs = 15, .swr = 11, .swg = 10, .swb = 12 }, .scan = 254 }, \
|
||||
{ .id = 102, .x = -0.41, .y = -2.06, .adr = { .drv = 2, .cs = 15, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 103, .x = -0.41, .y = -0.875, .adr = { .drv = 2, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 103, .x = -0.41, .y = -0.875, .adr = { .drv = 2, .cs = 15, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
|
||||
{ .id = 104, .x = -0.308, .y = 0.31, .adr = { .drv = 2, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 105, .x = 0.835, .y = 0.415, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 105, .x = 0.835, .y = 0.415, .adr = { .drv = 2, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 106, .x = 1.98, .y = 0.415, .adr = { .drv = 2, .cs = 4, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 107, .x = 3.125, .y = 0.415, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 107, .x = 3.125, .y = 0.415, .adr = { .drv = 2, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 108, .x = 4.27, .y = 0.415, .adr = { .drv = 2, .cs = 7, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 109, .x = 5.415, .y = 0.415, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 109, .x = 5.415, .y = 0.415, .adr = { .drv = 2, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 110, .x = 6.56, .y = 0.415, .adr = { .drv = 1, .cs = 1, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 111, .x = 7.705, .y = 0.415, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 111, .x = 7.705, .y = 0.415, .adr = { .drv = 1, .cs = 2, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 112, .x = 8.85, .y = 0.415, .adr = { .drv = 1, .cs = 3, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 113, .x = 9.995, .y = 0.415, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 113, .x = 9.995, .y = 0.415, .adr = { .drv = 1, .cs = 5, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 114, .x = 11.14, .y = 0.415, .adr = { .drv = 1, .cs = 6, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 115, .x = 12.285, .y = 0.415, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 115, .x = 12.285, .y = 0.415, .adr = { .drv = 1, .cs = 8, .swr = 2, .swg = 1, .swb = 3 }, .scan = 254 }, \
|
||||
{ .id = 116, .x = 13.432, .y = 0.31, .adr = { .drv = 1, .cs = 10, .swr = 2, .swg = 1, .swb = 3 }, .scan = 255 }, \
|
||||
{ .id = 117, .x = 13.535, .y = -0.875, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 255 }, \
|
||||
{ .id = 117, .x = 13.535, .y = -0.875, .adr = { .drv = 1, .cs = 10, .swr = 8, .swg = 7, .swb = 9 }, .scan = 254 }, \
|
||||
{ .id = 118, .x = 13.535, .y = -2.06, .adr = { .drv = 1, .cs = 10, .swr = 11, .swg = 10, .swb = 12 }, .scan = 255 }, \
|
||||
{ .id = 119, .x = 13.535, .y = -3.245, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 255 }, \
|
||||
{ .id = 119, .x = 13.535, .y = -3.245, .adr = { .drv = 1, .cs = 10, .swr = 5, .swg = 4, .swb = 6 }, .scan = 254 }, \
|
||||
};
|
||||
|
||||
#define USB_LED_INDICATOR_ENABLE //Comment out to disable indicator functionality
|
||||
|
42
keyboards/massdrop/ctrl/config_spi.h
Normal file
42
keyboards/massdrop/ctrl/config_spi.h
Normal file
@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Data structure to define Shift Register output expander hardware */
|
||||
/* This structure gets shifted into registers LSB first */
|
||||
typedef union {
|
||||
struct {
|
||||
uint16_t RSVD4:1; /*!< bit: 0 */
|
||||
uint16_t RSVD3:1; /*!< bit: 1 */
|
||||
uint16_t RSVD2:1; /*!< bit: 2 */
|
||||
uint16_t RSVD1:1; /*!< bit: 3 */
|
||||
uint16_t SDB_N:1; /*!< bit: 4 SHUTDOWN IS31FL3733 CHIPS WHEN 0, RUN WHEN 1 */
|
||||
uint16_t IRST:1; /*!< bit: 5 RESET IS31FL3733 I2C WHEN 1, RUN WHEN 0 */
|
||||
uint16_t SRC_2:1; /*!< bit: 6 ADVERTISE A SOURCE TO USBC-2 CC */
|
||||
uint16_t SRC_1:1; /*!< bit: 7 ADVERTISE A SOURCE TO USBC-1 CC */
|
||||
uint16_t E_VBUS_2:1; /*!< bit: 8 ENABLE 5V OUT TO USBC-2 WHEN 1 */
|
||||
uint16_t E_VBUS_1:1; /*!< bit: 9 ENABLE 5V OUT TO USBC-1 WHEN 1 */
|
||||
uint16_t E_DN1_N:1; /*!< bit: 10 ENABLE DN1 1:2 MUX WHEN 0 */
|
||||
uint16_t S_DN1:1; /*!< bit: 11 SELECT DN1 PATH 0:USBC-1, 1:USBC-2 */
|
||||
uint16_t E_UP_N:1; /*!< bit: 12 ENABLE SUP 1:2 MUX WHEN 0 */
|
||||
uint16_t S_UP:1; /*!< bit: 13 SELECT UP PATH 0:USBC-1, 1:USBC-2 */
|
||||
uint16_t HUB_RESET_N:1; /*!< bit: 14 RESET USB HUB WHEN 0, RUN WHEN 1 */
|
||||
uint16_t HUB_CONNECT:1; /*!< bit: 15 SIGNAL VBUS CONNECT TO USB HUB WHEN 1 */
|
||||
} bit; /*!< Structure used for bit access */
|
||||
uint16_t reg; /*!< Type used for register access */
|
||||
} sr_exp_t;
|
28
keyboards/massdrop/ctrl/config_usb.h
Normal file
28
keyboards/massdrop/ctrl/config_usb.h
Normal file
@ -0,0 +1,28 @@
|
||||
/*
|
||||
Copyright 2019 Massdrop Inc.
|
||||
|
||||
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/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
//Macros to Enable, Disable, and Update USB 5V bus connections
|
||||
#define USBC_CFG_5V1_VAR sr_exp_data.bit.E_VBUS_1 //Variable storing USBC-1 5V Bus state
|
||||
#define USBC_CFG_5V1_ENA 1 //Value to enable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V1_DIS 0 //Value to disable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V1_UPDATE SR_EXP_WriteData() //Command to run to update value
|
||||
#define USBC_CFG_5V2_VAR sr_exp_data.bit.E_VBUS_2 //Variable storing USBC-2 5V Bus state
|
||||
#define USBC_CFG_5V2_ENA 1 //Value to enable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V2_DIS 0 //Value to disable USBC-1 5V Bus
|
||||
#define USBC_CFG_5V2_UPDATE SR_EXP_WriteData() //Command to run to update value
|
@ -1,8 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum ctrl_keycodes {
|
||||
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
U_T_AGCR = SAFE_RANGE, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
@ -26,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
@ -37,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
*/
|
||||
@ -59,11 +58,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
|
||||
switch (keycode) {
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
@ -93,7 +87,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
@ -128,3 +122,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true; //Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
led_instruction_t led_instructions[] = {
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 10, .id1 = 9, .r = 255, .g = 0, .b = 0 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_PATTERN, .id0 = 4, .id1 = 0, .pattern_id = 8 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 8, .id1 = 0, .r = 0, .g = 255, .b = 0 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_PATTERN, .id = 16, .id1 = 0, .pattern_id = 9 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_RGB, .id0 = 32, .id1 = 0, .r = 0, .g = 0, .b = 255 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_USE_ROTATE_PATTERN, .id0 = 64, .id1 = 0},
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_ROTATE_PATTERN, .id0 = 262144, .id1 = 0, .layer = 0 },
|
||||
// { .flags = LED_FLAG_MATCH_ID | LED_FLAG_MATCH_LAYER | LED_FLAG_USE_ROTATE_PATTERN, .id = 16777216, .id1 = 0, .layer = 1 },
|
||||
{ .end = 1 }
|
||||
};
|
||||
|
@ -1,24 +1,28 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum ctrl_keycodes {
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase //Working
|
||||
L_BRD, //LED Brightness Decrease //Working
|
||||
L_PTN, //LED Pattern Select Next //Working
|
||||
L_PTP, //LED Pattern Select Previous //Working
|
||||
L_PSI, //LED Pattern Speed Increase //Working
|
||||
L_PSD, //LED Pattern Speed Decrease //Working
|
||||
L_T_MD, //LED Toggle Mode //Working
|
||||
L_T_ONF, //LED Toggle On / Off //Broken
|
||||
L_ON, //LED On //Broken
|
||||
L_OFF, //LED Off //Broken
|
||||
L_T_BR, //LED Toggle Breath Effect //Working
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction //Working
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control //Working
|
||||
DBG_TOG, //DEBUG Toggle On / Off //
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints //
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints //
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints //
|
||||
MD_BOOT //Restart into bootloader after hold timeout //Working
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||
L_BRD, //LED Brightness Decrease
|
||||
L_EDG_I, //LED Edge Brightness Increase
|
||||
L_EDG_D, //LED Edge Brightness Decrease
|
||||
L_EDG_M, //LED Edge lighting mode
|
||||
L_PTN, //LED Pattern Select Next
|
||||
L_PTP, //LED Pattern Select Previous
|
||||
L_PSI, //LED Pattern Speed Increase
|
||||
L_PSD, //LED Pattern Speed Decrease
|
||||
L_T_MD, //LED Toggle Mode
|
||||
L_T_ONF, //LED Toggle On / Off
|
||||
L_ON, //LED On
|
||||
L_OFF, //LED Off
|
||||
L_T_BR, //LED Toggle Breath Effect
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction and effect
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||
DBG_FAC, //DEBUG Factory light testing (All on white)
|
||||
MD_BOOT //Restart into bootloader after hold timeout
|
||||
};
|
||||
|
||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||
@ -30,26 +34,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, L_EDG_I, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, L_EDG_D, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, L_T_MD, L_T_ONF, _______, L_EDG_M, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, DBG_FAC, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*
|
||||
[X] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
*/
|
||||
};
|
||||
@ -62,12 +66,13 @@ void matrix_init_user(void) {
|
||||
void matrix_scan_user(void) {
|
||||
};
|
||||
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
static uint8_t scroll_effect = 0;
|
||||
|
||||
switch (keycode) {
|
||||
case L_BRI:
|
||||
@ -84,6 +89,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
return false;
|
||||
case L_EDG_M:
|
||||
if (record->event.pressed) {
|
||||
led_edge_mode++;
|
||||
if (led_edge_mode > LED_EDGE_MODE_MAX) {
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case L_EDG_I:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
return false;
|
||||
case L_EDG_D:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
return false;
|
||||
case L_PTN:
|
||||
if (record->event.pressed) {
|
||||
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||
@ -115,20 +140,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_ONF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = !led_enabled;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(!I2C3733_Control_Get());
|
||||
}
|
||||
return false;
|
||||
case L_ON:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 1;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case L_OFF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 0;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(0);
|
||||
}
|
||||
return false;
|
||||
case L_T_BR:
|
||||
@ -143,7 +165,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_PTD:
|
||||
if (record->event.pressed) {
|
||||
led_animation_direction = !led_animation_direction;
|
||||
scroll_effect++;
|
||||
if (scroll_effect == 1) { //Patterns with scroll move horizontal (Right to left)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 2) { //Patterns with scroll move vertical (Top to bottom)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 3) { //Patterns with scroll move vertical (Bottom to top)
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 4) { //Patterns with scroll explode from center
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else if (scroll_effect == 5) { //Patterns with scroll implode on center
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else { //Patterns with scroll move horizontal (Left to right)
|
||||
scroll_effect = 0;
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
@ -151,6 +199,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
}
|
||||
return false;
|
||||
case DBG_FAC:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
led_lighting_mode = LED_MODE_NORMAL;
|
||||
led_edge_brightness = 1;
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
led_animation_breathing = 0;
|
||||
led_animation_id = 7; //led_programs.c led_setups leds_white index
|
||||
gcr_desired = LED_GCR_MAX;
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case DBG_TOG:
|
||||
if (record->event.pressed) {
|
||||
TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
|
||||
@ -175,7 +234,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,7 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum ctrl_keycodes {
|
||||
U_T_AUTO = SAFE_RANGE, //USB Extra Port Toggle Auto Detect / Always Active
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
U_T_AGCR = SAFE_RANGE, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
@ -26,7 +25,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, U_T_AUTO,U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
_______, RGB_SPD, RGB_VAI, RGB_SPI, RGB_HUI, RGB_SAI, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
_______, RGB_RMOD,RGB_VAD, RGB_MOD, RGB_HUD, RGB_SAD, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, RGB_TOG, _______, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
@ -37,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
*/
|
||||
@ -59,11 +58,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
|
||||
switch (keycode) {
|
||||
case U_T_AUTO:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_extra_manual, "USB extra port manual mode");
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
@ -93,7 +87,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
@ -128,3 +122,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true; //Process all other keycodes normally
|
||||
}
|
||||
}
|
||||
|
||||
led_instruction_t led_instructions[] = {
|
||||
{ .end = 1 }
|
||||
};
|
||||
|
@ -1,24 +1,28 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum ctrl_keycodes {
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase //Working
|
||||
L_BRD, //LED Brightness Decrease //Working
|
||||
L_PTN, //LED Pattern Select Next //Working
|
||||
L_PTP, //LED Pattern Select Previous //Working
|
||||
L_PSI, //LED Pattern Speed Increase //Working
|
||||
L_PSD, //LED Pattern Speed Decrease //Working
|
||||
L_T_MD, //LED Toggle Mode //Working
|
||||
L_T_ONF, //LED Toggle On / Off //Broken
|
||||
L_ON, //LED On //Broken
|
||||
L_OFF, //LED Off //Broken
|
||||
L_T_BR, //LED Toggle Breath Effect //Working
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction //Working
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control //Working
|
||||
DBG_TOG, //DEBUG Toggle On / Off //
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints //
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints //
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints //
|
||||
MD_BOOT //Restart into bootloader after hold timeout //Working
|
||||
L_BRI = SAFE_RANGE, //LED Brightness Increase
|
||||
L_BRD, //LED Brightness Decrease
|
||||
L_EDG_I, //LED Edge Brightness Increase
|
||||
L_EDG_D, //LED Edge Brightness Decrease
|
||||
L_EDG_M, //LED Edge lighting mode
|
||||
L_PTN, //LED Pattern Select Next
|
||||
L_PTP, //LED Pattern Select Previous
|
||||
L_PSI, //LED Pattern Speed Increase
|
||||
L_PSD, //LED Pattern Speed Decrease
|
||||
L_T_MD, //LED Toggle Mode
|
||||
L_T_ONF, //LED Toggle On / Off
|
||||
L_ON, //LED On
|
||||
L_OFF, //LED Off
|
||||
L_T_BR, //LED Toggle Breath Effect
|
||||
L_T_PTD, //LED Toggle Scrolling Pattern Direction and effect
|
||||
U_T_AGCR, //USB Toggle Automatic GCR control
|
||||
DBG_TOG, //DEBUG Toggle On / Off
|
||||
DBG_MTRX, //DEBUG Toggle Matrix Prints
|
||||
DBG_KBD, //DEBUG Toggle Keyboard Prints
|
||||
DBG_MOU, //DEBUG Toggle Mouse Prints
|
||||
DBG_FAC, //DEBUG Factory light testing (All on white)
|
||||
MD_BOOT //Restart into bootloader after hold timeout
|
||||
};
|
||||
|
||||
#define TG_NKRO MAGIC_TOGGLE_NKRO //Toggle 6KRO / NKRO mode
|
||||
@ -30,26 +34,26 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SLCK, KC_PAUS, \
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP, \
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN, \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, \
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, \
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, MO(1), KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \
|
||||
),
|
||||
[1] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, KC_MSTP, KC_VOLU, \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, _______, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, L_T_MD, L_T_ONF, _______, _______, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
L_T_BR, L_PSD, L_BRI, L_PSI, L_EDG_I, _______, _______, _______, U_T_AGCR,_______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, KC_VOLD, \
|
||||
L_T_PTD, L_PTP, L_BRD, L_PTN, L_EDG_D, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, L_T_MD, L_T_ONF, _______, L_EDG_M, MD_BOOT, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, DBG_FAC, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
/*
|
||||
[X] = LAYOUT(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, TG_NKRO, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \
|
||||
),
|
||||
*/
|
||||
};
|
||||
@ -62,12 +66,13 @@ void matrix_init_user(void) {
|
||||
void matrix_scan_user(void) {
|
||||
};
|
||||
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
#define MODS_SHIFT (get_mods() & MOD_BIT(KC_LSHIFT) || get_mods() & MOD_BIT(KC_RSHIFT))
|
||||
#define MODS_CTRL (get_mods() & MOD_BIT(KC_LCTL) || get_mods() & MOD_BIT(KC_RCTRL))
|
||||
#define MODS_ALT (get_mods() & MOD_BIT(KC_LALT) || get_mods() & MOD_BIT(KC_RALT))
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
static uint32_t key_timer;
|
||||
static uint8_t scroll_effect = 0;
|
||||
|
||||
switch (keycode) {
|
||||
case L_BRI:
|
||||
@ -84,6 +89,26 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (led_animation_breathing) gcr_breathe = gcr_desired;
|
||||
}
|
||||
return false;
|
||||
case L_EDG_M:
|
||||
if (record->event.pressed) {
|
||||
led_edge_mode++;
|
||||
if (led_edge_mode > LED_EDGE_MODE_MAX) {
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case L_EDG_I:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness += 0.1;
|
||||
if (led_edge_brightness > 1) { led_edge_brightness = 1; }
|
||||
}
|
||||
return false;
|
||||
case L_EDG_D:
|
||||
if (record->event.pressed) {
|
||||
led_edge_brightness -= 0.1;
|
||||
if (led_edge_brightness < 0) { led_edge_brightness = 0; }
|
||||
}
|
||||
return false;
|
||||
case L_PTN:
|
||||
if (record->event.pressed) {
|
||||
if (led_animation_id == led_setups_count - 1) led_animation_id = 0;
|
||||
@ -115,20 +140,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_ONF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = !led_enabled;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(!I2C3733_Control_Get());
|
||||
}
|
||||
return false;
|
||||
case L_ON:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 1;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case L_OFF:
|
||||
if (record->event.pressed) {
|
||||
led_enabled = 0;
|
||||
I2C3733_Control_Set(led_enabled);
|
||||
I2C3733_Control_Set(0);
|
||||
}
|
||||
return false;
|
||||
case L_T_BR:
|
||||
@ -143,7 +165,33 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return false;
|
||||
case L_T_PTD:
|
||||
if (record->event.pressed) {
|
||||
led_animation_direction = !led_animation_direction;
|
||||
scroll_effect++;
|
||||
if (scroll_effect == 1) { //Patterns with scroll move horizontal (Right to left)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 2) { //Patterns with scroll move vertical (Top to bottom)
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 3) { //Patterns with scroll move vertical (Bottom to top)
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 1;
|
||||
led_animation_circular = 0;
|
||||
} else if (scroll_effect == 4) { //Patterns with scroll explode from center
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else if (scroll_effect == 5) { //Patterns with scroll implode on center
|
||||
led_animation_direction = 1;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 1;
|
||||
} else { //Patterns with scroll move horizontal (Left to right)
|
||||
scroll_effect = 0;
|
||||
led_animation_direction = 0;
|
||||
led_animation_orientation = 0;
|
||||
led_animation_circular = 0;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
case U_T_AGCR:
|
||||
@ -151,6 +199,17 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
TOGGLE_FLAG_AND_PRINT(usb_gcr_auto, "USB GCR auto mode");
|
||||
}
|
||||
return false;
|
||||
case DBG_FAC:
|
||||
if (record->event.pressed && MODS_SHIFT && MODS_CTRL) {
|
||||
led_lighting_mode = LED_MODE_NORMAL;
|
||||
led_edge_brightness = 1;
|
||||
led_edge_mode = LED_EDGE_MODE_ALL;
|
||||
led_animation_breathing = 0;
|
||||
led_animation_id = 7; //led_programs.c led_setups leds_white index
|
||||
gcr_desired = LED_GCR_MAX;
|
||||
I2C3733_Control_Set(1);
|
||||
}
|
||||
return false;
|
||||
case DBG_TOG:
|
||||
if (record->event.pressed) {
|
||||
TOGGLE_FLAG_AND_PRINT(debug_enable, "Debug mode");
|
||||
@ -175,7 +234,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
if (record->event.pressed) {
|
||||
key_timer = timer_read32();
|
||||
} else {
|
||||
if (timer_elapsed32(key_timer) >= 500) {
|
||||
if (timer_elapsed32(key_timer) >= BOOTKEY_HOLD_MS) {
|
||||
reset_keyboard();
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user