Merge branch 'develop' of github.com:qmk/qmk_firmware into develop

This commit is contained in:
Thomas Haukland
2022-07-02 16:06:55 +02:00
85 changed files with 5735 additions and 398 deletions

View File

@@ -795,6 +795,7 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature)
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
#define RGB_TRIGGER_ON_KEYDOWN // Triggers RGB keypress events on key down. This makes RGB control feel more responsive. This may cause RGB to not function properly on some boards
```
## EEPROM storage :id=eeprom-storage

View File

@@ -138,6 +138,24 @@ void ap2_led_reset_foreground_color() {
ap2_led_mask_set_mono(color);
}
void ap2_led_sticky_set_key(uint8_t row, uint8_t col, ap2_led_t color) {
uint8_t payload[] = {row, col, color.p.blue, color.p.green, color.p.red, color.p.alpha};
proto_tx(CMD_LED_STICKY_SET_KEY, payload, sizeof(payload), 1);
}
void ap2_led_unset_sticky_key(uint8_t row, uint8_t col) {
uint8_t payload[] = {row, col};
proto_tx(CMD_LED_STICKY_UNSET_KEY, payload, sizeof(payload), 1);
}
void ap2_led_unset_sticky_row(uint8_t row) {
uint8_t payload[] = {row};
proto_tx(CMD_LED_STICKY_UNSET_ROW, payload, sizeof(payload), 1);
}
void ap2_led_unset_sticky_all(void) {
proto_tx(CMD_LED_STICKY_UNSET_ALL, NULL, 0, 1);
}
/*
* Currently keypresses are unified with other messages, still with single 1
* byte payload. Transfer is normally fast enough for that to not be a problem -

View File

@@ -86,6 +86,11 @@ void ap2_led_blink(uint8_t row, uint8_t col, ap2_led_t color, uint8_t count, uin
void ap2_led_set_foreground_color(uint8_t red, uint8_t green, uint8_t blue);
void ap2_led_reset_foreground_color(void);
void ap2_led_sticky_set_key(uint8_t row, uint8_t col, ap2_led_t color);
void ap2_led_unset_sticky_key(uint8_t row, uint8_t col);
void ap2_led_unset_sticky_row(uint8_t row);
void ap2_led_unset_sticky_all(void);
typedef struct {
uint8_t amount_of_profiles;
uint8_t current_profile;

View File

@@ -96,7 +96,7 @@ enum anne_pro_layers {
*
*/
[FN2] = LAYOUT_60_ansi( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, KC_AP_LED_OFF, KC_AP_LED_ON, _______, _______, _______, _______,
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
MO(FN2), _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
@@ -109,9 +109,11 @@ enum anne_pro_layers {
bool led_update_user(led_t leds) {
if (leds.caps_lock) {
// Set the leds to red
ap2_led_set_foreground_color(0xFF, 0x00, 0x00);
const ap2_led_t color = {.p.red = 0xff, .p.green = 0x00, .p.blue = 0x00, .p.alpha = 0xff};
ap2_led_mask_set_mono(color);
} else {
ap2_led_reset_foreground_color();
const ap2_led_t color = {.p.red = 0x00, .p.green = 0x00, .p.blue = 0x00, .p.alpha = 0x00};
ap2_led_mask_set_mono(color);
}
return true;

View File

@@ -96,7 +96,7 @@ enum anne_pro_layers {
*
*/
[FN2] = LAYOUT_60_ansi( /* FN2 */
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_LED_TOG, KC_AP_LED_NEXT_INTENSITY, KC_AP_LED_PREV_PROFILE, KC_AP_LED_NEXT_PROFILE, _______,
_______, KC_AP2_BT1, KC_AP2_BT2, KC_AP2_BT3, KC_AP2_BT4, _______, _______, _______, _______, KC_AP_RGB_MOD, KC_AP_RGB_TOG, KC_AP_RGB_VAD, KC_AP_RGB_VAI, _______,
MO(FN2), _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_HOME, KC_END, _______,
_______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, KC_PGUP, KC_PGDN, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_DEL, _______,
@@ -134,16 +134,12 @@ bool led_update_user(led_t leds) {
if (leds.caps_lock) {
// Set the caps-lock to red
const ap2_led_t color = {.p.red = 0xff, .p.green = 0x00, .p.blue = 0x00, .p.alpha = 0xff};
ap2_led_mask_set_key(2, 0, color);
ap2_led_sticky_set_key(2, 0, color);
/* NOTE: Instead of colouring the capslock only, you can change the whole
keyboard with ap2_led_set_foreground_color */
keyboard with ap2_led_mask_set_mono */
} else {
// Reset the capslock if there is no layer active
if (!layer_state_is(FN1) && !layer_state_is(FN2)) {
const ap2_led_t color = {.p.red = 0xff, .p.green = 0x00, .p.blue = 0x00, .p.alpha = 0x00};
ap2_led_mask_set_key(2, 0, color);
}
ap2_led_unset_sticky_key(2, 0);
}
return true;

View File

@@ -55,6 +55,14 @@ enum {
/* Number of profiles, current profile, on/off state,
reactive flag, brightness, errors */
CMD_LED_STATUS = 0x41,
/* Set sticky key, meaning the key will light up even when LEDs are turned off */
CMD_LED_STICKY_SET_KEY = 0x50,
CMD_LED_STICKY_SET_ROW = 0x51,
CMD_LED_STICKY_SET_MONO = 0x52,
CMD_LED_STICKY_UNSET_KEY = 0x53,
CMD_LED_STICKY_UNSET_ROW = 0x54,
CMD_LED_STICKY_UNSET_ALL = 0x55,
};
/* 1 ROW * 14 COLS * 4B (RGBX) = 56 + header prefix. */

View File

@@ -18,6 +18,8 @@
*/
#include "charybdis.h"
#include "transactions.h"
#include <string.h>
#ifdef CONSOLE_ENABLE
# include "print.h"
@@ -160,10 +162,8 @@ void charybdis_set_pointer_dragscroll_enabled(bool enable) {
maybe_update_pointing_device_cpi(&g_charybdis_config);
}
void pointing_device_init_kb(void) { maybe_update_pointing_device_cpi(&g_charybdis_config); }
# ifndef CONSTRAIN_HID
# define CONSTRAIN_HID(value) ((value) < -127 ? -127 : ((value) > 127 ? 127 : (value)))
# define CONSTRAIN_HID(value) ((value) < XY_REPORT_MIN ? XY_REPORT_MIN : ((value) > XY_REPORT_MAX ? XY_REPORT_MAX : (value)))
# endif // !CONSTRAIN_HID
/**
@@ -340,4 +340,49 @@ void matrix_init_kb(void) {
read_charybdis_config_from_eeprom(&g_charybdis_config);
matrix_init_user();
}
# ifdef CHARYBDIS_CONFIG_SYNC
void charybdis_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
if (initiator2target_buffer_size == sizeof(g_charybdis_config)) {
memcpy(&g_charybdis_config, initiator2target_buffer, sizeof(g_charybdis_config));
}
}
# endif
void keyboard_post_init_kb(void) {
maybe_update_pointing_device_cpi(&g_charybdis_config);
# ifdef CHARYBDIS_CONFIG_SYNC
transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, charybdis_config_sync_handler);
# endif
keyboard_post_init_user();
}
# ifdef CHARYBDIS_CONFIG_SYNC
void housekeeping_task_kb(void) {
if (is_keyboard_master()) {
// Keep track of the last state, so that we can tell if we need to propagate to slave
static charybdis_config_t last_charybdis_config = {0};
static uint32_t last_sync = 0;
bool needs_sync = false;
// Check if the state values are different
if (memcmp(&g_charybdis_config, &last_charybdis_config, sizeof(g_charybdis_config))) {
needs_sync = true;
memcpy(&last_charybdis_config, &g_charybdis_config, sizeof(g_charybdis_config));
}
// Send to slave every 500ms regardless of state change
if (timer_elapsed32(last_sync) > 500) {
needs_sync = true;
}
// Perform the sync if requested
if (needs_sync) {
if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(g_charybdis_config), &g_charybdis_config)) {
last_sync = timer_read32();
}
}
}
// no need for user function, is called already
}
# endif // CHARYBDIS_CONFIG_SYNC
#endif // POINTING_DEVICE_ENABLE

View File

@@ -20,6 +20,11 @@
#pragma once
// Enable syncing of charybdis config
#ifdef CHARYBDIS_CONFIG_SYNC
# define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_CONFIG_SYNC
#endif
/* Mouse config. */
#ifndef MOUSEKEY_MOVE_DELTA

View File

@@ -176,3 +176,23 @@ To disable the custom keycodes, and reduce binary size, simply add a definition
```c
#define NO_CHARYBDIS_KEYCODES
```
### Configuration Syncing
If you want/need to enable syncing of the charybdis config, such as to read the sniping or drag scroll modes on the other half (such as for displaying the status via rgb matrix, or added on screens, or what not), you can enabled this. To do so, add this to your `config.h`:
```c
#define CHARYBDIS_CONFIG_SYNC
```
Note that you will need to reflash both sides when enabling this.
### Enable Large Mouse Reports
By default, the X and Y motion for the pointing device/mouse reports is -127 to 127. You can definitely hit the limit for that with the sensors. You can enable support for -32767 to 32767 by adding this to your `config.h`:
```c
#define MOUSE_EXTENDED_REPORT
```
Note that you will need to reflash both sides when enabling this.

View File

@@ -53,3 +53,7 @@
#define RGBLIGHT_HUE_STEP 12 // units to step when in/decreasing hue
#define RGBLIGHT_SAT_STEP 12 // units to step when in/decresing saturation
#define RGBLIGHT_VAL_STEP 12 // units to step when in/decreasing value (brightness)
/* define rotary encoder pins */
#define ENCODERS_PAD_A {B0}
#define ENCODERS_PAD_B {D1}

View File

@@ -15,3 +15,15 @@
*/
#include "quark_squared.h"
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) { return false; }
if (index == 0) {
if (clockwise) {
tap_code_delay(KC_VOLD, 10);
} else {
tap_code_delay(KC_VOLU, 10);
}
}
return true;
}

View File

@@ -17,7 +17,7 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
UNICODE_ENABLE = yes # Unicode
ENCODER_ENABLE = yes # Enable Rotary Encoders
# Disable unsupported hardware
AUDIO_SUPPORTED = no
BACKLIGHT_SUPPORTED = no

View File

@@ -0,0 +1,126 @@
/*
This is the c configuration file for the keymap
Copyright 2012 Jun Wako <wakojun@gmail.com>
Copyright 2015 Jack Humbert
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
//#define USE_MATRIX_I2C
/* Select hand configuration */
#define MASTER_LEFT
// #define MASTER_RIGHT
// #define EE_HANDS
// #define TAPPING_FORCE_HOLD
#define TAPPING_TERM 150
// #define RETRO_TAPPING
// #define IGNORE_MOD_TAP_INTERRUPT
// #define PERMISSIVE_HOLD
#ifdef RGBLIGHT_ENABLE
# undef RGBLED_NUM
# define RGBLED_NUM 27
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
# define RGBLIGHT_SLEEP
# define RGBLIGHT_SPLIT
# define RGBLIGHT_LIMIT_VAL 120
# define RGBLIGHT_HUE_STEP 6
# define RGBLIGHT_SAT_STEP 6
# define RGBLIGHT_VAL_STEP 6
# define RGBLIGHT_SLEEP
# define RGBLIGHT_TIMEOUT 75000
#endif
#ifdef OLED_ENABLE
# define SPLIT_LAYER_STATE_ENABLE
# define SPLIT_LED_STATE_ENABLE
# define SPLIT_MODS_ENABLE
# define SPLIT_WPM_ENABLE
# define SPLIT_OLED_ENABLE
# define OLED_FONT_H "keyboards/crkbd/keymaps/soundmonster/glcdfont.c"
# define OLED_DISABLE_TIMEOUT
# define OLED_TIMEOUT 150000
# define OLED_BRIGHTNESS 255
# define OLED_FADE_OUT
# define OLED_FADE_OUT_INTERVAL 15
#endif
#ifdef RGB_MATRIX_ENABLE
# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
# define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
# define RGB_MATRIX_LED_PROCESS_LIMIT (DRIVER_LED_TOTAL + 4) / 5 // limits the number of LEDs to process in an animation per task run (increases keyboard responsiveness)
# define RGB_MATRIX_LED_FLUSH_LIMIT 16 // limits in milliseconds how frequently an animation will update the LEDs. 16 (16ms) is equivalent to limiting to 60fps (increases keyboard responsiveness)
# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150 // limits maximum brightness of LEDs to 150 out of 255. Higher may cause the controller to crash.
# define RGB_MATRIX_HUE_STEP 8
# define RGB_MATRIX_SAT_STEP 8
# define RGB_MATRIX_VAL_STEP 8
# define RGB_MATRIX_SPD_STEP 10
/* Disable the animations you don't want/need. You will need to disable a good number of these *
* because they take up a lot of space. Disable until you can successfully compile your firmware. */
# define ENABLE_RGB_MATRIX_ALPHAS_MODS
# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
# undef ENABLE_RGB_MATRIX_BREATHING
# undef ENABLE_RGB_MATRIX_BAND_SAT
# undef ENABLE_RGB_MATRIX_BAND_VAL
# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
# undef ENABLE_RGB_MATRIX_CYCLE_ALL
# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
# undef ENABLE_RGB_MATRIX_DUAL_BEACON
# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
# undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
# undef ENABLE_RGB_MATRIX_RAINDROPS
# undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
# undef ENABLE_RGB_MATRIX_SPLASH
# define ENABLE_RGB_MATRIX_MULTISPLASH
# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#endif

View File

@@ -0,0 +1,232 @@
#include "progmem.h"
// Corne 8x6 font with QMK Firmware Logo
// Online editor: https://helixfonteditor.netlify.com/
// See also: https://github.com/soundmonster/glcdfont_converter
const unsigned char font[] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xC0, 0xE0, 0xF0, 0xF8,
0xF8, 0x18, 0x00, 0xC0, 0xF0, 0xFC,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x7E, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2,
0x42, 0x42, 0x42, 0xE2, 0x52, 0x22,
0x22, 0x22, 0x42, 0x82, 0x02, 0x02,
0x22, 0x22, 0x02, 0x04, 0xF8, 0x00,
0x00, 0xF8, 0x04, 0x02, 0x02, 0x82,
0x42, 0x22, 0x42, 0x82, 0x02, 0x02,
0x02, 0x82, 0x42, 0x22, 0x12, 0x22,
0x42, 0x82, 0x02, 0x04, 0xF8, 0x00,
0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E,
0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE,
0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00,
0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E,
0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0,
0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0,
0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80,
0x80, 0x80, 0x40, 0x40, 0x20, 0x20,
0x10, 0x10, 0x08, 0x08, 0x10, 0x10,
0x20, 0x20, 0x40, 0x40, 0x80, 0x80,
0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0,
0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0,
0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80,
0x00, 0xF8, 0xFC, 0xFE, 0xFF, 0xE0,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x80, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x07, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47,
0x42, 0x42, 0x42, 0x47, 0x4A, 0x44,
0x40, 0x40, 0x40, 0x40, 0x41, 0x42,
0x44, 0x44, 0x40, 0x20, 0x1F, 0x00,
0x00, 0x1F, 0x20, 0x40, 0x41, 0x40,
0x40, 0x40, 0x40, 0x40, 0x41, 0x40,
0x41, 0x41, 0x4F, 0x48, 0x48, 0x48,
0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00,
0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78,
0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B,
0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D,
0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00,
0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F,
0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E,
0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C,
0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88,
0x88, 0x88, 0x55, 0x55, 0x23, 0x23,
0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47,
0x23, 0x23, 0x55, 0x55, 0x88, 0x88,
0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2,
0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4,
0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88,
0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6,
0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6,
0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88,
0x00, 0x03, 0x0F, 0x1F, 0x3F, 0x3F,
0x3F, 0x3F, 0x1F, 0x1F, 0x3F, 0x3F,
0x7F, 0x7F, 0x7F, 0x3F, 0x3F, 0x1F,
0x3F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7C,
0x78, 0x78, 0x38, 0x1C, 0x0F, 0x00,
0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04,
0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20,
0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04,
0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20,
0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC,
0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F,
0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE,
0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00,
0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77,
0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x02, 0x02,
0x04, 0x04, 0x08, 0x08, 0x04, 0x04,
0x02, 0x02, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x03,
0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07,
0x03, 0x03, 0x01, 0x01, 0x00, 0x00,
0x00, 0x00, 0x01, 0x01, 0x03, 0x02,
0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06,
0x03, 0x02, 0x01, 0x01, 0x00, 0x00
};

View File

@@ -0,0 +1,596 @@
// Copyright 2022 Guilherme Bermêo (bermeo.dev)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
// Each layer gets a name for readability, which is then used in the keymap matrix below.
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
// Layer names don't all need to be of the same length, obviously, and you can also skip them
// entirely and just use numbers.
enum layers {
_QWERTY,
_LOWER,
_RAISE,
_NUMP,
};
uint8_t mod_state;
bool isBarking = false;
bool isJumping = false;
bool showedJump = true;
bool isSneaking = false;
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
ADJUST,
CEDILHA, // ç direct key
AO, // ã direct key
ASPAS, // " direct key
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {[_QWERTY] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
LCTL_T(KC_F3), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_GRAVE,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LALT_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LSFT_T(KC_LEFT), KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RGUI_T(KC_RIGHT),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
LGUI_T(KC_DOWN), MO(1), KC_SPC, KC_BSPC, MO(2), RSFT_T(KC_UP)
// `--------------------------' `--------------------------'
),
[_LOWER] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
LCTL_T(KC_F5), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ESCAPE,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LCTL(LGUI(KC_SPC)), KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_ENT, KC_LBRC, KC_RBRC, KC_BSLS, KC_QUOT, KC_COLON, KC_ENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LALT(KC_LEFT), KC_F1, KC_F2, KC_C, KC_V, KC_BSPC, KC_MINS, KC_EQL, KC_LT, KC_GT, KC_QUESTION, LALT(KC_RIGHT),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
LGUI_T(KC_PAGE_DOWN), _______, KC_SPC, LALT(KC_BSPC), TG(3), RSFT_T(KC_PAGE_UP)
// `--------------------------' `--------------------------'
),
[_RAISE] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
LCTL_T(KC_F4), KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILDE,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LALT_T(KC_TAB), AO, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LCBR, KC_RCBR, KC_PIPE, ASPAS, KC_COLON, KC_ENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
LALT(KC_LEFT), XXXXXXX, XXXXXXX, CEDILHA, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LT, KC_GT, KC_QUESTION, LALT(KC_RIGHT),
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
LGUI_T(KC_END), TG(3), KC_SPC, KC_DEL, _______, RSFT_T(KC_HOME)
// `--------------------------' `--------------------------'
),
[_NUMP] = LAYOUT_split_3x6_3(
//,-----------------------------------------------------. ,-----------------------------------------------------.
RGB_TOG, _______, _______, _______, _______, _______, _______, KC_P7, KC_P8, KC_P9, KC_PAST, KC_PSLS,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_SPI, _______, _______, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_ENT,
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------|
_______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_SPD, _______, KC_PDOT, KC_P1, KC_P2, KC_P3, KC_PPLS, KC_NO,
//|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
TG(3), TG(3), TG(3), KC_BSPC, TG(3), KC_P0
// `--------------------------' `--------------------------'
)};
//Per key lights
void rgb_matrix_indicators_user(void) {
#ifdef RGB_MATRIX_ENABLE
switch (get_highest_layer(layer_state)) {
case _QWERTY:
isSneaking = false;
mod_state = get_mods();
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
if (mod_state & MOD_MASK_SHIFT) {
isBarking = true;
rgb_matrix_set_color(52, 255, 255, 255);
rgb_matrix_set_color(i, 255, 150, 0);
} else if (mod_state & MOD_MASK_GUI || mod_state & MOD_MASK_CTRL) {
isBarking = true;
rgb_matrix_set_color(15, 255, 0, 0);
switch (i) {
case 0 ... 5: // underglow left side
case 9: // cmd + T white (new tab)
case 11: // cmd + F white (find)
case 18: // cmd + W white (close tab)
case 19: // cmd + S white (save)
case 21: // cmd + Z white (undo)
case 22: // cmd + A white (select all)
case 27 ... 32: // underglow right side
case 43: // cmd + K white (comment for desktop remote)
case 48: // cmd + / white (comment line)
rgb_matrix_set_color(i, 255, 255, 255); // white
break;
case 6: // space bar off
case 24 ... 26: // left column off
case 33: // backspace off
case 41: // shift off
case 51 ... 53: // right column off
rgb_matrix_set_color(i, 0, 0, 0); //off
break;
}
if (mod_state & MOD_MASK_GUI) {
rgb_matrix_set_color(12, 255, 255, 255); // white V key
rgb_matrix_set_color(15, 255, 255, 255); // white C key
rgb_matrix_set_color(20, 255, 255, 255); // white X key
} else {
}
} else if (mod_state & MOD_MASK_ALT) {
isBarking = true;
} else {
isBarking = false;
rgb_matrix_set_color(14, 0, 0, 0); // command key off
}
}
rgb_matrix_set_color(13, 23, 181, 255); // cyan layer
rgb_matrix_set_color(40, 255, 33, 0); // orange layer
break;
case _RAISE:
isSneaking = true;
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
switch (i) {
case 7: // B key off
case 8: // G key off
case 11: // F key off
case 12: // V key off
case 16: // D key off
case 19 ... 21: // S, X, Z keys off
case 25: // tab key off
case 26: // shift key off
case 52 ... 53: // right column off
rgb_matrix_set_color(i, 0, 0, 0); // off
break;
case 15: // Ç key
case 22: // Ã key
case 24: // Launch (F4)
case 40: // Active layer
rgb_matrix_set_color(i, 255, 255, 255); // white
break;
case 13: // active layer
rgb_matrix_set_color(i, 0, 255, 0); // green
break;
case 42: // , shifted key
case 47 ... 49: // . / ; shifted keys
rgb_matrix_set_color(i, 255, 214, 0); // yellow
break;
default:
rgb_matrix_set_color(i, 255, 33, 0); // orange
}
}
break;
case _LOWER:
isSneaking = true;
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
switch (i) {
case 7: // Delete key
case 51: // ESC key
rgb_matrix_set_color(i, 255, 0, 0); // red
break;
case 12: // V key off
case 15: // C key off
case 20: // X key off
case 21: // Z key off
case 26: // shift key off
case 52 ... 53: // right column off
rgb_matrix_set_color(i, 0, 0, 0); // off
break;
case 11: // Right arrow key
case 13: // Active layer
case 16: // Up arrow key
case 19: // Down arrow key
case 22: // Left arrow key
case 24: // Print
rgb_matrix_set_color(i, 255, 255, 255); // white
break;
case 8: // Enter key
case 40: // Activate Numpad
rgb_matrix_set_color(i, 0, 255, 0); // green
break;
case 42: // , shifted key
case 47 ... 49: // . / ; shifted keys
case 25: // opens emoji dialog (on macOS)
rgb_matrix_set_color(i, 255, 214, 0); // yellow
break;
default:
rgb_matrix_set_color(i, 23, 181, 255); // cyan
}
}
break;
case _NUMP:
isSneaking = true;
for (int i = 0; i < DRIVER_LED_TOTAL; i++) {
switch (i) {
case 12: // RGB speed-
case 15: // RGB brigthness-
case 20: // RGB saturation-
case 21: // RGB hue-
case 49: // Numpad -
case 51: // Numpad /
rgb_matrix_set_color(i, 255, 0, 0); // red
break;
case 8 ... 10: // G T R off
case 17: // E off
case 18: // W off
case 23: // Q off
case 25: // Tab off
case 26: // LShift off
case 33: // Backspace off
case 35: // H off
case 36: // Y off
case 53: // RShift off
rgb_matrix_set_color(i, 0, 0, 0); // off
break;
case 6: // Space bar off
case 13: // Return to default layer
case 16: // RGB brigthness+
case 24: // RGB toggle
case 37 ... 47: // Numpad numbers
case 52: // Enter key
rgb_matrix_set_color(i, 255, 255, 255); // white
break;
case 11: // RGB speed+
case 19: // RGB saturation+
case 22: // RGB hue+
case 48: // Numpad +
rgb_matrix_set_color(i, 0, 255, 0); // green
break;
case 34: // . numpad key
rgb_matrix_set_color(i, 255, 214, 0); // yellow
break;
}
rgb_matrix_set_color(13, 23, 181, 255); // Activate cyan layer
rgb_matrix_set_color(40, 255, 33, 0); // Activate orange layer
rgb_matrix_set_color(50, 0, 33, 255); // Numpad *
rgb_matrix_set_color(14, 0, 255, 0); // Green layer active
}
}
};
#endif
#ifdef OLED_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
/* KEYBOARD PET START */
/* settings */
# define MIN_WALK_SPEED 10
# define MIN_RUN_SPEED 60
/* advanced settings */
# define ANIM_FRAME_DURATION 100 // how long each frame lasts in ms
# define ANIM_SIZE 96 // number of bytes in array. If you change sprites, minimize for adequate firmware size. max is 1024
/* timers */
uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
/* current frame */
uint8_t current_frame = 0;
/* status variables */
int current_wpm = 0;
// led_t led_usb_state;
/* logic */
static void render_luna(int LUNA_X, int LUNA_Y) {
/* Sit */
static const char PROGMEM sit[2][ANIM_SIZE] = {/* 'sit1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x68, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'sit2', 32x22px */
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x1c, 0x02, 0x05, 0x02, 0x24, 0x04, 0x04, 0x02, 0xa9, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x90, 0x08, 0x18, 0x60, 0x10, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x0e, 0x82, 0x7c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x0c, 0x10, 0x10, 0x20, 0x20, 0x20, 0x28, 0x3e, 0x1c, 0x20, 0x20, 0x3e, 0x0f, 0x11, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}};
/* Walk */
static const char PROGMEM walk[2][ANIM_SIZE] = {/* 'walk1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x10, 0x90, 0x90, 0x90, 0xa0, 0xc0, 0x80, 0x80, 0x80, 0x70, 0x08, 0x14, 0x08, 0x90, 0x10, 0x10, 0x08, 0xa4, 0x78, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x08, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x18, 0xea, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x03, 0x06, 0x18, 0x20, 0x20, 0x3c, 0x0c, 0x12, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'walk2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x20, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x28, 0x10, 0x20, 0x20, 0x20, 0x10, 0x48, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x20, 0xf8, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x30, 0xd5, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x02, 0x1c, 0x14, 0x08, 0x10, 0x20, 0x2c, 0x32, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Run */
static const char PROGMEM run[2][ANIM_SIZE] = {/* 'run1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0xe0, 0x10, 0x08, 0x08, 0xc8, 0xb0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0xc4, 0xa4, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x58, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x09, 0x04, 0x04, 0x04, 0x04, 0x02, 0x03, 0x02, 0x01, 0x01, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'run2', 32x22px */
{
0x00, 0x00, 0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x78, 0x28, 0x08, 0x10, 0x20, 0x30, 0x08, 0x10, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0xb0, 0x50, 0x55, 0x20, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x1e, 0x20, 0x20, 0x18, 0x0c, 0x14, 0x1e, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
// /* Bark */
static const char PROGMEM bark[2][ANIM_SIZE] = {/* 'bark1', 32x22px */
{
0x00, 0xc0, 0x20, 0x10, 0xd0, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x3c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc8, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
},
/* 'bark2', 32x22px */
{
0x00, 0xe0, 0x10, 0x10, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x2c, 0x14, 0x04, 0x08, 0x90, 0x18, 0x04, 0x08, 0xb0, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x10, 0x11, 0xf9, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x48, 0x28, 0x2a, 0x10, 0x0f, 0x20, 0x4a, 0x09, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x0c, 0x10, 0x20, 0x28, 0x37, 0x02, 0x02, 0x04, 0x08, 0x10, 0x26, 0x2b, 0x32, 0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* Sneak */
static const char PROGMEM sneak[2][ANIM_SIZE] = {/* 'sneak1', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x40, 0x40, 0x80, 0x00, 0x80, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x21, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x04, 0x04, 0x04, 0x03, 0x01, 0x00, 0x00, 0x09, 0x01, 0x80, 0x80, 0xab, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x1c, 0x20, 0x20, 0x3c, 0x0f, 0x11, 0x1f, 0x02, 0x06, 0x18, 0x20, 0x20, 0x38, 0x08, 0x10, 0x18, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
},
/* 'sneak2', 32x22px */
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xa0, 0x20, 0x40, 0x80, 0xc0, 0x20, 0x40, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x41, 0xf0, 0x04, 0x02, 0x02, 0x02, 0x03, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x40, 0x40, 0x55, 0x82, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x20, 0x30, 0x0c, 0x02, 0x05, 0x09, 0x12, 0x1e, 0x04, 0x18, 0x10, 0x08, 0x10, 0x20, 0x28, 0x34, 0x06, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
}};
/* animation */
void animate_luna(void) {
/* jump */
if (isJumping || !showedJump) {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y + 2);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y - 1);
showedJump = true;
} else {
/* clear */
oled_set_cursor(LUNA_X, LUNA_Y - 1);
oled_write(" ", false);
oled_set_cursor(LUNA_X, LUNA_Y);
}
/* switch frame */
current_frame = (current_frame + 1) % 2;
/* draw */
if (isBarking) {
oled_write_raw_P(bark[abs(1 - current_frame)], ANIM_SIZE);
} else if (isSneaking) {
oled_write_raw_P(sneak[abs(1 - current_frame)], ANIM_SIZE);
} else if (current_wpm <= MIN_WALK_SPEED) {
oled_write_raw_P(sit[abs(1 - current_frame)], ANIM_SIZE);
} else if (current_wpm <= MIN_RUN_SPEED) {
oled_write_raw_P(walk[abs(1 - current_frame)], ANIM_SIZE);
} else {
oled_write_raw_P(run[abs(1 - current_frame)], ANIM_SIZE);
}
}
/* animation timer */
if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
anim_timer = timer_read32();
animate_luna();
}
}
void render_mod_status_gui_alt(uint8_t modifiers) {
static const char PROGMEM gui_off_1[] = {0x85, 0x86, 0};
static const char PROGMEM gui_off_2[] = {0xa5, 0xa6, 0};
static const char PROGMEM gui_on_1[] = {0x8d, 0x8e, 0};
static const char PROGMEM gui_on_2[] = {0xad, 0xae, 0};
static const char PROGMEM alt_off_1[] = {0x87, 0x88, 0};
static const char PROGMEM alt_off_2[] = {0xa7, 0xa8, 0};
static const char PROGMEM alt_on_1[] = {0x8f, 0x90, 0};
static const char PROGMEM alt_on_2[] = {0xaf, 0xb0, 0};
// fillers between the modifier icons bleed into the icon frames
static const char PROGMEM off_off_1[] = {0xc5, 0};
static const char PROGMEM off_off_2[] = {0xc6, 0};
static const char PROGMEM on_off_1[] = {0xc7, 0};
static const char PROGMEM on_off_2[] = {0xc8, 0};
static const char PROGMEM off_on_1[] = {0xc9, 0};
static const char PROGMEM off_on_2[] = {0xca, 0};
static const char PROGMEM on_on_1[] = {0xcb, 0};
static const char PROGMEM on_on_2[] = {0xcc, 0};
if (modifiers & MOD_MASK_GUI) {
oled_write_P(gui_on_1, false);
} else {
oled_write_P(gui_off_1, false);
}
if ((modifiers & MOD_MASK_GUI) && (modifiers & MOD_MASK_ALT)) {
oled_write_P(on_on_1, false);
} else if (modifiers & MOD_MASK_GUI) {
oled_write_P(on_off_1, false);
} else if (modifiers & MOD_MASK_ALT) {
oled_write_P(off_on_1, false);
} else {
oled_write_P(off_off_1, false);
}
if (modifiers & MOD_MASK_ALT) {
oled_write_P(alt_on_1, false);
} else {
oled_write_P(alt_off_1, false);
}
if (modifiers & MOD_MASK_GUI) {
oled_write_P(gui_on_2, false);
} else {
oled_write_P(gui_off_2, false);
}
if (modifiers & MOD_MASK_GUI & MOD_MASK_ALT) {
oled_write_P(on_on_2, false);
} else if (modifiers & MOD_MASK_GUI) {
oled_write_P(on_off_2, false);
} else if (modifiers & MOD_MASK_ALT) {
oled_write_P(off_on_2, false);
} else {
oled_write_P(off_off_2, false);
}
if (modifiers & MOD_MASK_ALT) {
oled_write_P(alt_on_2, false);
} else {
oled_write_P(alt_off_2, false);
}
}
void render_mod_status_ctrl_shift(uint8_t modifiers) {
static const char PROGMEM ctrl_off_1[] = {0x89, 0x8a, 0};
static const char PROGMEM ctrl_off_2[] = {0xa9, 0xaa, 0};
static const char PROGMEM ctrl_on_1[] = {0x91, 0x92, 0};
static const char PROGMEM ctrl_on_2[] = {0xb1, 0xb2, 0};
static const char PROGMEM shift_off_1[] = {0x8b, 0x8c, 0};
static const char PROGMEM shift_off_2[] = {0xab, 0xac, 0};
static const char PROGMEM shift_on_1[] = {0xcd, 0xce, 0};
static const char PROGMEM shift_on_2[] = {0xcf, 0xd0, 0};
// fillers between the modifier icons bleed into the icon frames
static const char PROGMEM off_off_1[] = {0xc5, 0};
static const char PROGMEM off_off_2[] = {0xc6, 0};
static const char PROGMEM on_off_1[] = {0xc7, 0};
static const char PROGMEM on_off_2[] = {0xc8, 0};
static const char PROGMEM off_on_1[] = {0xc9, 0};
static const char PROGMEM off_on_2[] = {0xca, 0};
static const char PROGMEM on_on_1[] = {0xcb, 0};
static const char PROGMEM on_on_2[] = {0xcc, 0};
if (modifiers & MOD_MASK_CTRL) {
oled_write_P(ctrl_on_1, false);
} else {
oled_write_P(ctrl_off_1, false);
}
if ((modifiers & MOD_MASK_CTRL) && (modifiers & MOD_MASK_SHIFT)) {
oled_write_P(on_on_1, false);
} else if (modifiers & MOD_MASK_CTRL) {
oled_write_P(on_off_1, false);
} else if (modifiers & MOD_MASK_SHIFT) {
oled_write_P(off_on_1, false);
} else {
oled_write_P(off_off_1, false);
}
if (modifiers & MOD_MASK_SHIFT) {
oled_write_P(shift_on_1, false);
} else {
oled_write_P(shift_off_1, false);
}
if (modifiers & MOD_MASK_CTRL) {
oled_write_P(ctrl_on_2, false);
} else {
oled_write_P(ctrl_off_2, false);
}
if (modifiers & MOD_MASK_CTRL & MOD_MASK_SHIFT) {
oled_write_P(on_on_2, false);
} else if (modifiers & MOD_MASK_CTRL) {
oled_write_P(on_off_2, false);
} else if (modifiers & MOD_MASK_SHIFT) {
oled_write_P(off_on_2, false);
} else {
oled_write_P(off_off_2, false);
}
if (modifiers & MOD_MASK_SHIFT) {
oled_write_P(shift_on_2, false);
} else {
oled_write_P(shift_off_2, false);
}
}
void render_layer_state(void) {
static const char PROGMEM default_layer[] = {0x20, 0x94, 0x95, 0x96, 0x20, 0x20, 0xb4, 0xb5, 0xb6, 0x20, 0x20, 0xd4, 0xd5, 0xd6, 0x20, 0};
static const char PROGMEM raise_layer[] = {0x20, 0x97, 0x98, 0x99, 0x20, 0x20, 0xb7, 0xb8, 0xb9, 0x20, 0x20, 0xd7, 0xd8, 0xd9, 0x20, 0};
static const char PROGMEM lower_layer[] = {0x20, 0x9a, 0x9b, 0x9c, 0x20, 0x20, 0xba, 0xbb, 0xbc, 0x20, 0x20, 0xda, 0xdb, 0xdc, 0x20, 0};
static const char PROGMEM nump_layer[] = {0x20, 0x9d, 0x9e, 0x9f, 0x20, 0x20, 0xbd, 0xbe, 0xbf, 0x20, 0x20, 0xdd, 0xde, 0xdf, 0x20, 0};
if (layer_state_is(_NUMP)) {
oled_write_P(nump_layer, false);
} else if (layer_state_is(_LOWER)) {
oled_write_P(lower_layer, false);
} else if (layer_state_is(_RAISE)) {
oled_write_P(raise_layer, false);
} else {
oled_write_P(default_layer, false);
}
}
// renders on oled
bool oled_task_user(void) {
current_wpm = get_current_wpm();
// led_usb_state = host_keyboard_led_state();
if (is_keyboard_left()) {
oled_set_cursor(0, 2);
if (isSneaking) {
render_layer_state();
} else {
for (size_t i = 0; i < 7; i++) {
oled_write(" ", false);
}
}
render_luna(0, 12);
} else {
oled_set_cursor(0, 6);
render_layer_state();
oled_set_cursor(0, 11);
if (mod_state) {
render_mod_status_gui_alt(get_mods());
render_mod_status_ctrl_shift(get_mods());
} else {
for (size_t i = 0; i < 5; i++) {
oled_write(" ", false);
}
}
}
return false;
}
#endif
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
switch (keycode) {
// ç key
case CEDILHA:
if (record->event.pressed) {
register_code(KC_QUOT);
unregister_code(KC_QUOT);
register_code(KC_C);
unregister_code(KC_C);
}
break;
return false;
// ã key
case AO:
if (record->event.pressed) {
register_code(KC_LSFT);
register_code(KC_GRV);
unregister_code(KC_LSFT);
unregister_code(KC_GRV);
register_code(KC_A);
unregister_code(KC_A);
}
break;
return false;
// direct " key
case ASPAS:
if (record->event.pressed) {
register_code(KC_LSFT);
register_code(KC_QUOT);
register_code(KC_SPC);
unregister_code(KC_SPC);
unregister_code(KC_QUOT);
unregister_code(KC_LSFT);
}
break;
return false;
// Luna jumping on space
case KC_SPC:
if (record->event.pressed) {
isJumping = true;
showedJump = false;
} else {
isJumping = false;
}
break;
return false;
}
return true;
}

View File

@@ -0,0 +1,158 @@
# Bermeo Layout for Corne
## Features
### *Corne for neo-latin creatives*
* Usable with left hand only (Figma, Adobe, Spline, etc) to combo with mouse.
* Delete and enter keys on the left side.
* Z and X on left side with lower layer used to control the monitor's brigtness.
* Arrow keys on left hand (vim logic)
* Accentuations used in Romance (neo-latin) languages like Spanish, Portuguese, French and Italian - ` ~ ^ ' -.
#### Direct ç and ã keys
The termination "tion" (eg. action) in portuguese is "ção" (eg. ação). This layout is optimized to use the less keys possible to write words with this termination.
Compared to the `crkbd:default` layout the difference to output ção would be half of the interations:
| crkbd:bermeo | <sub>`MO(2)`</sub>, `KC_C`, `KC_A`, <sup>`MO(2)`</sup> |
|:--|:--|
| crkbd:default | `KC_QUOT`, `KC_C`, <sub>`MO(2)`</sub>, <sub>`KC_SFT`</sub>, `KC_GRV`, <sup>`MO(2)`</sup>, <sup>`KC_SFT`</sup>, `KC_A` |
[ <sub>`hold key`</sub> , <sup>`release key`</sup> ]
### Modern OLED Support
* Non-intrusive OLED layer indicator.
* Non-intrusive OLED modifier indicators ⌘ ⇧ ⌥ ⌃.
* Fully animated Luna on left side.
### Full per-key RGB Matrix support
With the index of every key mapped in the table below to be used with `rgb_matrix_set_color(index, r, g, b)`;.
#### Indexes of the keys
|||||||||||||||
|:--:|:--:|:--:|:--:|:--:|:--:|--|--|:--:|:--:|:--:|:--:|:--:|:--:|
| 24 | 23 | 18 | 17 | 10 | 9 ||| 36 | 37 | 44 | 45 | 50 | 51 |
| 25 | 22 | 19 | 16 | 11 | 8 ||| 35 | 38 | 43 | 46 | 49 | 52 |
| 26 | 21 | 20 | 15 | 12 | 7 ||| 34 | 39 | 42 | 47 | 48 | 53 |
||||| 14 | 13 | 6 | 33 | 40 | 41 |||||
Each layer uses the LED `14` as an visual indicator:
* ⚫️ Default layer
* 🔵 Lower (0)
* 🟠 Raise (1)
* 🟢 Numpad (2)
* ⚪️ Control and Command
* 🟡 Shift
## Mod-taps
For convenience, QMK includes some Mod-Tap shortcuts to make common combinations more compact in your keymap:
| Key | Description |
| :-- | --: |
| LCTL_T(kc) | Left Control when held, kc when tapped. |
| LSFT_T(kc) | Left Shift when held, kc when tapped. |
| LALT_T(kc) | Left Alt when held, kc when tapped. |
| ALT(kc) | Left Alt + kc when tapped. |
| LGUI_T(kc) | Left GUI when held, kc when tapped. |
| RSFT_T(kc) | Right Shift when held, kc when tapped. |
| RGUI_T(kc) | Right GUI when held, kc when tapped. |
## Macros
|Layer | Name | Description | Keys |
| :--: | --: | -- | --: |
| 🟠 | CEDILLA | Directly outputs ç | ' + c |
| 🟠 | AO | Directly outputs ã | shift + ` + a |
| 🟠 | ASPAS | Outputs ", since diaeresis[^1] are less used than " (for coding and quoting) | shift + ' + space |
## Layers
### QWERTY
|||||||||||||||
|:--|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|--:|
| LCTL_T(F3[^2]) | Q | W | E | R | T ||| Y | U | I | O | P | GRAVE |
| LALT_T(TAB) | A | S | D | F | G ||| H | J | K | L | ; | ↵ |
| LSFT_T(&larr;) | Z | X | C | V | B ||| N | M | , | . | / | RGUI_T(&rarr;) |
||||| LGUI_T(&darr;) | MO(1) | SPACE | ⌫ | MO(2)| RSFT_T( &uarr;) |||||
### LOWER 🔵
|||||||||||||||
|:--|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|--:|
|CTL_T(F5[^3]) | 1 | 2 | 3 | 4 | 5 ||| 6 | 7 | 8 | 9 | 0 | ESCAPE |
|LCTL(LGUI(KC_SPC))[^4] | &larr; | &darr; | &uarr; | &rarr; | ↵ ||| [ | ] | \ | ' | : | ↵ |
|ALT(&larr;) | F1[^5] | F2[^6] | C | V | ⌫ ||| - | = | < | > | ? | LALT(&rarr;) |
||||| LGUI_T(PAGE_DOWN) | _ | SPACE | LALT(⌫) | TG(3) | RSFT_T(PAGE_UP) |||||
### RAISE 🟠
|||||||||||||||
|:--|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|--:|
LCTL_T(F4[^7]) | ! | @ | # | $ | % ||| ˆ | & | * | ( | ) | ˜ |
LALT_T(TAB) | Ã[^8] | | | | ||| { | } | &#124; | "[^9] | : | ↵ |
LALT(&larr;) | | | Ç[^10] | | ||| _ | + | < | > | ? | LALT(&rarr;) |
||||| LGUI_T(END) | TG(3) | SPACE| DEL| _ | RSFT_T(HOME) |||||
### NUMPAD 🟢
|||||||||||||||
|:--|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|:--:|--:|
| RGB_TOG || | | |||| | 7 | 8 | 9 | * | / |
|| RGB_HUI | RGB_SAI | RGB_VAI | RGB_SPI |||| | 4 | 5 | 6 | - | ↵ |
|| RGB_HUD | RGB_SAD | RGB_VAD | RGB_SPD |||| . | 1 | 2 | 3 | + | |
||||| TG(3)| TG(3) | TG(3) | ⌫ | TG(3) | 0 |||||
## Usage
To compile and flash, from `qmk setup` folder, run:
make crkbd:bermeo:flash
## Compiled size
28658/28672 (99%, 14 bytes free)
If more space is needed, start by deactivating Macros and Luna's animations.
## Credits
Guilherme Bermêo [(github)](https://git.bermeo.dev)
### Thanks
* @armand1m
* @brneor
* @drashna
* @hellsingcoder
* @soundmonster
* @wdtamagi
[^1]: The diaeresis (/daɪˈɛrəsɪs, -ˈɪər-/ dy-ERR-ə-sis, -EER-; also known as the trema) and the umlaut (/ˈʊmlaʊt/) are two different diacritical marks that (in modern usage) look alike. They both consist of two dots ¨ placed over a letter, usually a vowel; when that letter is an i or a j, the diacritic replaces the tittle: ï. In computer systems, both forms have the same code point (binary code). Their appearance in print or on screen may vary between typefaces but rarely within the same typeface. The "diaeresis" diacritic is used to mark the separation of two distinct vowels in adjacent syllables when an instance of diaeresis (or hiatus) occurs, so as to distinguish from a digraph or diphthong.
The "umlaut" diacritic, in contrast, indicates a sound shift phenomenon also known as umlaut in which a back vowel becomes a front vowel.
Neither of these phenomena occur in English, except in loanwords (like naïve) or for stylistic reasons (as in the Brontë family or Mötley Crüe).
[^2]: Open Mission Control.
[^3]: Bring up the screenshot toolbar.
[^4]: Opens emoji dialog box.
[^5]: Decrease display brightness.
[^6]: Increase display brightness.
[^7]: Launchpad.
[^8]: Macro "CEDILLA".
[^9]: Macro "AO".
[^10]: Macro "ASPAS".

View File

@@ -0,0 +1,19 @@
RGBLIGHT_ENABLE = no
RGB_MATRIX_ENABLE = yes
MOUSEKEY_ENABLE = no
NKRO_ENABLE = no
OLED_ENABLE = yes
OLED_DRIVER = SSD1306
LTO_ENABLE = yes
SLEEP_LED_ENABLE = yes
WPM_ENABLE = yes
#Dont use
CONSOLE_ENABLE = no
MOUSEKEY_ENABLE = no
BOOTMAGIC_ENABLE = no
COMBO_ENABLE = no
AUDIO_ENABLE = no
MIDI_ENABLE = no
BLUETOOTH_ENABLE = no

View File

@@ -0,0 +1,42 @@
/* Copyright 2019 /u/KeepItUnder
*
* 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
#include "quantum.h"
#define XXX KC_NO
/* This a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_all( \
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, \
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, \
k40, k41, k42, k45, k4a, k4b, k4c, k4d, k4e, k4f \
) { \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, }, \
{ k40, k41, k42, XXX, XXX, k45, XXX, XXX, XXX, k4a, k4b, k4c, k4d, k4e, k4f } \
}

View File

@@ -0,0 +1,57 @@
/*
ChibiOS Driver element - Copyright (C) 2019 /u/KeepItUnder
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "hal.h"
#if HAL_USE_PAL || defined(__DOXYGEN__)
/**
* @brief PAL setup.
* @details Digital I/O ports static configuration as defined in @p board.h.
* This variable is used by the HAL when initializing the PAL driver.
*/
const PALConfig pal_default_config = {
# if NUC123_HAS_GPIOA
{VAL_GPIOA_PMD, VAL_GPIOA_OFFD, VAL_GPIOA_DMASK, VAL_GPIOA_DBEN, VAL_GPIOA_IMD, VAL_GPIOA_IEN, VAL_GPIOA_ISRC, VAL_GPIOA_DOUT},
# endif
# if NUC123_HAS_GPIOB
{VAL_GPIOB_PMD, VAL_GPIOB_OFFD, VAL_GPIOB_DMASK, VAL_GPIOB_DBEN, VAL_GPIOB_IMD, VAL_GPIOB_IEN, VAL_GPIOB_ISRC, VAL_GPIOB_DOUT},
# endif
# if NUC123_HAS_GPIOC
{VAL_GPIOC_PMD, VAL_GPIOC_OFFD, VAL_GPIOC_DMASK, VAL_GPIOC_DBEN, VAL_GPIOC_IMD, VAL_GPIOC_IEN, VAL_GPIOC_ISRC, VAL_GPIOC_DOUT},
# endif
# if NUC123_HAS_GPIOD
{VAL_GPIOD_PMD, VAL_GPIOD_OFFD, VAL_GPIOD_DMASK, VAL_GPIOD_DBEN, VAL_GPIOD_IMD, VAL_GPIOD_IEN, VAL_GPIOD_ISRC, VAL_GPIOD_DOUT},
# endif
# if NUC123_HAS_GPIOF
{VAL_GPIOF_PMD, VAL_GPIOF_OFFD, VAL_GPIOF_DMASK, VAL_GPIOF_DBEN, VAL_GPIOF_IMD, VAL_GPIOF_IEN, VAL_GPIOF_ISRC, VAL_GPIOF_DOUT},
# endif
};
#endif
/**
* @brief Early initialization code.
* @details This initialization must be performed just after stack setup
* and before any other initialization.
*/
void __early_init(void) {
NUC123_clock_init();
}
/**
* @brief Board-specific initialization code.
* @todo Add your board-specific code, if any.
*/
void boardInit(void) {}

View File

@@ -0,0 +1,961 @@
/*
ChibiOS Driver element - Copyright (C) 2019 /u/KeepItUnder
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef BOARD_H
#define BOARD_H
/*
* Setup for Generic NUC123 board.
*/
/*
* Board identifier.
*/
#define BOARD_NUC123SD4AN0
#define BOARD_NAME "Nuvoton NUC123SD4AN0 MCU"
/*
* Board oscillators-related settings.
* NOTE: LSE not fitted.
* NOTE: HSE is fitted.
*/
#if !defined(NUC123_LSECLK)
#define NUC123_LSECLK 0U
#endif
#define NUC123_LSEDRV (3U << 3U)
#if !defined(NUC123_HSECLK)
#define NUC123_HSECLK 12000000U
#endif
//#define NUC123_HSE_BYPASS
/*
* MCU type as defined in the NUC123 header.
*/
#define NUC123SD4AN0
/*
* GPIO Multi Function Pin USB Setup
* Requires Some GPIO pins to be disabled/set to USB
*/
/*
* IO pins assignments.
*/
#define GPIOA_PIN0 0U
#define GPIOA_PIN1 1U
#define GPIOA_PIN2 2U
#define GPIOA_PIN3 3U
#define GPIOA_PIN4 4U
#define GPIOA_PIN5 5U
#define GPIOA_PIN6 6U
#define GPIOA_PIN7 7U
#define GPIOA_PIN8 8U
#define GPIOA_PIN9 9U
#define GPIOA_SPI1_MISO0 10U
#define GPIOA_SPI1_CLK 11U
#define GPIOA_PWM0 12U
#define GPIOA_PWM1 13U
#define GPIOA_PWM2 14U
#define GPIOA_PWM3 15U
#define GPIOB_UART0_RXD 0U
#define GPIOB_UART0_TXD 1U
#define GPIOB_UART0_RTS 2U
#define GPIOB_UART0_CTS 3U
#define GPIOB_UART1_RXD 4U
#define GPIOB_UART1_TXD 5U
#define GPIOB_UART1_RTS 6U
#define GPIOB_UART1_CTS 7U
#define GPIOB_TM0 8U
#define GPIOB_TM1 9U
#define GPIOB_TM2 10U
#define GPIOB_PIN11 11U
#define GPIOB_CLK0 12U
#define GPIOB_PIN13 13U
#define GPIOB_INT0 14U
#define GPIOB_INT1 15U
#define GPIOC_PIN0 0U
#define GPIOC_PIN1 1U
#define GPIOC_PIN2 2U
#define GPIOC_PIN3 3U
#define GPIOC_PIN4 4U
#define GPIOC_PIN5 5U
#define GPIOC_PIN6 6U
#define GPIOC_PIN7 7U
#define GPIOC_PIN8 8U
#define GPIOC_PIN9 9U
#define GPIOC_PIN10 10U
#define GPIOC_PIN11 11U
#define GPIOC_PIN12 12U
#define GPIOC_PIN13 13U
#define GPIOC_PIN14 14U
#define GPIOC_PIN15 15U
#define GPIOD_ADC0 0U
#define GPIOD_ADC1 1U
#define GPIOD_ADC2 2U
#define GPIOD_ADC3 3U
#define GPIOD_ADC4 4U
#define GPIOD_ADC5 5U
#define GPIOD_PIN6 6U
#define GPIOD_PIN7 7U
#define GPIOD_PIN8 8U
#define GPIOD_PIN9 9U
#define GPIOD_PIN10 10U
#define GPIOD_PIN11 11U
#define GPIOD_PIN12 12U
#define GPIOD_PIN13 13U
#define GPIOD_PIN14 14U
#define GPIOD_PIN15 15U
#define GPIOE_PIN0 0U
#define GPIOE_PIN1 1U
#define GPIOE_PIN2 2U
#define GPIOE_PIN3 3U
#define GPIOE_PIN4 4U
#define GPIOE_PIN5 5U
#define GPIOE_PIN6 6U
#define GPIOE_PIN7 7U
#define GPIOE_PIN8 8U
#define GPIOE_PIN9 9U
#define GPIOE_PIN10 10U
#define GPIOE_PIN11 11U
#define GPIOE_PIN12 12U
#define GPIOE_PIN13 13U
#define GPIOE_PIN14 14U
#define GPIOE_PIN15 15U
#define GPIOF_OSC_OUT 0U
#define GPIOF_OSC_IN 1U
#define GPIOF_I2C0_SDA 2U
#define GPIOF_I2C0_SCL 3U
#define GPIOF_PIN4 4U
#define GPIOF_PIN5 5U
#define GPIOF_PIN6 6U
#define GPIOF_PIN7 7U
#define GPIOF_PIN8 8U
#define GPIOF_PIN9 9U
#define GPIOF_PIN10 10U
#define GPIOF_PIN11 11U
#define GPIOF_PIN12 12U
#define GPIOF_PIN13 13U
#define GPIOF_PIN14 14U
#define GPIOF_PIN15 15U
/*
* IO lines assignments.
*/
#define LINE_USB_DM PAL_LINE(GPIOA, 11U)
#define LINE_USB_DP PAL_LINE(GPIOA, 12U)
#define LINE_SWDIO PAL_LINE(GPIOA, 13U)
#define LINE_SWCLK PAL_LINE(GPIOA, 14U)
// #define LINE_SPI2_SCK PAL_LINE(GPIOB, 13U)
// #define LINE_SPI2_MISO PAL_LINE(GPIOB, 14U)
// #define LINE_SPI2_MOSI PAL_LINE(GPIOB, 15U)
#define LINE_OSC_IN PAL_LINE(GPIOF, 0U)
#define LINE_OSC_OUT PAL_LINE(GPIOF, 1U)
/*
* I/O ports initial setup, this configuration is established soon after reset
* in the initialization code.
* Please refer to the NUC123 Reference Manual for details.
*/
#define PIN_MODE_INPUT(n) (0U << ((n) * 2U))
#define PIN_MODE_OUTPUT(n) (1U << ((n) * 2U))
#define PIN_MODE_OPENDRAIN(n) (2U << ((n) * 2U))
#define PIN_MODE_QUASI(n) (3U << ((n) * 2U))
#define PIN_DIGITAL_EN(n) (0U << (n))
#define PIN_DIGITAL_DIS(n) (1U << (n))
#define PIN_DMASK_DIS(n) (0U << (n))
#define PIN_DMASK_EN(n) (1U << (n))
#define PIN_DBNCE_DIS(n) (0U << (n))
#define PIN_DBNCE_EN(n) (1U << (n))
#define PIN_IMD_EDGE(n) (0U << (n))
#define PIN_IMD_LVL(n) (1U << (n))
#define PIN_IEN_FELL_DIS(n) (0U << (n))
#define PIN_IEN_FELL_EN(n) (1U << (n))
#define PIN_IEN_REHL_DIS(n) ((0U << (n)) << 16)
#define PIN_IEN_REHL_EN(n) ((1U << (n)) << 16)
#define PIN_ISRC_EN(n) (1U << (n))
#define PIN_ISRC_DIS(n) (0U << (n))
#define PIN_ISRC_CLR(n) (1U << (n))
#define PIN_DATA_LOW(n) (0U << (n))
#define PIN_DATA_HIGH(n) (1U << (n))
/*
* GPIOA setup:
*
* PA0 - PIN0 (input pullup).
* PA1 - PIN1 (input pullup).
* PA2 - PIN2 (input pullup).
* PA3 - PIN3 (input pullup).
* PA4 - PIN4 (input pullup).
* PA5 - PIN5 (input pullup).
* PA6 - PIN6 (input pullup).
* PA7 - PIN7 (input pullup).
* PA8 - PIN8 (input pullup).
* PA9 - PIN9 (input pullup).
* PA10 - SPI1_MISO0 (input pullup).
* PA11 - SPI1_CLK (input floating).
* PA12 - PWM0 (input floating).
* PA13 - PWM1 (input pullup).
* PA14 - PWM2 (input pullup).
* PA15 - PWM3 (input pullup).
*/
#define VAL_GPIOA_PMD (PIN_MODE_INPUT(GPIOA_PIN0) | \
PIN_MODE_INPUT(GPIOA_PIN1) | \
PIN_MODE_INPUT(GPIOA_PIN2) | \
PIN_MODE_INPUT(GPIOA_PIN3) | \
PIN_MODE_INPUT(GPIOA_PIN4) | \
PIN_MODE_INPUT(GPIOA_PIN5) | \
PIN_MODE_INPUT(GPIOA_PIN6) | \
PIN_MODE_INPUT(GPIOA_PIN7) | \
PIN_MODE_INPUT(GPIOA_PIN8) | \
PIN_MODE_INPUT(GPIOA_PIN9) | \
PIN_MODE_INPUT(GPIOA_SPI1_MISO0) | \
PIN_MODE_INPUT(GPIOA_SPI1_CLK) | \
PIN_MODE_INPUT(GPIOA_PWM0) | \
PIN_MODE_INPUT(GPIOA_PWM1) | \
PIN_MODE_INPUT(GPIOA_PWM2) | \
PIN_MODE_INPUT(GPIOA_PWM3))
#define VAL_GPIOA_OFFD (PIN_DIGITAL_EN(GPIOA_PIN0) | \
PIN_DIGITAL_EN(GPIOA_PIN1) | \
PIN_DIGITAL_EN(GPIOA_PIN2) | \
PIN_DIGITAL_EN(GPIOA_PIN3) | \
PIN_DIGITAL_EN(GPIOA_PIN4) | \
PIN_DIGITAL_EN(GPIOA_PIN5) | \
PIN_DIGITAL_EN(GPIOA_PIN6) | \
PIN_DIGITAL_EN(GPIOA_PIN7) | \
PIN_DIGITAL_EN(GPIOA_PIN8) | \
PIN_DIGITAL_EN(GPIOA_PIN9) | \
PIN_DIGITAL_EN(GPIOA_SPI1_MISO0) | \
PIN_DIGITAL_EN(GPIOA_SPI1_CLK) | \
PIN_DIGITAL_EN(GPIOA_PWM0) | \
PIN_DIGITAL_EN(GPIOA_PWM1) | \
PIN_DIGITAL_EN(GPIOA_PWM2) | \
PIN_DIGITAL_EN(GPIOA_PWM3))
#define VAL_GPIOA_DMASK (PIN_DMASK_EN(GPIOA_PIN0) | \
PIN_DMASK_EN(GPIOA_PIN1) | \
PIN_DMASK_EN(GPIOA_PIN2) | \
PIN_DMASK_EN(GPIOA_PIN3) | \
PIN_DMASK_EN(GPIOA_PIN4) | \
PIN_DMASK_EN(GPIOA_PIN5) | \
PIN_DMASK_EN(GPIOA_PIN6) | \
PIN_DMASK_EN(GPIOA_PIN7) | \
PIN_DMASK_EN(GPIOA_PIN8) | \
PIN_DMASK_EN(GPIOA_PIN9) | \
PIN_DMASK_EN(GPIOA_SPI1_MISO0) | \
PIN_DMASK_EN(GPIOA_SPI1_CLK) | \
PIN_DMASK_EN(GPIOA_PWM0) | \
PIN_DMASK_EN(GPIOA_PWM1) | \
PIN_DMASK_EN(GPIOA_PWM2) | \
PIN_DMASK_EN(GPIOA_PWM3))
#define VAL_GPIOA_DBEN (PIN_DBNCE_EN(GPIOA_PIN0) | \
PIN_DBNCE_EN(GPIOA_PIN1) | \
PIN_DBNCE_EN(GPIOA_PIN2) | \
PIN_DBNCE_EN(GPIOA_PIN3) | \
PIN_DBNCE_EN(GPIOA_PIN4) | \
PIN_DBNCE_EN(GPIOA_PIN5) | \
PIN_DBNCE_EN(GPIOA_PIN6) | \
PIN_DBNCE_EN(GPIOA_PIN7) | \
PIN_DBNCE_EN(GPIOA_PIN8) | \
PIN_DBNCE_EN(GPIOA_PIN9) | \
PIN_DBNCE_EN(GPIOA_SPI1_MISO0) | \
PIN_DBNCE_EN(GPIOA_SPI1_CLK) | \
PIN_DBNCE_EN(GPIOA_PWM0) | \
PIN_DBNCE_EN(GPIOA_PWM1) | \
PIN_DBNCE_EN(GPIOA_PWM2) | \
PIN_DBNCE_EN(GPIOA_PWM3))
#define VAL_GPIOA_IMD (PIN_IMD_EDGE(GPIOA_PIN0) | \
PIN_IMD_EDGE(GPIOA_PIN1) | \
PIN_IMD_EDGE(GPIOA_PIN2) | \
PIN_IMD_EDGE(GPIOA_PIN3) | \
PIN_IMD_EDGE(GPIOA_PIN4) | \
PIN_IMD_EDGE(GPIOA_PIN5) | \
PIN_IMD_EDGE(GPIOA_PIN6) | \
PIN_IMD_EDGE(GPIOA_PIN7) | \
PIN_IMD_EDGE(GPIOA_PIN8) | \
PIN_IMD_EDGE(GPIOA_PIN9) | \
PIN_IMD_EDGE(GPIOA_SPI1_MISO0) | \
PIN_IMD_EDGE(GPIOA_SPI1_CLK) | \
PIN_IMD_EDGE(GPIOA_PWM0) | \
PIN_IMD_EDGE(GPIOA_PWM1) | \
PIN_IMD_EDGE(GPIOA_PWM2) | \
PIN_IMD_EDGE(GPIOA_PWM3))
#define VAL_GPIOA_IEN (PIN_IEN_FELL_DIS(GPIOA_PIN0) | \
PIN_IEN_FELL_DIS(GPIOA_PIN1) | \
PIN_IEN_FELL_DIS(GPIOA_PIN2) | \
PIN_IEN_FELL_DIS(GPIOA_PIN3) | \
PIN_IEN_FELL_DIS(GPIOA_PIN4) | \
PIN_IEN_FELL_DIS(GPIOA_PIN5) | \
PIN_IEN_FELL_DIS(GPIOA_PIN6) | \
PIN_IEN_FELL_DIS(GPIOA_PIN7) | \
PIN_IEN_FELL_DIS(GPIOA_PIN8) | \
PIN_IEN_FELL_DIS(GPIOA_PIN9) | \
PIN_IEN_FELL_DIS(GPIOA_SPI1_MISO0) | \
PIN_IEN_FELL_DIS(GPIOA_SPI1_CLK) | \
PIN_IEN_FELL_DIS(GPIOA_PWM0) | \
PIN_IEN_FELL_DIS(GPIOA_PWM1) | \
PIN_IEN_FELL_DIS(GPIOA_PWM2) | \
PIN_IEN_FELL_DIS(GPIOA_PWM3))
#define VAL_GPIOA_ISRC (PIN_ISRC_DIS(GPIOA_PIN0) | \
PIN_ISRC_DIS(GPIOA_PIN1) | \
PIN_ISRC_DIS(GPIOA_PIN2) | \
PIN_ISRC_DIS(GPIOA_PIN3) | \
PIN_ISRC_DIS(GPIOA_PIN4) | \
PIN_ISRC_DIS(GPIOA_PIN5) | \
PIN_ISRC_DIS(GPIOA_PIN6) | \
PIN_ISRC_DIS(GPIOA_PIN7) | \
PIN_ISRC_DIS(GPIOA_PIN8) | \
PIN_ISRC_DIS(GPIOA_PIN9) | \
PIN_ISRC_DIS(GPIOA_SPI1_MISO0) | \
PIN_ISRC_DIS(GPIOA_SPI1_CLK) | \
PIN_ISRC_DIS(GPIOA_PWM0) | \
PIN_ISRC_DIS(GPIOA_PWM1) | \
PIN_ISRC_DIS(GPIOA_PWM2) | \
PIN_ISRC_DIS(GPIOA_PWM3))
#define VAL_GPIOA_DOUT (PIN_DATA_LOW(GPIOA_PIN0) | \
PIN_DATA_LOW(GPIOA_PIN1) | \
PIN_DATA_LOW(GPIOA_PIN2) | \
PIN_DATA_LOW(GPIOA_PIN3) | \
PIN_DATA_LOW(GPIOA_PIN4) | \
PIN_DATA_LOW(GPIOA_PIN5) | \
PIN_DATA_LOW(GPIOA_PIN6) | \
PIN_DATA_LOW(GPIOA_PIN7) | \
PIN_DATA_LOW(GPIOA_PIN8) | \
PIN_DATA_LOW(GPIOA_PIN9) | \
PIN_DATA_LOW(GPIOA_SPI1_MISO0) | \
PIN_DATA_LOW(GPIOA_SPI1_CLK) | \
PIN_DATA_LOW(GPIOA_PWM0) | \
PIN_DATA_LOW(GPIOA_PWM1) | \
PIN_DATA_LOW(GPIOA_PWM2) | \
PIN_DATA_LOW(GPIOA_PWM3))
/*
* GPIOB setup:
*
* PB0 - UART0_RXD (input pullup).
* PB1 - UART0_TXD (output).
* PB2 - UART0_RTS (output).
* PB3 - UART0_CTS (output).
* PB4 - UART1_RXD (output).
* PB5 - UART1_TXD (output).
* PB6 - UART1_RTS (output).
* PB7 - UART1_CTS (output).
* PB8 - TM0 (input pullup).
* PB9 - TM1 (input pullup).
* PB10 - TM2 (input pullup).
* PB11 - PIN11 (input pullup).
* PB12 - CLK0 (output).
* PB13 - PIN13 (output).
* PB14 - INT0 (debug output).
* PB15 - INT1 (input pullup).
*/
#define VAL_GPIOB_PMD (PIN_MODE_INPUT(GPIOB_UART0_RXD) | \
PIN_MODE_OUTPUT(GPIOB_UART0_TXD) | \
PIN_MODE_OUTPUT(GPIOB_UART0_RTS) | \
PIN_MODE_OUTPUT(GPIOB_UART0_CTS) | \
PIN_MODE_OUTPUT(GPIOB_UART1_RXD) | \
PIN_MODE_OUTPUT(GPIOB_UART1_TXD) | \
PIN_MODE_OUTPUT(GPIOB_UART1_RTS) | \
PIN_MODE_OUTPUT(GPIOB_UART1_CTS) | \
PIN_MODE_INPUT(GPIOB_TM0) | \
PIN_MODE_INPUT(GPIOB_TM1) | \
PIN_MODE_INPUT(GPIOB_TM2) | \
PIN_MODE_INPUT(GPIOB_PIN11) | \
PIN_MODE_OUTPUT(GPIOB_CLK0) | \
PIN_MODE_OUTPUT(GPIOB_PIN13) | \
PIN_MODE_OUTPUT(GPIOB_INT0) | \
PIN_MODE_INPUT(GPIOB_INT1))
#define VAL_GPIOB_OFFD (PIN_DIGITAL_EN(GPIOB_UART0_RXD) | \
PIN_DIGITAL_DIS(GPIOB_UART0_TXD) | \
PIN_DIGITAL_DIS(GPIOB_UART0_RTS) | \
PIN_DIGITAL_DIS(GPIOB_UART0_CTS) | \
PIN_DIGITAL_DIS(GPIOB_UART1_RXD) | \
PIN_DIGITAL_DIS(GPIOB_UART1_TXD) | \
PIN_DIGITAL_DIS(GPIOB_UART1_RTS) | \
PIN_DIGITAL_DIS(GPIOB_UART1_CTS) | \
PIN_DIGITAL_DIS(GPIOB_TM0) | \
PIN_DIGITAL_EN(GPIOB_TM1) | \
PIN_DIGITAL_EN(GPIOB_TM2) | \
PIN_DIGITAL_EN(GPIOB_PIN11) | \
PIN_DIGITAL_DIS(GPIOB_CLK0) | \
PIN_DIGITAL_DIS(GPIOB_PIN13) | \
PIN_DIGITAL_DIS(GPIOB_INT0) | \
PIN_DIGITAL_EN(GPIOB_INT1))
#define VAL_GPIOB_DMASK (PIN_DMASK_EN(GPIOB_UART0_RXD) | \
PIN_DMASK_DIS(GPIOB_UART0_TXD) | \
PIN_DMASK_DIS(GPIOB_UART0_RTS) | \
PIN_DMASK_DIS(GPIOB_UART0_CTS) | \
PIN_DMASK_DIS(GPIOB_UART1_RXD) | \
PIN_DMASK_DIS(GPIOB_UART1_TXD) | \
PIN_DMASK_DIS(GPIOB_UART1_RTS) | \
PIN_DMASK_DIS(GPIOB_UART1_CTS) | \
PIN_DMASK_EN(GPIOB_TM0) | \
PIN_DMASK_EN(GPIOB_TM1) | \
PIN_DMASK_EN(GPIOB_TM2) | \
PIN_DMASK_EN(GPIOB_PIN11) | \
PIN_DMASK_DIS(GPIOB_CLK0) | \
PIN_DMASK_DIS(GPIOB_PIN13) | \
PIN_DMASK_DIS(GPIOB_INT0) | \
PIN_DMASK_EN(GPIOB_INT1))
#define VAL_GPIOB_DBEN (PIN_DBNCE_EN(GPIOB_UART0_RXD) | \
PIN_DBNCE_DIS(GPIOB_UART0_TXD) | \
PIN_DBNCE_DIS(GPIOB_UART0_RTS) | \
PIN_DBNCE_DIS(GPIOB_UART0_CTS) | \
PIN_DBNCE_DIS(GPIOB_UART1_RXD) | \
PIN_DBNCE_DIS(GPIOB_UART1_TXD) | \
PIN_DBNCE_DIS(GPIOB_UART1_RTS) | \
PIN_DBNCE_DIS(GPIOB_UART1_CTS) | \
PIN_DBNCE_EN(GPIOB_TM0) | \
PIN_DBNCE_EN(GPIOB_TM1) | \
PIN_DBNCE_EN(GPIOB_TM2) | \
PIN_DBNCE_EN(GPIOB_PIN11) | \
PIN_DBNCE_DIS(GPIOB_CLK0) | \
PIN_DBNCE_DIS(GPIOB_PIN13) | \
PIN_DBNCE_DIS(GPIOB_INT0) | \
PIN_DBNCE_EN(GPIOB_INT1))
#define VAL_GPIOB_IMD (PIN_IMD_EDGE(GPIOB_UART0_RXD) | \
PIN_IMD_EDGE(GPIOB_UART0_TXD) | \
PIN_IMD_EDGE(GPIOB_UART0_RTS) | \
PIN_IMD_EDGE(GPIOB_UART0_CTS) | \
PIN_IMD_EDGE(GPIOB_UART1_RXD) | \
PIN_IMD_EDGE(GPIOB_UART1_TXD) | \
PIN_IMD_EDGE(GPIOB_UART1_RTS) | \
PIN_IMD_EDGE(GPIOB_UART1_CTS) | \
PIN_IMD_EDGE(GPIOB_TM0) | \
PIN_IMD_EDGE(GPIOB_TM1) | \
PIN_IMD_EDGE(GPIOB_TM2) | \
PIN_IMD_EDGE(GPIOB_PIN11) | \
PIN_IMD_EDGE(GPIOB_CLK0) | \
PIN_IMD_EDGE(GPIOB_PIN13) | \
PIN_IMD_EDGE(GPIOB_INT0) | \
PIN_IMD_EDGE(GPIOB_INT1))
#define VAL_GPIOB_IEN (PIN_IEN_FELL_DIS(GPIOB_UART0_RXD) | \
PIN_IEN_FELL_DIS(GPIOB_UART0_TXD) | \
PIN_IEN_FELL_DIS(GPIOB_UART0_RTS) | \
PIN_IEN_FELL_DIS(GPIOB_UART0_CTS) | \
PIN_IEN_FELL_DIS(GPIOB_UART1_RXD) | \
PIN_IEN_FELL_DIS(GPIOB_UART1_TXD) | \
PIN_IEN_FELL_DIS(GPIOB_UART1_RTS) | \
PIN_IEN_FELL_DIS(GPIOB_UART1_CTS) | \
PIN_IEN_FELL_DIS(GPIOB_TM0) | \
PIN_IEN_FELL_DIS(GPIOB_TM1) | \
PIN_IEN_FELL_DIS(GPIOB_TM2) | \
PIN_IEN_FELL_DIS(GPIOB_PIN11) | \
PIN_IEN_FELL_DIS(GPIOB_CLK0) | \
PIN_IEN_FELL_DIS(GPIOB_PIN13) | \
PIN_IEN_FELL_DIS(GPIOB_INT0) | \
PIN_IEN_FELL_DIS(GPIOB_INT1))
#define VAL_GPIOB_ISRC (PIN_ISRC_DIS(GPIOB_UART0_RXD) | \
PIN_ISRC_DIS(GPIOB_UART0_TXD) | \
PIN_ISRC_DIS(GPIOB_UART0_RTS) | \
PIN_ISRC_DIS(GPIOB_UART0_CTS) | \
PIN_ISRC_DIS(GPIOB_UART1_RXD) | \
PIN_ISRC_DIS(GPIOB_UART1_TXD) | \
PIN_ISRC_DIS(GPIOB_UART1_RTS) | \
PIN_ISRC_DIS(GPIOB_UART1_CTS) | \
PIN_ISRC_DIS(GPIOB_TM0) | \
PIN_ISRC_DIS(GPIOB_TM1) | \
PIN_ISRC_DIS(GPIOB_TM2) | \
PIN_ISRC_DIS(GPIOB_PIN11) | \
PIN_ISRC_DIS(GPIOB_CLK0) | \
PIN_ISRC_DIS(GPIOB_PIN13) | \
PIN_ISRC_DIS(GPIOB_INT0) | \
PIN_ISRC_DIS(GPIOB_INT1))
#define VAL_GPIOB_DOUT (PIN_DATA_LOW(GPIOB_UART0_RXD) | \
PIN_DATA_LOW(GPIOB_UART0_TXD) | \
PIN_DATA_LOW(GPIOB_UART0_RTS) | \
PIN_DATA_LOW(GPIOB_UART0_CTS) | \
PIN_DATA_LOW(GPIOB_UART1_RXD) | \
PIN_DATA_LOW(GPIOB_UART1_TXD) | \
PIN_DATA_LOW(GPIOB_UART1_RTS) | \
PIN_DATA_LOW(GPIOB_UART1_CTS) | \
PIN_DATA_LOW(GPIOB_TM0) | \
PIN_DATA_LOW(GPIOB_TM1) | \
PIN_DATA_LOW(GPIOB_TM2) | \
PIN_DATA_LOW(GPIOB_PIN11) | \
PIN_DATA_LOW(GPIOB_CLK0) | \
PIN_DATA_LOW(GPIOB_PIN13) | \
PIN_DATA_LOW(GPIOB_INT0) | \
PIN_DATA_LOW(GPIOB_INT1))
/*
* GPIOC setup:
*
* PC0 - PIN0 (input pullup).
* PC1 - PIN1 (input pullup).
* PC2 - PIN2 (input pullup).
* PC3 - PIN3 (input pullup).
* PC4 - PIN4 (output).
* PC5 - PIN5 (output).
* PC6 - PIN6 (input pullup).
* PC7 - PIN7 (input pullup).
* PC8 - PIN8 (input pullup).
* PC9 - PIN9 (input pullup).
* PC10 - PIN10 (input pullup).
* PC11 - PIN11 (input pullup).
* PC12 - PIN12 (input pullup).
* PC13 - PIN13 (input pullup).
* PC14 - PIN14 (input pullup).
* PC15 - PIN15 (input pullup).
*/
#define VAL_GPIOC_PMD (PIN_MODE_INPUT(GPIOC_PIN0) | \
PIN_MODE_INPUT(GPIOC_PIN1) | \
PIN_MODE_INPUT(GPIOC_PIN2) | \
PIN_MODE_INPUT(GPIOC_PIN3) | \
PIN_MODE_OUTPUT(GPIOC_PIN4) | \
PIN_MODE_OUTPUT(GPIOC_PIN5) | \
PIN_MODE_INPUT(GPIOC_PIN6) | \
PIN_MODE_INPUT(GPIOC_PIN7) | \
PIN_MODE_INPUT(GPIOC_PIN8) | \
PIN_MODE_INPUT(GPIOC_PIN9) | \
PIN_MODE_INPUT(GPIOC_PIN10) | \
PIN_MODE_INPUT(GPIOC_PIN11) | \
PIN_MODE_INPUT(GPIOC_PIN12) | \
PIN_MODE_INPUT(GPIOC_PIN13) | \
PIN_MODE_INPUT(GPIOC_PIN14) | \
PIN_MODE_INPUT(GPIOC_PIN15))
#define VAL_GPIOC_OFFD (PIN_DIGITAL_EN(GPIOC_PIN0) | \
PIN_DIGITAL_EN(GPIOC_PIN1) | \
PIN_DIGITAL_EN(GPIOC_PIN2) | \
PIN_DIGITAL_EN(GPIOC_PIN3) | \
PIN_DIGITAL_DIS(GPIOC_PIN4) | \
PIN_DIGITAL_DIS(GPIOC_PIN5) | \
PIN_DIGITAL_EN(GPIOC_PIN6) | \
PIN_DIGITAL_EN(GPIOC_PIN7) | \
PIN_DIGITAL_EN(GPIOC_PIN8) | \
PIN_DIGITAL_EN(GPIOC_PIN9) | \
PIN_DIGITAL_EN(GPIOC_PIN10) | \
PIN_DIGITAL_EN(GPIOC_PIN11) | \
PIN_DIGITAL_EN(GPIOC_PIN12) | \
PIN_DIGITAL_EN(GPIOC_PIN13) | \
PIN_DIGITAL_EN(GPIOC_PIN14) | \
PIN_DIGITAL_EN(GPIOC_PIN15))
#define VAL_GPIOC_DMASK (PIN_DMASK_EN(GPIOC_PIN0) | \
PIN_DMASK_EN(GPIOC_PIN1) | \
PIN_DMASK_EN(GPIOC_PIN2) | \
PIN_DMASK_EN(GPIOC_PIN3) | \
PIN_DMASK_DIS(GPIOC_PIN4) | \
PIN_DMASK_DIS(GPIOC_PIN5) | \
PIN_DMASK_EN(GPIOC_PIN6) | \
PIN_DMASK_EN(GPIOC_PIN7) | \
PIN_DMASK_EN(GPIOC_PIN8) | \
PIN_DMASK_EN(GPIOC_PIN9) | \
PIN_DMASK_EN(GPIOC_PIN10) | \
PIN_DMASK_EN(GPIOC_PIN11) | \
PIN_DMASK_EN(GPIOC_PIN12) | \
PIN_DMASK_EN(GPIOC_PIN13) | \
PIN_DMASK_EN(GPIOC_PIN14) | \
PIN_DMASK_EN(GPIOC_PIN15))
#define VAL_GPIOC_DBEN (PIN_DBNCE_EN(GPIOC_PIN0) | \
PIN_DBNCE_EN(GPIOC_PIN1) | \
PIN_DBNCE_EN(GPIOC_PIN2) | \
PIN_DBNCE_EN(GPIOC_PIN3) | \
PIN_DBNCE_DIS(GPIOC_PIN4) | \
PIN_DBNCE_DIS(GPIOC_PIN5) | \
PIN_DBNCE_EN(GPIOC_PIN6) | \
PIN_DBNCE_EN(GPIOC_PIN7) | \
PIN_DBNCE_EN(GPIOC_PIN8) | \
PIN_DBNCE_EN(GPIOC_PIN9) | \
PIN_DBNCE_EN(GPIOC_PIN10) | \
PIN_DBNCE_EN(GPIOC_PIN11) | \
PIN_DBNCE_EN(GPIOC_PIN12) | \
PIN_DBNCE_EN(GPIOC_PIN13) | \
PIN_DBNCE_EN(GPIOC_PIN14) | \
PIN_DBNCE_EN(GPIOC_PIN15))
#define VAL_GPIOC_IMD (PIN_IMD_EDGE(GPIOC_PIN0) | \
PIN_IMD_EDGE(GPIOC_PIN1) | \
PIN_IMD_EDGE(GPIOC_PIN2) | \
PIN_IMD_EDGE(GPIOC_PIN3) | \
PIN_IMD_EDGE(GPIOC_PIN4) | \
PIN_IMD_EDGE(GPIOC_PIN5) | \
PIN_IMD_EDGE(GPIOC_PIN6) | \
PIN_IMD_EDGE(GPIOC_PIN7) | \
PIN_IMD_EDGE(GPIOC_PIN8) | \
PIN_IMD_EDGE(GPIOC_PIN9) | \
PIN_IMD_EDGE(GPIOC_PIN10) | \
PIN_IMD_EDGE(GPIOC_PIN11) | \
PIN_IMD_EDGE(GPIOC_PIN12) | \
PIN_IMD_EDGE(GPIOC_PIN13) | \
PIN_IMD_EDGE(GPIOC_PIN14) | \
PIN_IMD_EDGE(GPIOC_PIN15))
#define VAL_GPIOC_IEN (PIN_IEN_FELL_DIS(GPIOC_PIN0) | \
PIN_IEN_FELL_DIS(GPIOC_PIN1) | \
PIN_IEN_FELL_DIS(GPIOC_PIN2) | \
PIN_IEN_FELL_DIS(GPIOC_PIN3) | \
PIN_IEN_FELL_DIS(GPIOC_PIN4) | \
PIN_IEN_FELL_DIS(GPIOC_PIN5) | \
PIN_IEN_FELL_DIS(GPIOC_PIN6) | \
PIN_IEN_FELL_DIS(GPIOC_PIN7) | \
PIN_IEN_FELL_DIS(GPIOC_PIN8) | \
PIN_IEN_FELL_DIS(GPIOC_PIN9) | \
PIN_IEN_FELL_DIS(GPIOC_PIN10) | \
PIN_IEN_FELL_DIS(GPIOC_PIN11) | \
PIN_IEN_FELL_DIS(GPIOC_PIN12) | \
PIN_IEN_FELL_DIS(GPIOC_PIN13) | \
PIN_IEN_FELL_DIS(GPIOC_PIN14) | \
PIN_IEN_FELL_DIS(GPIOC_PIN15))
#define VAL_GPIOC_ISRC (PIN_ISRC_DIS(GPIOC_PIN0) | \
PIN_ISRC_DIS(GPIOC_PIN1) | \
PIN_ISRC_DIS(GPIOC_PIN2) | \
PIN_ISRC_DIS(GPIOC_PIN3) | \
PIN_ISRC_DIS(GPIOC_PIN4) | \
PIN_ISRC_DIS(GPIOC_PIN5) | \
PIN_ISRC_DIS(GPIOC_PIN6) | \
PIN_ISRC_DIS(GPIOC_PIN7) | \
PIN_ISRC_DIS(GPIOC_PIN8) | \
PIN_ISRC_DIS(GPIOC_PIN9) | \
PIN_ISRC_DIS(GPIOC_PIN10) | \
PIN_ISRC_DIS(GPIOC_PIN11) | \
PIN_ISRC_DIS(GPIOC_PIN12) | \
PIN_ISRC_DIS(GPIOC_PIN13) | \
PIN_ISRC_DIS(GPIOC_PIN14) | \
PIN_ISRC_DIS(GPIOC_PIN15))
#define VAL_GPIOC_DOUT (PIN_DATA_LOW(GPIOC_PIN0) | \
PIN_DATA_LOW(GPIOC_PIN1) | \
PIN_DATA_LOW(GPIOC_PIN2) | \
PIN_DATA_LOW(GPIOC_PIN3) | \
PIN_DATA_LOW(GPIOC_PIN4) | \
PIN_DATA_LOW(GPIOC_PIN5) | \
PIN_DATA_LOW(GPIOC_PIN6) | \
PIN_DATA_LOW(GPIOC_PIN7) | \
PIN_DATA_LOW(GPIOC_PIN8) | \
PIN_DATA_LOW(GPIOC_PIN9) | \
PIN_DATA_LOW(GPIOC_PIN10) | \
PIN_DATA_LOW(GPIOC_PIN11) | \
PIN_DATA_LOW(GPIOC_PIN12) | \
PIN_DATA_LOW(GPIOC_PIN13) | \
PIN_DATA_LOW(GPIOC_PIN14) | \
PIN_DATA_LOW(GPIOC_PIN15))
/*
* GPIOD setup:
*
* PD0 - ADC0 (input pullup).
* PD1 - ADC1 (input pullup).
* PD2 - ADC2 (input pullup).
* PD3 - ADC3 (output).
* PD4 - ADC4 (output).
* PD5 - ADC5 (output).
* PD6 - PIN6 (input pullup).
* PD7 - PIN7 (input pullup).
* PD8 - PIN8 (input pullup).
* PD9 - PIN9 (output).
* PD10 - PIN10 (debug output).
* PD11 - PIN11 (output).
* PD12 - PIN12 (input pullup).
* PD13 - PIN13 (input pullup).
* PD14 - PIN14 (input pullup).
* PD15 - PIN15 (input pullup).
*/
#define VAL_GPIOD_PMD (PIN_MODE_INPUT(GPIOD_ADC0) | \
PIN_MODE_INPUT(GPIOD_ADC1) | \
PIN_MODE_INPUT(GPIOD_ADC2) | \
PIN_MODE_OUTPUT(GPIOD_ADC3) | \
PIN_MODE_OUTPUT(GPIOD_ADC4) | \
PIN_MODE_OUTPUT(GPIOD_ADC5) | \
PIN_MODE_INPUT(GPIOD_PIN6) | \
PIN_MODE_INPUT(GPIOD_PIN7) | \
PIN_MODE_INPUT(GPIOD_PIN8) | \
PIN_MODE_OUTPUT(GPIOD_PIN9) | \
PIN_MODE_OUTPUT(GPIOD_PIN10) | \
PIN_MODE_OUTPUT(GPIOD_PIN11) | \
PIN_MODE_INPUT(GPIOD_PIN12) | \
PIN_MODE_INPUT(GPIOD_PIN13) | \
PIN_MODE_INPUT(GPIOD_PIN14) | \
PIN_MODE_INPUT(GPIOD_PIN15))
#define VAL_GPIOD_OFFD (PIN_DIGITAL_EN(GPIOD_ADC0) | \
PIN_DIGITAL_EN(GPIOD_ADC1) | \
PIN_DIGITAL_EN(GPIOD_ADC2) | \
PIN_DIGITAL_DIS(GPIOD_ADC3) | \
PIN_DIGITAL_DIS(GPIOD_ADC4) | \
PIN_DIGITAL_DIS(GPIOD_ADC5) | \
PIN_DIGITAL_EN(GPIOD_PIN6) | \
PIN_DIGITAL_EN(GPIOD_PIN7) | \
PIN_DIGITAL_EN(GPIOD_PIN8) | \
PIN_DIGITAL_DIS(GPIOD_PIN9) | \
PIN_DIGITAL_DIS(GPIOD_PIN10) | \
PIN_DIGITAL_DIS(GPIOD_PIN11) | \
PIN_DIGITAL_EN(GPIOD_PIN12) | \
PIN_DIGITAL_EN(GPIOD_PIN13) | \
PIN_DIGITAL_EN(GPIOD_PIN14) | \
PIN_DIGITAL_EN(GPIOD_PIN15))
#define VAL_GPIOD_DMASK (PIN_DMASK_EN(GPIOD_ADC0) | \
PIN_DMASK_EN(GPIOD_ADC1) | \
PIN_DMASK_EN(GPIOD_ADC2) | \
PIN_DMASK_DIS(GPIOD_ADC3) | \
PIN_DMASK_DIS(GPIOD_ADC4) | \
PIN_DMASK_DIS(GPIOD_ADC5) | \
PIN_DMASK_EN(GPIOD_PIN6) | \
PIN_DMASK_EN(GPIOD_PIN7) | \
PIN_DMASK_EN(GPIOD_PIN8) | \
PIN_DMASK_DIS(GPIOD_PIN9) | \
PIN_DMASK_DIS(GPIOD_PIN10) | \
PIN_DMASK_DIS(GPIOD_PIN11) | \
PIN_DMASK_EN(GPIOD_PIN12) | \
PIN_DMASK_EN(GPIOD_PIN13) | \
PIN_DMASK_EN(GPIOD_PIN14) | \
PIN_DMASK_EN(GPIOD_PIN15))
#define VAL_GPIOD_DBEN (PIN_DBNCE_EN(GPIOD_ADC0) | \
PIN_DBNCE_EN(GPIOD_ADC1) | \
PIN_DBNCE_EN(GPIOD_ADC2) | \
PIN_DBNCE_DIS(GPIOD_ADC3) | \
PIN_DBNCE_DIS(GPIOD_ADC4) | \
PIN_DBNCE_DIS(GPIOD_ADC5) | \
PIN_DBNCE_EN(GPIOD_PIN6) | \
PIN_DBNCE_EN(GPIOD_PIN7) | \
PIN_DBNCE_EN(GPIOD_PIN8) | \
PIN_DBNCE_DIS(GPIOD_PIN9) | \
PIN_DBNCE_DIS(GPIOD_PIN10) | \
PIN_DBNCE_DIS(GPIOD_PIN11) | \
PIN_DBNCE_EN(GPIOD_PIN12) | \
PIN_DBNCE_EN(GPIOD_PIN13) | \
PIN_DBNCE_EN(GPIOD_PIN14) | \
PIN_DBNCE_EN(GPIOD_PIN15))
#define VAL_GPIOD_IMD (PIN_IMD_EDGE(GPIOD_ADC0) | \
PIN_IMD_EDGE(GPIOD_ADC1) | \
PIN_IMD_EDGE(GPIOD_ADC2) | \
PIN_IMD_EDGE(GPIOD_ADC3) | \
PIN_IMD_EDGE(GPIOD_ADC4) | \
PIN_IMD_EDGE(GPIOD_ADC5) | \
PIN_IMD_EDGE(GPIOD_PIN6) | \
PIN_IMD_EDGE(GPIOD_PIN7) | \
PIN_IMD_EDGE(GPIOD_PIN8) | \
PIN_IMD_EDGE(GPIOD_PIN9) | \
PIN_IMD_EDGE(GPIOD_PIN10) | \
PIN_IMD_EDGE(GPIOD_PIN11) | \
PIN_IMD_EDGE(GPIOD_PIN12) | \
PIN_IMD_EDGE(GPIOD_PIN13) | \
PIN_IMD_EDGE(GPIOD_PIN14) | \
PIN_IMD_EDGE(GPIOD_PIN15))
#define VAL_GPIOD_IEN (PIN_IEN_FELL_DIS(GPIOD_ADC0) | \
PIN_IEN_FELL_DIS(GPIOD_ADC1) | \
PIN_IEN_FELL_DIS(GPIOD_ADC2) | \
PIN_IEN_FELL_DIS(GPIOD_ADC3) | \
PIN_IEN_FELL_DIS(GPIOD_ADC4) | \
PIN_IEN_FELL_DIS(GPIOD_ADC5) | \
PIN_IEN_FELL_DIS(GPIOD_PIN6) | \
PIN_IEN_FELL_DIS(GPIOD_PIN7) | \
PIN_IEN_FELL_DIS(GPIOD_PIN8) | \
PIN_IEN_FELL_DIS(GPIOD_PIN9) | \
PIN_IEN_FELL_DIS(GPIOD_PIN10) | \
PIN_IEN_FELL_DIS(GPIOD_PIN11) | \
PIN_IEN_FELL_DIS(GPIOD_PIN12) | \
PIN_IEN_FELL_DIS(GPIOD_PIN13) | \
PIN_IEN_FELL_DIS(GPIOD_PIN14) | \
PIN_IEN_FELL_DIS(GPIOD_PIN15))
#define VAL_GPIOD_ISRC (PIN_ISRC_DIS(GPIOD_ADC0) | \
PIN_ISRC_DIS(GPIOD_ADC1) | \
PIN_ISRC_DIS(GPIOD_ADC2) | \
PIN_ISRC_DIS(GPIOD_ADC3) | \
PIN_ISRC_DIS(GPIOD_ADC4) | \
PIN_ISRC_DIS(GPIOD_ADC5) | \
PIN_ISRC_DIS(GPIOD_PIN6) | \
PIN_ISRC_DIS(GPIOD_PIN7) | \
PIN_ISRC_DIS(GPIOD_PIN8) | \
PIN_ISRC_DIS(GPIOD_PIN9) | \
PIN_ISRC_DIS(GPIOD_PIN10) | \
PIN_ISRC_DIS(GPIOD_PIN11) | \
PIN_ISRC_DIS(GPIOD_PIN12) | \
PIN_ISRC_DIS(GPIOD_PIN13) | \
PIN_ISRC_DIS(GPIOD_PIN14) | \
PIN_ISRC_DIS(GPIOD_PIN15))
#define VAL_GPIOD_DOUT (PIN_DATA_LOW(GPIOD_ADC0) | \
PIN_DATA_LOW(GPIOD_ADC1) | \
PIN_DATA_LOW(GPIOD_ADC2) | \
PIN_DATA_LOW(GPIOD_ADC3) | \
PIN_DATA_LOW(GPIOD_ADC4) | \
PIN_DATA_LOW(GPIOD_ADC5) | \
PIN_DATA_LOW(GPIOD_PIN6) | \
PIN_DATA_LOW(GPIOD_PIN7) | \
PIN_DATA_LOW(GPIOD_PIN8) | \
PIN_DATA_LOW(GPIOD_PIN9) | \
PIN_DATA_LOW(GPIOD_PIN10) | \
PIN_DATA_LOW(GPIOD_PIN11) | \
PIN_DATA_LOW(GPIOD_PIN12) | \
PIN_DATA_LOW(GPIOD_PIN13) | \
PIN_DATA_LOW(GPIOD_PIN14) | \
PIN_DATA_LOW(GPIOD_PIN15))
/*
* GPIOF setup:
*
* PF0 - OSC_IN (input floating).
* PF1 - OSC_OUT (input floating).
* PF2 - I2C0_SDA (input pullup).
* PF3 - I2C0_SCL (input pullup).
* PF4 - PIN4 (input pullup).
* PF5 - PIN5 (input pullup).
* PF6 - PIN6 (input pullup).
* PF7 - PIN7 (input pullup).
* PF8 - PIN8 (input pullup).
* PF9 - PIN9 (input pullup).
* PF10 - PIN10 (input pullup).
* PF11 - PIN11 (input pullup).
* PF12 - PIN12 (input pullup).
* PF13 - PIN13 (input pullup).
* PF14 - PIN14 (input pullup).
* PF15 - PIN15 (input pullup).
*/
#define VAL_GPIOF_PMD (PIN_MODE_QUASI(GPIOF_OSC_IN) | \
PIN_MODE_QUASI(GPIOF_OSC_OUT) | \
PIN_MODE_INPUT(GPIOF_I2C0_SDA) | \
PIN_MODE_INPUT(GPIOF_I2C0_SCL) | \
PIN_MODE_INPUT(GPIOF_PIN4) | \
PIN_MODE_INPUT(GPIOF_PIN5) | \
PIN_MODE_INPUT(GPIOF_PIN6) | \
PIN_MODE_INPUT(GPIOF_PIN7) | \
PIN_MODE_INPUT(GPIOF_PIN8) | \
PIN_MODE_INPUT(GPIOF_PIN9) | \
PIN_MODE_INPUT(GPIOF_PIN10) | \
PIN_MODE_INPUT(GPIOF_PIN11) | \
PIN_MODE_INPUT(GPIOF_PIN12) | \
PIN_MODE_INPUT(GPIOF_PIN13) | \
PIN_MODE_INPUT(GPIOF_PIN14) | \
PIN_MODE_INPUT(GPIOF_PIN15))
#define VAL_GPIOF_OFFD (PIN_DIGITAL_DIS(GPIOF_OSC_IN) | \
PIN_DIGITAL_DIS(GPIOF_OSC_OUT) | \
PIN_DIGITAL_EN(GPIOF_I2C0_SDA) | \
PIN_DIGITAL_EN(GPIOF_I2C0_SCL) | \
PIN_DIGITAL_EN(GPIOF_PIN4) | \
PIN_DIGITAL_EN(GPIOF_PIN5) | \
PIN_DIGITAL_EN(GPIOF_PIN6) | \
PIN_DIGITAL_EN(GPIOF_PIN7) | \
PIN_DIGITAL_EN(GPIOF_PIN8) | \
PIN_DIGITAL_EN(GPIOF_PIN9) | \
PIN_DIGITAL_EN(GPIOF_PIN10) | \
PIN_DIGITAL_EN(GPIOF_PIN11) | \
PIN_DIGITAL_EN(GPIOF_PIN12) | \
PIN_DIGITAL_EN(GPIOF_PIN13) | \
PIN_DIGITAL_EN(GPIOF_PIN14) | \
PIN_DIGITAL_EN(GPIOF_PIN15))
#define VAL_GPIOF_DMASK (PIN_DMASK_DIS(GPIOF_OSC_IN) | \
PIN_DMASK_DIS(GPIOF_OSC_OUT) | \
PIN_DMASK_EN(GPIOF_I2C0_SDA) | \
PIN_DMASK_EN(GPIOF_I2C0_SCL) | \
PIN_DMASK_EN(GPIOF_PIN4) | \
PIN_DMASK_EN(GPIOF_PIN5) | \
PIN_DMASK_EN(GPIOF_PIN6) | \
PIN_DMASK_EN(GPIOF_PIN7) | \
PIN_DMASK_EN(GPIOF_PIN8) | \
PIN_DMASK_EN(GPIOF_PIN9) | \
PIN_DMASK_EN(GPIOF_PIN10) | \
PIN_DMASK_EN(GPIOF_PIN11) | \
PIN_DMASK_EN(GPIOF_PIN12) | \
PIN_DMASK_EN(GPIOF_PIN13) | \
PIN_DMASK_EN(GPIOF_PIN14) | \
PIN_DMASK_EN(GPIOF_PIN15))
#define VAL_GPIOF_DBEN (PIN_DBNCE_DIS(GPIOF_OSC_IN) | \
PIN_DBNCE_DIS(GPIOF_OSC_OUT) | \
PIN_DBNCE_EN(GPIOF_I2C0_SDA) | \
PIN_DBNCE_EN(GPIOF_I2C0_SCL) | \
PIN_DBNCE_EN(GPIOF_PIN4) | \
PIN_DBNCE_EN(GPIOF_PIN5) | \
PIN_DBNCE_EN(GPIOF_PIN6) | \
PIN_DBNCE_EN(GPIOF_PIN7) | \
PIN_DBNCE_EN(GPIOF_PIN8) | \
PIN_DBNCE_EN(GPIOF_PIN9) | \
PIN_DBNCE_EN(GPIOF_PIN10) | \
PIN_DBNCE_EN(GPIOF_PIN11) | \
PIN_DBNCE_EN(GPIOF_PIN12) | \
PIN_DBNCE_EN(GPIOF_PIN13) | \
PIN_DBNCE_EN(GPIOF_PIN14) | \
PIN_DBNCE_EN(GPIOF_PIN15))
#define VAL_GPIOF_IMD (PIN_IMD_LVL(GPIOF_OSC_IN) | \
PIN_IMD_LVL(GPIOF_OSC_OUT) | \
PIN_IMD_EDGE(GPIOF_I2C0_SDA) | \
PIN_IMD_EDGE(GPIOF_I2C0_SCL) | \
PIN_IMD_EDGE(GPIOF_PIN4) | \
PIN_IMD_EDGE(GPIOF_PIN5) | \
PIN_IMD_EDGE(GPIOF_PIN6) | \
PIN_IMD_EDGE(GPIOF_PIN7) | \
PIN_IMD_EDGE(GPIOF_PIN8) | \
PIN_IMD_EDGE(GPIOF_PIN9) | \
PIN_IMD_EDGE(GPIOF_PIN10) | \
PIN_IMD_EDGE(GPIOF_PIN11) | \
PIN_IMD_EDGE(GPIOF_PIN12) | \
PIN_IMD_EDGE(GPIOF_PIN13) | \
PIN_IMD_EDGE(GPIOF_PIN14) | \
PIN_IMD_EDGE(GPIOF_PIN15))
#define VAL_GPIOF_IEN (PIN_IEN_FELL_DIS(GPIOF_OSC_IN) | \
PIN_IEN_FELL_DIS(GPIOF_OSC_OUT) | \
PIN_IEN_FELL_DIS(GPIOF_I2C0_SDA) | \
PIN_IEN_FELL_DIS(GPIOF_I2C0_SCL) | \
PIN_IEN_FELL_DIS(GPIOF_PIN4) | \
PIN_IEN_FELL_DIS(GPIOF_PIN5) | \
PIN_IEN_FELL_DIS(GPIOF_PIN6) | \
PIN_IEN_FELL_DIS(GPIOF_PIN7) | \
PIN_IEN_FELL_DIS(GPIOF_PIN8) | \
PIN_IEN_FELL_DIS(GPIOF_PIN9) | \
PIN_IEN_FELL_DIS(GPIOF_PIN10) | \
PIN_IEN_FELL_DIS(GPIOF_PIN11) | \
PIN_IEN_FELL_DIS(GPIOF_PIN12) | \
PIN_IEN_FELL_DIS(GPIOF_PIN13) | \
PIN_IEN_FELL_DIS(GPIOF_PIN14) | \
PIN_IEN_FELL_DIS(GPIOF_PIN15))
#define VAL_GPIOF_ISRC (PIN_ISRC_DIS(GPIOF_OSC_IN) | \
PIN_ISRC_DIS(GPIOF_OSC_OUT) | \
PIN_ISRC_DIS(GPIOF_I2C0_SDA) | \
PIN_ISRC_DIS(GPIOF_I2C0_SCL) | \
PIN_ISRC_DIS(GPIOF_PIN4) | \
PIN_ISRC_DIS(GPIOF_PIN5) | \
PIN_ISRC_DIS(GPIOF_PIN6) | \
PIN_ISRC_DIS(GPIOF_PIN7) | \
PIN_ISRC_DIS(GPIOF_PIN8) | \
PIN_ISRC_DIS(GPIOF_PIN9) | \
PIN_ISRC_DIS(GPIOF_PIN10) | \
PIN_ISRC_DIS(GPIOF_PIN11) | \
PIN_ISRC_DIS(GPIOF_PIN12) | \
PIN_ISRC_DIS(GPIOF_PIN13) | \
PIN_ISRC_DIS(GPIOF_PIN14) | \
PIN_ISRC_DIS(GPIOF_PIN15))
#define VAL_GPIOF_DOUT (PIN_DATA_LOW(GPIOF_OSC_IN) | \
PIN_DATA_LOW(GPIOF_OSC_OUT) | \
PIN_DATA_LOW(GPIOF_I2C0_SDA) | \
PIN_DATA_LOW(GPIOF_I2C0_SCL) | \
PIN_DATA_LOW(GPIOF_PIN4) | \
PIN_DATA_LOW(GPIOF_PIN5) | \
PIN_DATA_LOW(GPIOF_PIN6) | \
PIN_DATA_LOW(GPIOF_PIN7) | \
PIN_DATA_LOW(GPIOF_PIN8) | \
PIN_DATA_LOW(GPIOF_PIN9) | \
PIN_DATA_LOW(GPIOF_PIN10) | \
PIN_DATA_LOW(GPIOF_PIN11) | \
PIN_DATA_LOW(GPIOF_PIN12) | \
PIN_DATA_LOW(GPIOF_PIN13) | \
PIN_DATA_LOW(GPIOF_PIN14) | \
PIN_DATA_LOW(GPIOF_PIN15))
#if !defined(_FROM_ASM_)
#ifdef __cplusplus
extern "C" {
#endif
void boardInit(void);
#ifdef __cplusplus
}
#endif
#endif /* _FROM_ASM_ */
#endif /* BOARD_H */

View File

@@ -0,0 +1,5 @@
# List of all the board related files.
BOARDSRC = $(BOARD_PATH)/boards/NUC123SD4AN0/board.c
# Required include directories
BOARDINC = $(BOARD_PATH)/boards/NUC123SD4AN0

View File

@@ -0,0 +1,23 @@
/* Copyright 2020 QMK
*
* 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
#define CH_CFG_ST_FREQUENCY 10000
#define CH_CFG_ST_TIMEDELTA 0
#define CH_CFG_USE_WAITEXIT TRUE
#include_next <chconf.h>

View File

@@ -0,0 +1,56 @@
/*
Copyright 2019 /u/KeepItUnder
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x445B
#define PRODUCT_ID 0x07AF
#define DEVICE_VER 0x0001
#define MANUFACTURER Ducky
#define PRODUCT One2sf
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { D11, B4, B5, B6, B7 }
#define MATRIX_COL_PINS { B10, B9, C13, C12, C11, C10, C9, C8, A15, A14, A13, D0, D1, D2,B15,B8 }
#define DIP_SWITCH_MATRIX_GRID { {0,14}, {1,14}, {2,14}, {3,14} }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
#define FORCE_NKRO
#define GPIO_INPUT_PIN_DELAY (NUC123_HCLK / 6 / 1000000L)

View File

@@ -0,0 +1,82 @@
{
"keyboard_name": "Ducky One 2 SF",
"layouts": {
"LAYOUT_all": {
"layout": [
{ "x": 0, "y": 0, "w": 1, "label": "ESC" },
{ "x": 1, "y": 0, "w": 1, "label": "1" },
{ "x": 2, "y": 0, "w": 1, "label": "2" },
{ "x": 3, "y": 0, "w": 1, "label": "3" },
{ "x": 4, "y": 0, "w": 1, "label": "4" },
{ "x": 5, "y": 0, "w": 1, "label": "5" },
{ "x": 6, "y": 0, "w": 1, "label": "6" },
{ "x": 7, "y": 0, "w": 1, "label": "7" },
{ "x": 8, "y": 0, "w": 1, "label": "8" },
{ "x": 9, "y": 0, "w": 1, "label": "9" },
{ "x": 10, "y": 0, "w": 1, "label": "0" },
{ "x": 11, "y": 0, "w": 1, "label": "DASH" },
{ "x": 12, "y": 0, "w": 1, "label": "EQUALSIGN" },
{ "x": 13, "y": 0, "w": 2, "label": "BACKSPACE" },
{ "x": 15.25, "y": 0, "w": 2, "label": "DEL" },
{ "x": 0, "y": 1, "w": 1.5, "label": "TAB" },
{ "x": 1.5, "y": 1, "w": 1, "label": "Q" },
{ "x": 2.5, "y": 1, "w": 1, "label": "W" },
{ "x": 3.5, "y": 1, "w": 1, "label": "E" },
{ "x": 4.5, "y": 1, "w": 1, "label": "R" },
{ "x": 5.5, "y": 1, "w": 1, "label": "T" },
{ "x": 6.5, "y": 1, "w": 1, "label": "Y" },
{ "x": 7.5, "y": 1, "w": 1, "label": "U" },
{ "x": 8.5, "y": 1, "w": 1, "label": "I" },
{ "x": 9.5, "y": 1, "w": 1, "label": "O" },
{ "x": 10.5, "y": 1, "w": 1, "label": "P" },
{ "x": 11.5, "y": 1, "w": 1, "label": "LBRACKET" },
{ "x": 12.5, "y": 1, "w": 1, "label": "RBRACKET" },
{ "x": 13.5, "y": 1, "w": 1.5, "label": "BACKSLASH" },
{ "x": 15.25, "y": 1, "w": 1.5, "label": "PAGEUP" },
{ "x": 0, "y": 2, "w": 1.75, "label": "CAPSLOCK" },
{ "x": 1.75, "y": 2, "w": 1, "label": "A" },
{ "x": 2.75, "y": 2, "w": 1, "label": "S" },
{ "x": 3.75, "y": 2, "w": 1, "label": "D" },
{ "x": 4.75, "y": 2, "w": 1, "label": "F" },
{ "x": 5.75, "y": 2, "w": 1, "label": "G" },
{ "x": 6.75, "y": 2, "w": 1, "label": "H" },
{ "x": 7.75, "y": 2, "w": 1, "label": "J" },
{ "x": 8.75, "y": 2, "w": 1, "label": "K" },
{ "x": 9.75, "y": 2, "w": 1, "label": "L" },
{ "x": 10.75, "y": 2, "w": 1, "label": "SEMICOLON" },
{ "x": 11.75, "y": 2, "w": 1, "label": "QUOTE" },
{ "x": 12.75, "y": 2, "w": 1, "label": "ISOHASH" },
{ "x": 13.75, "y": 2, "w": 1.25, "label": "ENTER" },
{ "x": 15.25, "y": 2, "w": 1.25, "label": "PAGEDOWN" },
{ "x": 0, "y": 3, "w": 1.25, "label": "LSHIFT" },
{ "x": 1.25, "y": 3, "w": 1, "label": "ISOBACKSLASH" },
{ "x": 2.25, "y": 3, "w": 1, "label": "Z" },
{ "x": 3.25, "y": 3, "w": 1, "label": "X" },
{ "x": 4.25, "y": 3, "w": 1, "label": "C" },
{ "x": 5.25, "y": 3, "w": 1, "label": "V" },
{ "x": 6.25, "y": 3, "w": 1, "label": "B" },
{ "x": 7.25, "y": 3, "w": 1, "label": "N" },
{ "x": 8.25, "y": 3, "w": 1, "label": "M" },
{ "x": 9.25, "y": 3, "w": 1, "label": "COMMA" },
{ "x": 10.25, "y": 3, "w": 1, "label": "PERIOD" },
{ "x": 11.25, "y": 3, "w": 1, "label": "SLASH" },
{ "x": 12.25, "y": 3, "w": 2.75, "label": "RSHIFT" },
{ "x": 14.25, "y": 3, "w": 2.75, "label": "UP" },
{ "x": 0, "y": 4, "w": 1.25, "label": "LCTRL" },
{ "x": 1.25, "y": 4, "w": 1.25, "label": "LCMD" },
{ "x": 2.5, "y": 4, "w": 1.25, "label": "LALT" },
{ "x": 3.75, "y": 4, "w": 6.25, "label": "SPACE" },
{ "x": 10, "y": 4, "w": 1, "label": "RALT" },
{ "x": 11, "y": 4, "w": 1, "label": "FN" },
{ "x": 12, "y": 4, "w": 1.25, "label": "RCTRL" },
{ "x": 13.25, "y": 4, "w": 1, "label": "LEFT" },
{ "x": 14.25, "y": 4, "w": 1, "label": "DOWN" }
{ "x": 15.25, "y": 4, "w": 1, "label": "RIGHT" }
]
}
}
}

View File

@@ -0,0 +1,51 @@
/*
ChibiOS - Copyright (C) 2020 Alex Lewontin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _MCUCONF_H_
#define _MCUCONF_H_
/*
* Board setting
* The following settings override the default settings present in
* the various device driver implementation headers.
* Note that the settings for each driver only have effect if the whole
* driver is enabled in halconf.h.
*
* IRQ priorities:
* 3...0 Lowest...Highest.
*
* DMA priorities:
* 5...0 Lowest...Highest.
*/
/*
* HAL driver system settings.
*/
#define NUC123_HSE_ENABLED TRUE
#define NUC123_PLL_ENABLED TRUE
#define NUC123_PLLSRC NUC123_PLLSRC_HSE
#define NUC123_HCLKSRC NUC123_HCLKSRC_PLL
#define NUC123_HCLKDIV 2
#define NUC123_PLL_NF 144
#define NUC123_USB_USE_USB0 TRUE
#define NUC123_USB_USE_USB1 TRUE
#define NUC123_SERIAL_USE_UART0 TRUE
#define NUC123_SERIAL_CLKSRC NUC123_SERIAL_CLKSRC_HSI
#define NUC123_MCUCONF
#endif /* _MCUCONF_H_ */

View File

@@ -0,0 +1 @@
# One2SF

View File

@@ -0,0 +1,34 @@
MCU_FAMILY = NUMICRO
MCU_SERIES = NUC123
# Bootloader selection
BOOTLOADER = custom
# linker script to use
MCU_LDSCRIPT = NUC123xD4xx0
# startup code to use
MCU_STARTUP = NUC123
BOARD = NUC123SD4AN0
# NUC123 series is Cortex M0
MCU = cortex-m0
# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
ARMV = 6
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
DIP_SWITCH_ENABLE = yes
# Enter lower-power sleep mode when on the ChibiOS idle thread
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE

View File

@@ -0,0 +1,25 @@
/* Copyright 2019 /u/KeepItUnder
*
* 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
// place overrides here
#define GRAVE_ESC_GUI_OVERRIDE
#define MK_3_SPEED
#define MK_C_OFFSET_UNMOD 400 /* Cursor offset per movement (unmodified) */
#define MK_C_INTERVAL_UNMOD 5 /* Time between cursor movements (unmodified) */
#define MK_W_OFFSET_UNMOD 100 /* Scroll steps per scroll action (unmodified) */
#define MK_W_INTERVAL_UNMOD 10 /* Time between scroll steps (unmodified) */

View File

@@ -0,0 +1,55 @@
/* Copyright 2019 /u/KeepItUnder
*
* 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 QMK_KEYBOARD_H
// LAYERS
enum Layer {
_QWERTY = 0, // Standard QWERTY layer
_FUNCTION, // Function key layer
_COLOUR // RGB key layer
};
#define _QW _QWERTY
#define _FN _FUNCTION
#define _CLR _COLOUR
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_all(
// 2 3 4 5 6 7 8 9 10 11 12 13 14 15
KC_GESC, 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_DEL,
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_PGUP,
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_NUHS, KC_ENT, KC_PGDN,
KC_LSFT, KC_NUBS, 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_FUNCTION] = LAYOUT_all(
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_DEL, KC_DEL,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_ENT, KC_PGDN,
_______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_MUTE, KC_VOLD, KC_VOLU, MO(2), _______, KC_PGUP,
_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
[_COLOUR] = LAYOUT_all(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1 @@
# The default keymap for one2sf

View File

@@ -0,0 +1,25 @@
# One2SF
A 65% keyboard by Ducky
* Hardware Supported: Ducky One 2 SF RGB / NUC123SD4AN0 / MBI5043GP
* Layout only support for ANSI (ISO & VIA still WIP)
Make example for this keyboard (after setting up your build environment):
make ducky/one2sf:default
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
RGB LEDs are currently disabled until the driver is merged.
This firmware was tested on the duckyon2sf 1967ST version. To enter the 1967ST bootloader to flash you can boot the keyboard while holding D+L.
There are then two ways to flash the keyboard:
pip install --user nuvoton-isp
nuvoisp -f ducky_one2sf_ansi.bin
Alternatively you can use elfmimi's [nu-isp-cli](https://lib.rs/crates/nu-isp-cli) which is more complete than nuvoisp and allows flashing .hex files as well.
cargo install nu-isp-cli
nu-isp-cli flash ducky_one2sf_ansi.bin

View File

@@ -0,0 +1 @@
DEFAULT_FOLDER = ducky/one2sf/1967st

View File

@@ -159,10 +159,8 @@ void charybdis_set_pointer_dragscroll_enabled(bool enable) {
maybe_update_pointing_device_cpi(&g_charybdis_config);
}
void pointing_device_init_kb(void) { maybe_update_pointing_device_cpi(&g_charybdis_config); }
# ifndef CONSTRAIN_HID
# define CONSTRAIN_HID(value) ((value) < -127 ? -127 : ((value) > 127 ? 127 : (value)))
# define CONSTRAIN_HID(value) ((value) < XY_REPORT_MIN ? XY_REPORT_MIN : ((value) > XY_REPORT_MAX ? XY_REPORT_MAX : (value)))
# endif // !CONSTRAIN_HID
/**
@@ -339,6 +337,7 @@ void charybdis_config_sync_handler(uint8_t initiator2target_buffer_size, const v
}
void keyboard_post_init_kb(void) {
maybe_update_pointing_device_cpi(&g_charybdis_config);
transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, charybdis_config_sync_handler);
keyboard_post_init_user();

View File

@@ -0,0 +1,37 @@
// Copyright 2022 Ignacy Radliński (@radlinskii)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
// #define USE_I2C
#define EE_HANDS
#define TAPPING_TOGGLE 1 // tap just once for TT() to toggle the layer
#define TAPPING_TERM 200
#define IGNORE_MOD_TAP_INTERRUPT
#define RGBLIGHT_LAYERS
#define RGBLIGHT_DEFAULT_HUE 85
#define RGBLIGHT_DEFAULT_SAT 255
#undef RGBLIGHT_DEFAULT_MODE
#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_STATIC_LIGHT
#undef RGBLIGHT_ANIMATIONS
#undef RGBLIGHT_EFFECT_BREATHING // fading in and out
#undef RGBLIGHT_EFFECT_RAINBOW_MOOD // rainbow all keys at the same time
#undef RGBLIGHT_EFFECT_RAINBOW_SWIRL // rainbow top bottom
#undef RGBLIGHT_EFFECT_SNAKE
#undef RGBLIGHT_EFFECT_KNIGHT
#undef RGBLIGHT_EFFECT_CHRISTMAS
#undef RGBLIGHT_EFFECT_STATIC_GRADIENT
#undef RGBLIGHT_EFFECT_RGB_TEST // red -> green -> blue
#undef RGBLIGHT_EFFECT_ALTERNATING // blinking
#undef RGBLIGHT_EFFECT_TWINKLE // randomly fading in and out single keys
#define MOUSEKEY_DELAY 20
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_MAX_SPEED 5
#define MOUSEKEY_TIME_TO_MAX 40
#define MOUSEKEY_WHEEL_MAX_SPEED 10

View File

@@ -0,0 +1,193 @@
// Copyright 2022 Ignacy Radliński (@radlinskii)
// SPDX-License-Identifier: GPL-2.0-or-later
#include QMK_KEYBOARD_H
#include "light_layers.h"
enum my_layers {
_COLEMAK,
_QWERTY,
_NUM_SYM,
_NAV,
_MOUSE,
_MEDIA_MISC,
};
enum custom_keycodes {
COLEMAK = SAFE_RANGE,
QWERTY,
DEFAULT
};
#define LALT_KA LALT_T(KC_A)
#define LCTL_KS LCTL_T(KC_S)
#define LGUI_KD LGUI_T(KC_D)
#define LSFT_KF LSFT_T(KC_F)
#define RSFT_KJ RSFT_T(KC_J)
#define RGUI_KK RGUI_T(KC_K)
#define RCTL_KL RCTL_T(KC_L)
#define RA_SCLN RALT_T(KC_SCLN)
#define LALT_K1 LALT_T(KC_1)
#define LCTL_K2 LCTL_T(KC_2)
#define LGUI_K3 LGUI_T(KC_3)
#define LSFT_K4 LSFT_T(KC_4)
#define RSFT_K7 RSFT_T(KC_7)
#define RGUI_K8 RGUI_T(KC_8)
#define RCTL_K9 RCTL_T(KC_9)
#define RALT_K0 RALT_T(KC_0)
#define LCTL_KR LCTL_T(KC_R)
#define LGUI_KS LGUI_T(KC_S)
#define LSFT_KT LSFT_T(KC_T)
#define RSFT_KN RSFT_T(KC_N)
#define RGUI_KE RGUI_T(KC_E)
#define RCTL_KI RCTL_T(KC_I)
#define RALT_KO RALT_T(KC_O)
#define LGUI_BS LGUI_T(KC_BSPC)
#define RALT_TB RALT_T(KC_TAB)
#define TT_N_S TT(_NUM_SYM)
#define TT_NAV TT(_NAV)
#define TO_QWRT TO(_QWERTY)
#define TO_N_S TO(_NUM_SYM)
#define TO_NAV TO(_NAV)
#define TO_MOUSE TO(_MOUSE)
#define TO_M_M TO(_MEDIA_MISC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_COLEMAK] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, XXXXXXX,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_CAPS, LALT_KA, LCTL_KR, LGUI_KS, LSFT_KT, KC_G, KC_M, RSFT_KN, RGUI_KE, RCTL_KI, RALT_KO, KC_QUOT,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
XXXXXXX, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_DEL, KC_ESC, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, XXXXXXX,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
KC_BSPC, TT_N_S, KC_ENT, KC_SPC, TT_NAV, KC_TAB
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_QWERTY] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_LCTL, LALT_KA, LCTL_KS, LGUI_KD, LSFT_KF, KC_G, KC_H, RSFT_KJ, RGUI_KK, RCTL_KL, RA_SCLN, KC_QUOT,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_DEL, KC_ESC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
LGUI_BS, TT_N_S, KC_ENT, KC_SPC, TT_NAV, RALT_TB
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_NUM_SYM] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_UNDS, KC_PLUS, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, LALT_K1, LCTL_K2, LGUI_K3, LSFT_K4, KC_5, KC_6, RSFT_K7, RGUI_K8, RCTL_K9, RALT_K0, KC_PIPE,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, KC_GRV, KC_LPRN, KC_LCBR, KC_LBRC, _______, _______, KC_RBRC, KC_RCBR, KC_RPRN, KC_MINS, KC_EQL, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, DEFAULT, _______, _______, TO_NAV, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_NAV] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_PGDN, KC_UP, KC_PGUP, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, KC_HOME, KC_LEFT, KC_DOWN, KC_RIGHT, KC_END, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, DEFAULT, _______, _______, TO_MOUSE, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_MOUSE] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, KC_WH_U, KC_MS_U, KC_WH_D, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, KC_WH_R, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_L, TO_M_M,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, DEFAULT, KC_BTN2, KC_BTN1, TO_NAV, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
),
[_MEDIA_MISC] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
RESET, _______, _______, _______, _______, QWERTY, COLEMAK, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
_______, _______, _______, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_CAPS, KC_MPLY, KC_MNXT, KC_VOLU, KC_BRIU, _______, _______, _______, _______, _______, _______, _______,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
_______, KC_MSTP, KC_MPRV, KC_VOLD, KC_BRID, _______, _______, _______, _______, _______, _______, _______, _______, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, DEFAULT, _______, _______, DEFAULT, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
)
};
void keyboard_post_init_user(void) {
rgblight_layers = MY_LIGHT_LAYERS;
}
layer_state_t default_layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(_COLEMAK, layer_state_cmp(state, _COLEMAK));
rgblight_set_layer_state(_QWERTY, layer_state_cmp(state, _QWERTY));
return state;
}
layer_state_t layer_state_set_user(layer_state_t state) {
rgblight_set_layer_state(_NUM_SYM, layer_state_cmp(state, _NUM_SYM));
rgblight_set_layer_state(_NAV, layer_state_cmp(state, _NAV));
rgblight_set_layer_state(_MOUSE, layer_state_cmp(state, _MOUSE));
rgblight_set_layer_state(_MEDIA_MISC, layer_state_cmp(state, _MEDIA_MISC));
return state;
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case COLEMAK:
if (record->event.pressed) {
set_single_persistent_default_layer(_COLEMAK);
layer_move(_COLEMAK);
}
return false;
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
layer_move(_QWERTY);
}
return false;
case DEFAULT:
if (record->event.pressed) {
if (layer_state_cmp(default_layer_state, _COLEMAK)) {
layer_move(_COLEMAK);
} else if (layer_state_cmp(default_layer_state, _QWERTY)) {
layer_move(_QWERTY);
}
}
return false;
}
return true;
}

View File

@@ -0,0 +1,179 @@
// Copyright 2022 Ignacy Radliński (@radlinskii)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
/*
LED index mapping:
(31) (32) (33) (67) (66) (65)
┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
│0 │1 │2 │3 │4 │5 │ │39 │38 │37 │36 │35 │34 │
├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
│11 │10 │9 │8 │7 │6 │ │40 │41 │42 │43 │44 │45 │
├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
│12 │13 │14 │15 │16 │17 │ │51 │50 │49 │48 │47 │46 │
├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
│23 │22 │21 │20 │19 │18 │27 │ │61 │52 │53 │54 │55 │56 │57 │
└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
│24 │25 │26 │ │60 │59 │58 │
└────────┴────────┴────────┘ └────────┴────────┴────────┘
(30) (29) (28) (62) (63) (64)
*/
const rgblight_segment_t PROGMEM COLEMAK_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, 127, 255, 255},
{6, 6, 115, 255, 255},
{12, 6, 97, 255, 255},
{18, 6, 90, 255, 255},
{24, 1, 85, 255, 255},
{25, 1, 169, 255, 255}, // TT(_NUM_SYM)
{26, 2, 85, 255, 255},
{28, 3, 85, 255, 255}, // underglow
{31, 3, 127, 255, 255}, // underglow
// right side
{34, 6, 127, 255, 255},
{40, 6, 115, 255, 255},
{46, 6, 97, 255, 255},
{52, 6, 90, 255, 255},
{58, 1, 85, 255, 255},
{59, 1, 201, 255, 255}, // TT(_NAV)
{60, 2, 85, 255, 255},
{62, 3, 85, 255, 255}, // underglow
{65, 3, 127, 255, 255} // underglow
);
const rgblight_segment_t PROGMEM QWERTY_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, 85, 0, 255},
{6, 6, 85, 70, 255},
{12, 6, 85, 150, 255},
{18, 6, 85, 240, 255},
{24, 1, 85, 255, 255},
{25, 1, 169, 255, 255}, // TT(_NUM_SYM)
{26, 2, 85, 255, 255},
{28, 3, 85, 255, 255}, // underglow
{31, 3, 85, 0, 255}, // underglow
// right side
{34, 6, 85, 0, 255},
{40, 6, 85, 70, 255},
{46, 6, 85, 150, 255},
{52, 6, 85, 240, 255},
{58, 1, 85, 255, 255},
{59, 1, 201, 255, 255}, // TT(_NAV)
{60, 2, 85, 255, 255},
{62, 3, 85, 255, 255}, // underglow
{65, 3, 85, 0, 255} // underglow
);
const rgblight_segment_t PROGMEM NUM_SYM_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, 201, 255, 255},
{6, 6, 191, 255, 255},
{12, 6, 181, 255, 255},
{18, 6, 171, 255, 255},
{24, 1, 169, 255, 255},
{25, 1, 85, 255, 255}, // TO(DEFAULT)
{26, 2, 169, 255, 255},
{28, 3, 169, 255, 255}, // underglow
{31, 3, 201, 255, 255}, // underglow
// right side
{34, 6, 201, 255, 255},
{40, 6, 191, 255, 255},
{46, 6, 181, 255, 255},
{52, 6, 171, 255, 255},
{58, 1, 169, 255, 255},
{59, 1, 201, 255, 255}, // TO(_NAV)
{60, 2, 169, 255, 255},
{62, 3, 169, 255, 255}, // underglow
{65, 3, 201, 255, 255} // underglow
);
const rgblight_segment_t PROGMEM NAV_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, 248, 255, 255},
{6, 6, 240, 255, 255},
{12, 6, 225, 255, 255},
{18, 6, 210, 255, 255},
{24, 1, 201, 255, 255},
{25, 1, 85, 255, 255}, // TO(DEFAULT)
{26, 2, 201, 255, 255},
{28, 3, 201, 255, 255}, // underglow
{31, 3, 248, 255, 255}, // underglow
// right side
{34, 6, 248, 255, 255},
{40, 6, 240, 255, 255},
{46, 6, 225, 255, 255},
{52, 6, 210, 255, 255},
{58, 1, 201, 255, 255},
{59, 1, 43, 255, 255}, // TO(_MOUSE)
{60, 2, 201, 255, 255},
{62, 3, 201, 255, 255}, // underglow
{65, 3, 248, 255, 255} // underglow
);
const rgblight_segment_t PROGMEM MOUSE_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// left side
{0, 6, 4, 255, 255},
{6, 6, 10, 255, 255},
{12, 6, 25, 255, 255},
{18, 6, 40, 255, 255},
{24, 1, 43, 255, 255},
{25, 1, 85, 255, 255}, // TO(DEFAULT)
{26, 2, 43, 255, 255},
{28, 3, 43, 255, 255}, // underglow
{31, 3, 4, 255, 255}, // underglow
// right side
{34, 6, 4, 255, 255},
{40, 6, 10, 255, 255},
{46, 1, 0, 255, 255}, // TO(_MEDIA_MISC)
{47, 5, 25, 255, 255},
{52, 6, 40, 255, 255},
{58, 1, 43, 255, 255},
{59, 1, 201, 255, 255}, // TO(_NAV)
{60, 2, 43, 255, 255},
{62, 3, 43, 255, 255}, // underglow
{65, 3, 4, 255, 255} // underglow
);
const rgblight_segment_t PROGMEM MEDIA_MISC_LIGHT_LAYER[] = RGBLIGHT_LAYER_SEGMENTS(
// both sides
{0, 1, 0, 255, 255}, // RESET
{1, 4, 0, 0, 0},
{5, 1, 85, 0, 255}, // set QWERTY as default
{6, 2, 0, 0, 0},
{8, 1, 160, 150, 150}, // MUTE
{9, 3, 0, 0, 0},
{12, 1, 201, 255, 255}, // CAPS
{13, 1, 120, 255, 255}, // PLAY
{14, 1, 0, 255, 255}, // NEXT
{15, 1, 160, 255, 255}, // VOLUME_UP
{16, 1, 43, 255, 255}, // BRIGHTNESS_UP
{17, 2, 0, 0, 0},
{19, 1, 43, 200, 200}, // BRIGHTNESS_DOWN
{20, 1, 160, 220, 200}, // VOLUME_DOWN
{21, 1, 0, 220, 200}, // PREV
{22, 1, 120, 220, 200}, // STOP
{23, 2, 0, 0, 0},
{25, 1, 85, 255, 255}, // TO(DEFAULT)
{26, 2, 0, 0, 0},
{28, 6, 0, 255, 255}, // underglow
{34, 5, 0, 0, 0},
{39, 1, 127, 255, 255}, // set COLEMAK as default
{40, 19, 0, 0, 0},
{59, 1, 85, 255, 255}, // TO(DEFAULT)
{60, 2, 0, 0, 0},
{62, 6, 0, 255, 255} // underglow
);
const rgblight_segment_t* const PROGMEM MY_LIGHT_LAYERS[] = RGBLIGHT_LAYERS_LIST(
COLEMAK_LIGHT_LAYER,
QWERTY_LIGHT_LAYER,
NUM_SYM_LIGHT_LAYER,
NAV_LIGHT_LAYER,
MOUSE_LIGHT_LAYER,
MEDIA_MISC_LIGHT_LAYER
);

View File

@@ -0,0 +1,137 @@
# Iris rev. 6 keymap by radlinskii
![iris rev. 6 by radlinskii lightning demo](https://user-images.githubusercontent.com/26116041/171883033-3c5ababe-88ae-4c9d-8436-3d6ab83dbf4b.gif)
## Features:
- [RGB Lightning layers](https://docs.qmk.fm/#/feature_rgblight?id=lighting-layers)
- [MOUSE KEYS](https://docs.qmk.fm/#/keycodes?id=mouse-keys)
- [MOD-TAPS](https://docs.qmk.fm/#/mod_tap)
## Layers:
### colemak - default
> [Colemak DH](https://colemakmods.github.io/mod-dh/) keyboard layout.
<details>
<summary>
keymap
</summary>
<img width="800" alt="colemak layer keymap" src="https://user-images.githubusercontent.com/26116041/173403537-f2222651-c8ea-4c8b-b828-97520a222344.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="colemak layer lightning" src="https://user-images.githubusercontent.com/26116041/173681398-cdcff1a5-ae79-4409-950a-1b671c350f07.jpeg">
</details>
### qwerty - alternative default
> Can be set as persistent default layer.
<details>
<summary>
keymap
</summary>
<img width="800" alt="qwerty layer keymap" src="https://user-images.githubusercontent.com/26116041/173403371-1551976a-2f95-4dbd-ba07-96936651871d.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="qwerty layer lightning" src="https://user-images.githubusercontent.com/26116041/173681525-aee3c927-995a-4f83-b688-ed8bfd3f8bb6.jpeg">
</details>
### numeric + symbols
<details>
<summary>
keymap
</summary>
<img width="800" alt="numeric and symbols layer keymap" src="https://user-images.githubusercontent.com/26116041/173403164-b0520501-761b-4567-bf04-57f7b6f7dd4d.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="numeric and symbols layer lightning" src="https://user-images.githubusercontent.com/26116041/173681689-0b864e35-0e02-4204-a469-6e872e704903.jpeg">
</details>
### navigation
> Layer with arrow navigation.
<details>
<summary>
keymap
</summary>
<img width="800" alt="navigation layer keymap" src="https://user-images.githubusercontent.com/26116041/173408142-1e1c297e-57db-42f8-bc18-a04dd4e202c9.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="navigation layer lightning" src="https://user-images.githubusercontent.com/26116041/173681859-fa6f071a-98e9-48f8-a9a0-76d7510b302a.jpeg">
</details>
### mouse
> Layer with mouse navigation on the same keys as arrow navigation.
<details>
<summary>
keymap
</summary>
<img width="800" alt="mouse layer keymap" src="https://user-images.githubusercontent.com/26116041/173402955-050ffd77-7b60-45dc-8e89-54cd43793132.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="mouse layer lightning" src="https://user-images.githubusercontent.com/26116041/173682436-07c32e5e-f415-463d-8c93-d2cbd4e406a1.jpeg">
</details>
### media and miscellaneous
> Used for media keys, switching default layer and keyboard reset.
<details>
<summary>
keymap
</summary>
<img width="800" alt="media and miscellaneous layer keymap" src="https://user-images.githubusercontent.com/26116041/173402837-75ce8ab1-7fbe-454b-b165-b22d171f9ad1.png">
</details>
<details>
<summary>
lightning
</summary>
<img width="800" alt="media and miscellaneous layer lightning" src="https://user-images.githubusercontent.com/26116041/173682188-3eab9c09-d466-4729-89ac-48e09f55564c.jpeg">
</details>

View File

@@ -0,0 +1,3 @@
RGBLIGHT_ENABLE = yes # by default this is no, but for the rgb light layers to work it needs to be `yes`
RGB_MATRIX_ENABLE = no # by default this is yes, but for the rgb light layers to work it needs to be `no`
MOUSEKEY_ENABLE = yes

View File

@@ -0,0 +1,149 @@
/* Copyright 2022 bdtc123 *
* 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 "bm80v2.h"
#ifdef RGB_MATRIX_ENABLE
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
{0, CS6_SW1, CS5_SW1, CS4_SW1},
{0, CS6_SW3, CS5_SW3, CS4_SW3},
{0, CS6_SW4, CS5_SW4, CS4_SW4},
{0, CS6_SW5, CS5_SW5, CS4_SW5},
{0, CS6_SW6, CS5_SW6, CS4_SW6},
{0, CS6_SW7, CS5_SW7, CS4_SW7},
{0, CS6_SW8, CS5_SW8, CS4_SW8},
{0, CS6_SW9, CS5_SW9, CS4_SW9},
{0, CS21_SW1, CS20_SW1, CS19_SW1},
{0, CS21_SW2, CS20_SW2, CS19_SW2},
{0, CS21_SW3, CS20_SW3, CS19_SW3},
{0, CS21_SW4, CS20_SW4, CS19_SW4},
{0, CS21_SW5, CS20_SW5, CS19_SW5},
{0, CS21_SW6, CS20_SW6, CS19_SW6},
{0, CS21_SW7, CS20_SW7, CS19_SW7},
{0, CS21_SW8, CS20_SW8, CS19_SW8},
{0, CS9_SW1, CS8_SW1, CS7_SW1},
{0, CS9_SW2, CS8_SW2, CS7_SW2},
{0, CS9_SW3, CS8_SW3, CS7_SW3},
{0, CS9_SW4, CS8_SW4, CS7_SW4},
{0, CS9_SW5, CS8_SW5, CS7_SW5},
{0, CS9_SW6, CS8_SW6, CS7_SW6},
{0, CS9_SW7, CS8_SW7, CS7_SW7},
{0, CS9_SW8, CS8_SW8, CS7_SW8},
{0, CS9_SW9, CS8_SW9, CS7_SW9},
{0,CS24_SW1, CS23_SW1, CS22_SW1},
{0,CS24_SW2, CS23_SW2, CS22_SW2},
{0,CS24_SW3, CS23_SW3, CS22_SW3},
{0,CS24_SW4, CS23_SW4, CS22_SW4},
{0,CS24_SW5, CS23_SW5, CS22_SW5},
{0,CS24_SW6, CS23_SW6, CS22_SW6},
{0,CS24_SW7, CS23_SW7, CS22_SW7},
{0,CS24_SW8, CS23_SW8, CS22_SW8},
{0, CS12_SW1, CS11_SW1, CS10_SW1},
{0, CS12_SW2, CS11_SW2, CS10_SW2},
{0, CS12_SW3, CS11_SW3, CS10_SW3},
{0, CS12_SW4, CS11_SW4, CS10_SW4},
{0, CS12_SW5, CS11_SW5, CS10_SW5},
{0, CS12_SW6, CS11_SW6, CS10_SW6},
{0, CS12_SW7, CS11_SW7, CS10_SW7},
{0, CS12_SW8, CS11_SW8, CS10_SW8},
{0, CS12_SW9, CS11_SW9, CS10_SW9},
{0, CS27_SW1, CS26_SW1, CS25_SW1},
{0, CS27_SW2, CS26_SW2, CS25_SW2},
{0, CS27_SW3, CS26_SW3, CS25_SW3},
{0, CS27_SW4, CS26_SW4, CS25_SW4},
{0, CS27_SW5, CS26_SW5, CS25_SW5},
{0, CS27_SW6, CS26_SW6, CS25_SW6},
{0, CS27_SW7, CS26_SW7, CS25_SW7},
{0, CS27_SW8, CS26_SW8, CS25_SW8},
{0, CS15_SW1, CS14_SW1, CS13_SW1},
{0, CS15_SW2, CS14_SW2, CS13_SW2},
{0, CS15_SW3, CS14_SW3, CS13_SW3},
{0, CS15_SW4, CS14_SW4, CS13_SW4},
{0, CS15_SW5, CS14_SW5, CS13_SW5},
{0, CS15_SW6, CS14_SW6, CS13_SW6},
{0, CS15_SW7, CS14_SW7, CS13_SW7},
{0, CS15_SW8, CS14_SW8, CS13_SW8},
{0, CS15_SW9, CS14_SW9, CS13_SW9},
{0, CS30_SW1, CS29_SW1, CS28_SW1},
{0, CS30_SW2, CS29_SW2, CS28_SW2},
{0, CS30_SW3, CS29_SW3, CS28_SW3},
{0, CS30_SW4, CS29_SW4, CS28_SW4},
{0, CS18_SW1, CS17_SW1, CS16_SW1},
{0, CS18_SW3, CS17_SW3, CS16_SW3},
{0, CS18_SW4, CS17_SW4, CS16_SW4},
{0, CS18_SW5, CS17_SW5, CS16_SW5},
{0, CS18_SW6, CS17_SW6, CS16_SW6},
{0, CS18_SW7, CS17_SW7, CS16_SW7},
{0, CS18_SW8, CS17_SW8, CS16_SW8},
{0, CS18_SW9, CS17_SW9, CS16_SW9},
{0, CS33_SW1, CS32_SW1, CS31_SW1},
{0, CS33_SW2, CS32_SW2, CS31_SW2},
{0, CS33_SW3, CS32_SW3, CS31_SW3},
{0, CS33_SW4, CS32_SW4, CS31_SW4},
{0, CS33_SW7, CS32_SW7, CS31_SW7},
{0, CS3_SW1, CS2_SW1, CS1_SW1},
{0, CS3_SW2, CS2_SW2, CS1_SW2},
{0, CS3_SW3, CS2_SW3, CS1_SW3},
{0, CS3_SW6, CS2_SW6, CS1_SW6},
{0, CS36_SW2, CS35_SW2, CS34_SW2},
{0, CS36_SW3, CS35_SW3, CS34_SW3},
{0, CS36_SW4, CS35_SW4, CS34_SW4},
{0, CS36_SW5, CS35_SW5, CS34_SW5},
{0, CS36_SW6, CS35_SW6, CS34_SW6},
{0, CS36_SW7, CS35_SW7, CS34_SW7},
{0, CS36_SW8, CS35_SW8, CS34_SW8}
};
led_config_t g_led_config = { {
{ 0, NO_LED, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 },
{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 },
{ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49 },
{ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, NO_LED, NO_LED, NO_LED, NO_LED },
{ 63, NO_LED, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, NO_LED, NO_LED, 75, NO_LED },
{ 76, 77, 78, NO_LED,NO_LED, 79, NO_LED, NO_LED, NO_LED, NO_LED, 80, 81, 82, 83, 84, 85, 86 }
},
{
{ 7, 5 }, { 31, 5 }, { 43, 5 }, { 55, 5 }, { 67, 5 }, { 85, 5 }, { 97, 5 }, { 109, 5 }, { 121, 5 }, { 139, 5 }, { 151, 5 }, { 163, 5 }, { 175, 5 }, { 193, 5 }, { 205, 5 }, { 217, 5 },
{ 7, 20 }, { 19, 20 }, { 31, 20 }, { 43, 20 }, { 55, 20 }, { 67, 20 }, { 79, 20 }, { 91, 20 }, { 103, 20 }, { 115, 20 }, { 127, 20 }, { 139, 20 }, { 151, 20 }, { 169, 20 }, { 193, 20 }, { 205, 20 }, { 217, 20 },
{ 10, 30 }, { 25, 30 }, { 37, 30 }, { 49, 30 }, { 61, 30 }, { 73, 30 }, { 85, 30 }, { 97, 30 }, { 109, 30 }, { 121, 30 }, { 133, 30 }, { 145, 30 }, { 157, 30 }, { 172, 30 }, { 193, 30 }, { 205, 30 }, { 217, 30 },
{ 11, 39 }, { 28, 39 }, { 40, 39 }, { 52, 39 }, { 64, 39 }, { 76, 39 }, { 88, 39 }, { 100, 39 }, { 112, 39 }, { 124, 39 }, { 136, 39 }, { 148, 39 }, { 168, 39 },
{ 17, 49 }, { 34, 49 }, { 46, 49 }, { 58, 49 }, { 70, 49 }, { 82, 49 }, { 94, 49 }, { 106, 49 }, { 118, 49 }, { 130, 49 }, { 142, 49 }, { 165, 49 }, { 205, 49 },
{ 8, 59 }, { 23, 59 }, { 38, 59 }, { 83, 59 }, { 129, 59 }, { 144, 59 }, { 159, 59 }, { 174, 59 }, { 193, 59 }, { 205, 59 }, { 217, 59 }
},
{ 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
1, 1, 1, 4, 1, 1, 1, 1, 1, 1, 1
} };
__attribute__ ((weak))
void rgb_matrix_indicators_user(void)
{
if (host_keyboard_led_state().caps_lock)
{
rgb_matrix_set_color(50, 0xFF, 0xFF, 0xFF);
}
}
#endif

View File

@@ -0,0 +1,34 @@
/* Copyright 2022 bdtc123 *
* 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
#include "quantum.h"
#define LAYOUT_tkl_ansi( \
K0_0, K0_2, K0_3, K0_4, K0_5, K0_6,K0_7, K0_8, K0_9, K0_A, K0_B, K0_C, K0_D, K0_E, K0_F, K0_10, \
K1_0, K1_1, K1_2, K1_3, K1_4, K1_5, K1_6, K1_7, K1_8, K1_9, K1_A, K1_B, K1_C, K1_D, K1_E, K1_F, K1_10, \
K2_0, K2_1, K2_2, K2_3, K2_4, K2_5, K2_6, K2_7, K2_8, K2_9, K2_A, K2_B, K2_C, K2_D, K2_E, K2_F, K2_10, \
K3_0, K3_1, K3_2, K3_3, K3_4, K3_5, K3_6, K3_7, K3_8, K3_9, K3_A, K3_B, K3_C, \
K4_0, K4_2, K4_3, K4_4, K4_5, K4_6, K4_7, K4_8, K4_9, K4_A, K4_B, K4_C, K4_F, \
K5_0, K5_1, K5_2, K5_5, K5_A, K5_B, K5_C, K5_D, K5_E, K5_F, K5_10 \
) { \
{ K0_0, KC_NO, K0_2, K0_3, K0_4, K0_5, K0_6, K0_7, K0_8, K0_9, K0_A, K0_B, K0_C, K0_D, K0_E, K0_F, K0_10 }, \
{ K1_0, K1_1, K1_2, K1_3, K1_4, K1_5, K1_6, K1_7, K1_8, K1_9, K1_A, K1_B, K1_C, K1_D, K1_E, K1_F, K1_10 }, \
{ K2_0, K2_1, K2_2, K2_3, K2_4, K2_5, K2_6, K2_7, K2_8, K2_9, K2_A, K2_B, K2_C, K2_D, K2_E, K2_F, K2_10 }, \
{ K3_0, K3_1, K3_2, K3_3, K3_4, K3_5, K3_6, K3_7, K3_8, K3_9, K3_A, K3_B, K3_C, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ K4_0, KC_NO, K4_2, K4_3, K4_4, K4_5, K4_6, K4_7, K4_8, K4_9, K4_A, K4_B, K4_C, KC_NO, KC_NO, K4_F, KC_NO }, \
{ K5_0, K5_1, K5_2, KC_NO, KC_NO, K5_5, KC_NO, KC_NO, KC_NO, KC_NO, K5_A, K5_B, K5_C, K5_D, K5_E, K5_F, K5_10 } \
}

View File

@@ -0,0 +1,83 @@
/* Copyright 2022 bdtc123 *
* 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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x4B50
#define PRODUCT_ID 0x1141
#define DEVICE_VER 0x0002
#define MANUFACTURER KP republic
#define PRODUCT bm80v2
/* key matrix size */
#define MATRIX_ROWS 6
#define MATRIX_COLS 17
#define MATRIX_ROW_PINS { C7, C6, B6, F5, F7, F6 }
#define MATRIX_COL_PINS { E6, F0, F1, F4, D7, D6, B7, B1, B0, B2, B3, D3, D5, D4, D2, B4, B5 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION ROW2COL
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
#define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_ALL
#define RGB_MATRIX_KEYPRESSES
// RGB Matrix Animation modes. Explicitly enabled
// For full list of effects, see:
// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_BREATHING
#define ENABLE_RGB_MATRIX_BAND_VAL
#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
#define ENABLE_RGB_MATRIX_CYCLE_ALL
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
#define ENABLE_RGB_MATRIX_DUAL_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
#define ENABLE_RGB_MATRIX_HUE_WAVE
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
#define ENABLE_RGB_MATRIX_SPLASH
#define ENABLE_RGB_MATRIX_MULTISPLASH
#define ENABLE_RGB_MATRIX_SOLID_SPLASH
#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
#define DRIVER_ADDR_1 0b0110000
#define DRIVER_COUNT 1
#define DRIVER_1_LED_TOTAL 87
#define DRIVER_LED_TOTAL DRIVER_1_LED_TOTAL
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180

View File

@@ -0,0 +1,103 @@
{
"keyboard_name": "bm80v2",
"url": "",
"maintainer": "qmk",
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
{ "x":0, "y":0},
{ "x":2, "y":0},
{ "x":3, "y":0},
{ "x":4, "y":0},
{ "x":5, "y":0},
{ "x":6.5, "y":0},
{ "x":7.5, "y":0},
{ "x":8.5, "y":0},
{ "x":9.5, "y":0},
{ "x":11, "y":0},
{ "x":12, "y":0},
{ "x":13, "y":0},
{ "x":14, "y":0},
{ "x":15.25, "y":0},
{ "x":16.25, "y":0},
{ "x":17.25, "y":0},
{ "x":0, "y":1.5},
{ "x":1, "y":1.5},
{ "x":2, "y":1.5},
{ "x":3, "y":1.5},
{ "x":4, "y":1.5},
{ "x":5, "y":1.5},
{ "x":6, "y":1.5},
{ "x":7, "y":1.5},
{ "x":8, "y":1.5},
{ "x":9, "y":1.5},
{ "x":10, "y":1.5},
{ "x":11, "y":1.5},
{ "x":12, "y":1.5},
{ "x":13, "y":1.5, "w":2},
{ "x":15.25, "y":1.5},
{ "x":16.25, "y":1.5},
{ "x":17.25, "y":1.5},
{ "x":0, "y":2.5, "w":1.5},
{ "x":1.5, "y":2.5},
{ "x":2.5, "y":2.5},
{ "x":3.5, "y":2.5},
{ "x":4.5, "y":2.5},
{ "x":5.5, "y":2.5},
{ "x":6.5, "y":2.5},
{ "x":7.5, "y":2.5},
{ "x":8.5, "y":2.5},
{ "x":9.5, "y":2.5},
{ "x":10.5, "y":2.5},
{ "x":11.5, "y":2.5},
{ "x":12.5, "y":2.5},
{ "x":13.75,"y":2.5},
{ "x":15.25, "y":2.5},
{ "x":16.25, "y":2.5},
{ "x":17.25, "y":2.5},
{ "x":0, "y":3.5, "w":1.75},
{ "x":1.75, "y":3.5},
{ "x":2.75, "y":3.5},
{ "x":3.75, "y":3.5},
{ "x":4.75, "y":3.5},
{ "x":5.75, "y":3.5},
{ "x":6.75, "y":3.5},
{ "x":7.75, "y":3.5},
{ "x":8.75, "y":3.5},
{ "x":9.75, "y":3.5},
{ "x":10.75, "y":3.5},
{ "x":11.75, "y":3.5},
{ "x":12.75, "y":3.5, "w":2.25},
{ "x":0, "y":4.5, "w":2.25},
{ "x":2.25, "y":4.5},
{ "x":3.25, "y":4.5},
{ "x":4.25, "y":4.5},
{ "x":5.25, "y":4.5},
{ "x":6.25, "y":4.5},
{ "x":7.25, "y":4.5},
{ "x":8.25, "y":4.5},
{ "x":9.25, "y":4.5},
{ "x":10.25, "y":4.5},
{ "x":11.25, "y":4.5},
{ "x":12.25, "y":4.5, "w":2.75},
{ "x":16.25, "y":4.5},
{ "x":0, "y":5.5, "w":1.25},
{ "x":1.25, "y":5.5, "w":1.25},
{ "x":2.5, "y":5.5, "w":1.25},
{ "x":3.75, "y":5.5, "w":6.25},
{ "x":10, "y":5.5, "w":1.25},
{ "x":11.25, "y":5.5, "w":1.25},
{ "x":12.5, "y":5.5, "w":1.25},
{ "x":13.75, "y":5.5, "w":1.25},
{ "x":15.25, "y":5.5},
{ "x":16.25, "y":5.5},
{ "x":17.25, "y":5.5}
]
}
}
}

View File

@@ -0,0 +1,43 @@
// Copyright 2021 Yizhen Liu (@edwardslau)
// SPDX-License-Identifier: GPL-2.0
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi(
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, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,43 @@
// Copyright 2021 Yizhen Liu (@edwardslau)
// SPDX-License-Identifier: GPL-2.0
#include QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_tkl_ansi(
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, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_tkl_ansi(
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[2] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
[3] = LAYOUT_tkl_ansi(
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@@ -0,0 +1,20 @@
# %bm80v2%
A 80% hotswap inswitch RGB keyboard.
* Keyboard Maintainer: [%bdtc123%](https://github.com/bdtc123)
* Hardware Supported: BM80V2
* Hardware Availability: [KP Republic](https://kprepublic.com/products/bm80rgb-bm80-rgb-80-hot-swappable-custom-mechanical-keyboard-pcb-programmed-qmk-via-firmware-full-rgb-switch-underglow-type-c?_pos=7&_sid=767c48383&_ss=r)
Make example for this keyboard (after setting up your build environment):
make kprepublic bm80v2:default
Flashing example for this keyboard:
make kprepublic bm80v2:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead

View File

@@ -0,0 +1,22 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Light
MOUSEKEY_ENABLE = no # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
RGB_MATRIX_ENABLE = yes # Use RGB matrix
RGB_MATRIX_DRIVER = IS31FL3741
LTO_ENABLE = yes
LAYOUTS = tkl_ansi

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,16 @@
/* Copyright 2020 DeskDaily
* 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 "alter_lite.h"

View File

@@ -0,0 +1,41 @@
/* Copyright 2020 DeskDaily
*
* 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
#include "quantum.h"
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
K10, K11, K12, K13, K14, K15, K16, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
K20, K21, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2F, \
K31, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, \
K41, K44, K45, K46, K48, K4B, K4E \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
{ K10, K11, K12, K13, K14, K15, K16, KC_NO, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
{ K20, K21, KC_NO, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, K2F }, \
{ KC_NO, K31, KC_NO, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F }, \
{ KC_NO, K41, KC_NO, KC_NO, K44, K45, K46, KC_NO, K48, KC_NO, KC_NO, K4B, KC_NO, KC_NO, K4E, KC_NO }, \
}

View File

@@ -0,0 +1,62 @@
/*
Copyright 2020 DeskDaily
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xD812
#define PRODUCT_ID 0x0013
#define DEVICE_VER 0x0001
#define MANUFACTURER DeskDaily
#define PRODUCT Alter Lite
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 16
#define LED_NUM_LOCK_PIN D6
#define LED_CAPS_LOCK_PIN D7
#define LED_SCROLL_LOCK_PIN D4
#define LED_PIN_ON_STATE 0
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { F0, F1, D3, D5, B5 }
#define MATRIX_COL_PINS { B0, B1, B2, B3, B7, D0, D1, D2, E6, B6, C6, C7, F7, F6, F5, F4 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

View File

@@ -0,0 +1,76 @@
{
"keyboard_name": "Alter",
"url": "",
"maintainer": "DeskDaily",
"layouts": {
"LAYOUT": {
"layout": [
{"x":0.5, "y":0.15},
{"x":1.75, "y":0.25},
{"x":2.75, "y":0.25},
{"x":3.75, "y":0.25},
{"x":4.75, "y":0.25},
{"x":5.75, "y":0.25},
{"x":6.75, "y":0.25},
{"x":7.75, "y":0.25},
{"x":11.25, "y":0.25},
{"x":12.25, "y":0.25},
{"x":13.25, "y":0.25},
{"x":14.25, "y":0.25},
{"x":15.25, "y":0.25},
{"x":16.25, "y":0.25},
{"x":17.25, "y":0.25},
{"x":18.25, "y":0.25},
{"x":0.25, "y":1.15},
{"x":1.5, "y":1.25, "w":1.5},
{"x":3, "y":1.25},
{"x":4.25, "y":1.25},
{"x":5.25, "y":1.25},
{"x":6.25, "y":1.25},
{"x":7.25, "y":1.25},
{"x":10.75, "y":1.25},
{"x":11.75, "y":1.25},
{"x":12.75, "y":1.25},
{"x":13.75, "y":1.25},
{"x":15, "y":1.25},
{"x":16, "y":1.25},
{"x":17, "y":1.25},
{"x":18, "y":1.25, "w":1.5},
{"x":0, "y":2.15},
{"x":1.25, "y":2.25, "w":1.75},
{"x":3, "y":2.25},
{"x":4.5, "y":2.25},
{"x":5.5, "y":2.25},
{"x":6.5, "y":2.25},
{"x":7.5, "y":2.25},
{"x":11, "y":2.25},
{"x":12, "y":2.25},
{"x":13, "y":2.25},
{"x":14, "y":2.25},
{"x":15.5, "y":2.25},
{"x":16.5, "y":2.25},
{"x":17.5, "y":2.25, "w":2.25},
{"x":1, "y":3.25, "w":2.25},
{"x":3.25, "y":3.25},
{"x":5, "y":3.25},
{"x":6, "y":3.25},
{"x":7, "y":3.25},
{"x":8, "y":3.25},
{"x":10.5, "y":3.25},
{"x":11.5, "y":3.25},
{"x":12.5, "y":3.25},
{"x":13.5, "y":3.25},
{"x":15.25, "y":3.25},
{"x":16.25, "y":3.25},
{"x":17.25, "y":3.25, "w":1.75},
{"x":19, "y":3.25},
{"x":1, "y":4.25, "w":1.5},
{"x":4.75, "y":4.25, "w":1.5},
{"x":6.25, "y":4.25, "w":2},
{"x":8.25, "y":4.25, "w":1.25},
{"x":10.5, "y":4.25, "w":2.75},
{"x":13.25, "y":4.25, "w":1.5},
{"x":18.25, "y":4.25, "w":1.5}]
}
}
}

View File

@@ -0,0 +1,33 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_GESC, 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_BSPC,
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_PGDN, KC_LCTL, 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_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
MO(1), KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT(
RESET, _______, 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_DEL, KC_DEL,
KC_BRIU, _______, _______, KC_UP, _______, _______, _______, _______, _______, _______, _______, _______, _______ , _______, _______,
KC_BRID, _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______,_______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_END, _______, _______,
_______, KC_RGUI, _______, _______, _______, _______, _______
),
};

View File

@@ -0,0 +1,47 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, KC_GESC, 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_BSPC,
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_PGDN, KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
MO(1), KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT(
RESET, KC_TRNS, 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_DEL, KC_DEL,
KC_BRIU, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS , KC_TRNS, KC_TRNS,
KC_BRID, KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_TRNS, KC_TRNS,
KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@@ -0,0 +1,20 @@
#DeskDaily Alter
![Alter Lite](https://i.imgur.com/dYVwbD0.jpg)
An Alice layout keyboard. This Lite version have no underglow
* Keyboard Maintainer: [DeskDaily](https://github.com/DeskDaily)
* Hardware Supported: atmega32u4
Make example for this keyboard (after setting up your build environment):
make nightly_boards/alter_lite:default
Flashing example for this keyboard:
make nightly_boards/alter_lite:default:flash
You can enter bootloader mode by pressing the physical reset button at the front of the pcb (near the right spacebar) or by holding the upper left key while plugging the usb cable.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,17 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow

View File

@@ -0,0 +1,17 @@
/* Copyright 2022 DeskDaily
*
* 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 "conde60.h"

View File

@@ -0,0 +1,42 @@
/* Copyright 2022 DeskDaily
*
* 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
#include "quantum.h"
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K44, K46, K47, K49, K4B, K4C, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, K41, K42, KC_NO, K44, KC_NO, K46, K47, KC_NO, K49, KC_NO, K4B, K4C, K4D }, \
}

View File

@@ -0,0 +1,68 @@
/*
Copyright 2022 DeskDaily
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xD812
#define PRODUCT_ID 0x0015
#define DEVICE_VER 0x0001
#define MANUFACTURER DeskDaily
#define PRODUCT Conde60
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { B1, B2, F0, F1, F4 }
#define MATRIX_COL_PINS { B0, B3, B7, B6, C6, C7, F7, F6, F5, D4, D6, D7, B4, B5 }
#define UNUSED_PINS
#define RGB_DI_PIN D5
#ifdef RGB_DI_PIN
#define RGBLED_NUM 12
#define RGBLIGHT_ANIMATIONS
#endif
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

View File

@@ -0,0 +1,80 @@
{
"keyboard_name": "Conde60",
"url": "",
"maintainer": "DeskDaily",
"layouts": {
"LAYOUT": {
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
{"x":2, "y":0},
{"x":3, "y":0},
{"x":4, "y":0},
{"x":5, "y":0},
{"x":6, "y":0},
{"x":7, "y":0},
{"x":8, "y":0},
{"x":9, "y":0},
{"x":10, "y":0},
{"x":11, "y":0},
{"x":12, "y":0},
{"x":13, "y":0},
{"x":14, "y":0},
{"x":0, "y":1, "w":1.5},
{"x":1.5, "y":1},
{"x":2.5, "y":1},
{"x":3.5, "y":1},
{"x":4.5, "y":1},
{"x":5.5, "y":1},
{"x":6.5, "y":1},
{"x":7.5, "y":1},
{"x":8.5, "y":1},
{"x":9.5, "y":1},
{"x":10.5, "y":1},
{"x":11.5, "y":1},
{"x":12.5, "y":1},
{"x":13.5, "y":1, "w":1.5},
{"x":0, "y":2, "w":1.75},
{"x":1.75, "y":2},
{"x":2.75, "y":2},
{"x":3.75, "y":2},
{"x":4.75, "y":2},
{"x":5.75, "y":2},
{"x":6.75, "y":2},
{"x":7.75, "y":2},
{"x":8.75, "y":2},
{"x":9.75, "y":2},
{"x":10.75, "y":2},
{"x":11.75, "y":2},
{"x":12.75, "y":2, "w":2.25},
{"x":0, "y":3, "w":1.25},
{"x":1.25, "y":3},
{"x":2.25, "y":3},
{"x":3.25, "y":3},
{"x":4.25, "y":3},
{"x":5.25, "y":3},
{"x":6.25, "y":3},
{"x":7.25, "y":3},
{"x":8.25, "y":3},
{"x":9.25, "y":3},
{"x":10.25, "y":3},
{"x":11.25, "y":3},
{"x":12.25, "y":3, "w":1.75},
{"x":14, "y":3},
{"x":0, "y":4, "w":1.5},
{"x":1.5, "y":4},
{"x":2.5, "y":4, "w":1.5},
{"x":4, "y":4, "w":2.25},
{"x":6.25, "y":4},
{"x":7.25, "y":4},
{"x":8.25, "y":4, "w":2.75},
{"x":11, "y":4, "w":1.5},
{"x":12.5, "y":4},
{"x":13.5, "y":4, "w":1.5}]
}
}
}

View File

@@ -0,0 +1,53 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, 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_BSLS, KC_GRV,
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_DEL,
KC_LCTL, 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_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,53 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_ESC, 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_BSLS, KC_GRV,
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_DEL,
KC_LCTL, 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_GRV, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LSFT, MO(1),
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@@ -0,0 +1,20 @@
# DeskDaily Conde60
![Conde60](https://i.imgur.com/5L7Cw44.png)
A single layout 60% pcb with a Tsangan bottom row and split spacabars
* Keyboard Maintainer: [DeskDaily](https://github.com/DeskDaily)
* Hardware Supported: Atmega32u4
Make example for this keyboard (after setting up your build environment):
make nightly_boards/conde60:default
Flashing example for this keyboard:
make nightly_boards/conde60:default:flash
You can enter bootloader mode by pressing the physical reset button at the back of the pcb or by holding the escape key while plugging the usb cable.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,18 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
LTO_ENABLE = yes

View File

@@ -0,0 +1,60 @@
/*
Copyright 2020 DeskDaily
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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0xD812
#define PRODUCT_ID 0x0012
#define DEVICE_VER 0x0001
#define MANUFACTURER DeskDaily
#define PRODUCT Paraluman
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 14
/*
* Keyboard Matrix Assignments
*
* Change this to how you wired your keyboard
* COLS: AVR pins used for columns, left to right
* ROWS: AVR pins used for rows, top to bottom
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
*
*/
#define MATRIX_ROW_PINS { D0, F7, B1, B0, E6 }
#define MATRIX_COL_PINS { B2, F6, F5, F4, F1, F0, D4, D6, D7, B4, B5, B6, C6, C7 }
#define UNUSED_PINS
/* COL2ROW, ROW2COL*/
#define DIODE_DIRECTION COL2ROW
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
/* define if matrix has ghost (lacks anti-ghosting diodes) */
//#define MATRIX_HAS_GHOST
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE

View File

@@ -0,0 +1,148 @@
{
"keyboard_name": "Paraluman",
"url": "",
"maintainer": "DeskDaily",
"layouts": {
"LAYOUT_60_ansi_split_bs_rshift": {
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
{"x":2, "y":0},
{"x":3, "y":0},
{"x":4, "y":0},
{"x":5, "y":0},
{"x":6, "y":0},
{"x":7, "y":0},
{"x":8, "y":0},
{"x":9, "y":0},
{"x":10, "y":0},
{"x":11, "y":0},
{"x":12, "y":0},
{"x":13, "y":0},
{"x":14, "y":0},
{"x":0, "y":1, "w":1.5},
{"x":1.5, "y":1},
{"x":2.5, "y":1},
{"x":3.5, "y":1},
{"x":4.5, "y":1},
{"x":5.5, "y":1},
{"x":6.5, "y":1},
{"x":7.5, "y":1},
{"x":8.5, "y":1},
{"x":9.5, "y":1},
{"x":10.5, "y":1},
{"x":11.5, "y":1},
{"x":12.5, "y":1},
{"x":13.5, "y":1, "w":1.5},
{"x":0, "y":2, "w":1.75},
{"x":1.75, "y":2},
{"x":2.75, "y":2},
{"x":3.75, "y":2},
{"x":4.75, "y":2},
{"x":5.75, "y":2},
{"x":6.75, "y":2},
{"x":7.75, "y":2},
{"x":8.75, "y":2},
{"x":9.75, "y":2},
{"x":10.75, "y":2},
{"x":11.75, "y":2},
{"x":12.75, "y":2, "w":2.25},
{"x":0, "y":3, "w":2.25},
{"x":2.25, "y":3},
{"x":3.25, "y":3},
{"x":4.25, "y":3},
{"x":5.25, "y":3},
{"x":6.25, "y":3},
{"x":7.25, "y":3},
{"x":8.25, "y":3},
{"x":9.25, "y":3},
{"x":10.25, "y":3},
{"x":11.25, "y":3},
{"x":12.25, "y":3, "w":1.75},
{"x":14, "y":3},
{"x":0, "y":4, "w":1.25},
{"x":1.25, "y":4, "w":1.25},
{"x":2.5, "y":4, "w":1.25},
{"x":3.75, "y":4, "w":6.25},
{"x":10, "y":4, "w":1.25},
{"x":11.25, "y":4, "w":1.25},
{"x":12.5, "y":4, "w":1.25},
{"x":13.75, "y":4, "w":1.25}
]
},
"LAYOUT_60_ansi_split_bs_rshift_tsangan": {
"layout": [
{"x":0, "y":0},
{"x":1, "y":0},
{"x":2, "y":0},
{"x":3, "y":0},
{"x":4, "y":0},
{"x":5, "y":0},
{"x":6, "y":0},
{"x":7, "y":0},
{"x":8, "y":0},
{"x":9, "y":0},
{"x":10, "y":0},
{"x":11, "y":0},
{"x":12, "y":0},
{"x":13, "y":0},
{"x":14, "y":0},
{"x":0, "y":1, "w":1.5},
{"x":1.5, "y":1},
{"x":2.5, "y":1},
{"x":3.5, "y":1},
{"x":4.5, "y":1},
{"x":5.5, "y":1},
{"x":6.5, "y":1},
{"x":7.5, "y":1},
{"x":8.5, "y":1},
{"x":9.5, "y":1},
{"x":10.5, "y":1},
{"x":11.5, "y":1},
{"x":12.5, "y":1},
{"x":13.5, "y":1, "w":1.5},
{"x":0, "y":2, "w":1.75},
{"x":1.75, "y":2},
{"x":2.75, "y":2},
{"x":3.75, "y":2},
{"x":4.75, "y":2},
{"x":5.75, "y":2},
{"x":6.75, "y":2},
{"x":7.75, "y":2},
{"x":8.75, "y":2},
{"x":9.75, "y":2},
{"x":10.75, "y":2},
{"x":11.75, "y":2},
{"x":12.75, "y":2, "w":2.25},
{"x":0, "y":3, "w":2.25},
{"x":2.25, "y":3},
{"x":3.25, "y":3},
{"x":4.25, "y":3},
{"x":5.25, "y":3},
{"x":6.25, "y":3},
{"x":7.25, "y":3},
{"x":8.25, "y":3},
{"x":9.25, "y":3},
{"x":10.25, "y":3},
{"x":11.25, "y":3},
{"x":12.25, "y":3, "w":1.75},
{"x":14, "y":3},
{"x":0, "y":4, "w":1.5},
{"x":1.5, "y":4},
{"x":2.5, "y":4, "w":1.5},
{"x":4, "y":4, "w":7},
{"x":11, "y":4, "w":1.5},
{"x":12.5, "y":4},
{"x":13.5, "y":4, "w":1.5}
]
}
}
}

View File

@@ -0,0 +1,34 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, 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_BSPC,
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_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_RSFT,
KC_LCTL, MO(1), KC_LALT, KC_SPC, KC_RALT, KC_APP, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
RESET, 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_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,34 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_60_ansi_split_bs_rshift_tsangan(
KC_ESC, 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_BSPC,
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_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_RSFT,
KC_LCTL, MO(1), KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift_tsangan(
RESET, 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_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,48 @@
/* Copyright 2020 DeskDaily
*
* 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 QMK_KEYBOARD_H
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT_60_ansi_split_bs_rshift(
KC_ESC, 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_BSPC,
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_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_LSFT, KC_LSFT,
KC_LCTL, MO(1), KC_LALT, KC_SPC, KC_LALT, KC_APP, KC_RGUI, KC_LCTL
),
[1] = LAYOUT_60_ansi_split_bs_rshift(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, KC_F12, KC_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
),
[2] = LAYOUT_60_ansi_split_bs_rshift(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, KC_F12, KC_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_60_ansi_split_bs_rshift(
RESET, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F12, KC_F12, KC_DEL, KC_DEL,
KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_LEFT, KC_DOWN, KC_RIGHT,KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_END, KC_PGDN, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, KC_TRNS, KC_TRNS
)
};

View File

@@ -0,0 +1,2 @@
VIA_ENABLE = yes
LTO_ENABLE = yes

View File

@@ -0,0 +1,17 @@
/* Copyright 2020 DeskDaily
*
* 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 "paraluman.h"

View File

@@ -0,0 +1,57 @@
/* Copyright 2020 DeskDaily
*
* 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
#include "quantum.h"
/* This is a shortcut to help you visually see your layout.
*
* The first section contains all of the arguments representing the physical
* layout of the board and position of the keys.
*
* The second converts the arguments into a two-dimensional array which
* represents the switch matrix.
*/
#define LAYOUT_60_ansi_split_bs_rshift( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K42, K43, K47, K4A, K4B, K4C, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, K4C, K4D }, \
}
#define LAYOUT_60_ansi_split_bs_rshift_tsangan( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K1D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2D, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, \
K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K42, K43, K47, K4B, K4C, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, KC_NO, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, KC_NO, K4B, K4C, K4D }, \
{ KC_NO, KC_NO } \
}

View File

@@ -0,0 +1,20 @@
# DeskDaily Paraluman
![Paraluman](https://i.imgur.com/iBYnjLD.jpg)
A 60% pcb for the Paraluman keyboard case
* Keyboard Maintainer: [DeskDaily](https://github.com/DeskDaily)
* Hardware Supported: Atmega32u4
Make example for this keyboard (after setting up your build environment):
make nightly_boards/paraluman:default
Flashing example for this keyboard:
make nightly_boards/paraluman:default:flash
You can enter bootloader mode by pressing the physical reset button at the back of the pcb or by holding the escape key while plugging the usb cable.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,18 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
LTO_ENABLE = yes

View File

@@ -0,0 +1,31 @@
/* Copyright 2022 tominabox1
*
* 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 "bigboy.h"
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
if (!encoder_update_user(index, clockwise)) { return false; }
if (index == 0) {
if (clockwise) {
tap_code_delay(KC_VOLU, 10);
} else {
tap_code_delay(KC_VOLD, 10);
}
}
return true;
}
#endif /* ENCODER_ENABLE */

View File

@@ -0,0 +1,34 @@
/* Copyright 2022 tominabox1
*
* 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
#include "quantum.h"
#define LAYOUT( \
K00, K01, K02, \
K10, K11, K12 \
) { \
{ K00, K01, K02, }, \
{ K10, K11, K12 }, \
}
#define LAYOUT_2us( \
K00, K01, K02 \
) { \
{ K00, K01, K02 }, \
}

View File

@@ -0,0 +1,60 @@
/* Copyright 2022 tominabox1
*
* 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
#include "config_common.h"
/* USB Device descriptor parameter */
#define VENDOR_ID 0x7431
#define PRODUCT_ID 0x6262
#define DEVICE_VER 0x0001
#define MANUFACTURER tominabox1
#define PRODUCT BigBoy
/* key matrix size */
#define DIRECT_PINS { \
{ D0, B1, B0 }, \
{ B7, B2, B3 } \
}
#define UNUSED_PINS
#define ENCODERS_PAD_A { C6 }
#define ENCODERS_PAD_B { B6 }
#define ENCODER_RESOLUTION 2
#define RGB_DI_PIN B5
#ifdef RGB_DI_PIN
#define RGBLED_NUM 5
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_SNAKE
#define RGBLIGHT_EFFECT_KNIGHT
#define RGBLIGHT_EFFECT_CHRISTMAS
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_RGB_TEST
#define RGBLIGHT_EFFECT_ALTERNATING
#define RGBLIGHT_EFFECT_TWINKLE
#endif /* RGB_DI_PIN */

View File

@@ -0,0 +1,13 @@
{
"keyboard_name": "BigBoy",
"url": "",
"maintainer": "tominabox1",
"layouts": {
"LAYOUT": {
"layout": [{"label":"0,0", "x":0, "y":0}, {"label":"0,1", "x":1, "y":0}, {"label":"0,2", "x":2, "y":0}, {"label":"1,0", "x":0, "y":1}, {"label":"1,1", "x":1, "y":1}, {"label":"1,2", "x":2, "y":1}]
},
"LAYOUT_2us": {
"layout": [{"label":"0,0", "x":0, "y":0, "h":2}, {"label":"0,1", "x":1, "y":0, "h":2}, {"label":"0,2", "x":2, "y":0, "h":2}]
}
}
}

View File

@@ -0,0 +1,34 @@
/* Copyright 2022 tominabox1
*
* 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 QMK_KEYBOARD_H
#define LT1_SPC LT(1, KC_SPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_1, KC_2, KC_3,
KC_4, KC_5, MO(1)
),
[1] = LAYOUT(
QK_BOOT, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO
),
[2] = LAYOUT(
KC_NO, KC_NO, KC_NO,
KC_NO, KC_NO, KC_NO
),
};

View File

@@ -0,0 +1,31 @@
/* Copyright 2022 tominabox1
*
* 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 QMK_KEYBOARD_H
#define LT1_SPC LT(1, KC_SPC)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_2us(
KC_1, KC_2, MO(1)
),
[1] = LAYOUT_2us(
QK_BOOT, KC_NO, KC_NO
),
[2] = LAYOUT_2us(
KC_NO, KC_NO, KC_NO
),
};

View File

@@ -0,0 +1,20 @@
# BigBoy
A macropad designed by dingusxmcgee_ and tominabox1.
![bigboy](https://i.imgur.com/oqxx6sEh.jpg)
* Keyboard Maintainer: [tominabox1](https://github.com/tominabox1)
* Hardware Supported: BigBoy
Make example for this keyboard (after setting up your build environment):
make bigboy:default
Flashing example for this keyboard:
make bigboy:default:flash
**Reset Key:** To enter the bootloader, either push the RESET button on the PCB, hold the top left key when plugging in, or the a programmed button on the keymap.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).

View File

@@ -0,0 +1,19 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
MOUSEKEY_ENABLE = yes # Mouse keys
EXTRAKEY_ENABLE = yes # Audio control and System control
CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
ENCODER_ENABLE = yes

View File

@@ -52,7 +52,11 @@ static void __attribute__((noinline, unused)) handleKeycodeRGBMode(const uint8_t
*/
bool process_rgb(const uint16_t keycode, const keyrecord_t *record) {
// need to trigger on key-up for edge-case issue
#ifndef RGB_TRIGGER_ON_KEYDOWN
if (!record->event.pressed) {
#else
if (record->event.pressed) {
#endif
#if (defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_DISABLE_KEYCODES)) || (defined(RGB_MATRIX_ENABLE) && !defined(RGB_MATRIX_DISABLE_KEYCODES))
uint8_t shifted = get_mods() & MOD_MASK_SHIFT;
#endif