[Keyboard] SplitKB's Zima (#11577)

Co-authored-by: Thomas Baart <thomas@splitkb.com>
Co-authored-by: Joel Challis <git@zvecr.com>
This commit is contained in:
Drashna Jaelre 2021-01-31 02:41:18 -08:00 committed by GitHub
parent 6ce6a94216
commit c1361005fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 348 additions and 0 deletions

View File

@ -0,0 +1,93 @@
/*
Copyright 2019 Thomas Baart
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 0xFEED
#define PRODUCT_ID 0xF75B
#define DEVICE_VER 0x0001
#define MANUFACTURER splitkb
#define PRODUCT Zima
/* key matrix size */
#define MATRIX_ROWS 4
#define MATRIX_COLS 3
/*
* Keyboard Matrix Assignments
*/
#define DIRECT_PINS { \
{ C6, D6, D5 }, \
{ C7, F7, D4 }, \
{ E6, F5, F6 }, \
{ F0, F1, F4 } \
}
#define UNUSED_PINS
#define ENCODERS_PAD_A { B4 }
#define ENCODERS_PAD_B { D7 }
// #define QMK_ESC_OUTPUT B7
// #define QMK_ESC_INPUT C6
// #define QMK_SPEAKER B6
#define B6_AUDIO
#define AUDIO_CLICKY
#define NO_MUSIC_MODE
#define RGB_DI_PIN B5
#define RGBLED_NUM 5
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
#define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
#define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
#define RGBLIGHT_EFFECT_BREATHING
#define RGBLIGHT_EFFECT_RAINBOW_MOOD
#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
#define RGBLIGHT_EFFECT_STATIC_GRADIENT
#define RGBLIGHT_EFFECT_TWINKLE
/* 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
#define FB_ERM_LRA 0
#define FB_BRAKEFACTOR 3 /* For 1x:0, 2x:1, 3x:2, 4x:3, 6x:4, 8x:5, 16x:6, Disable Braking:7 */
#define FB_LOOPGAIN 1 /* For Low:0, Medium:1, High:2, Very High:3 */
/* Please refer to your datasheet for the optimal setting for your specific motor. */
#define RATED_VOLTAGE 3
#define V_PEAK 5
#define DRV_GREETING alert_750ms
#define DRV_MODE_DEFAULT buzz
// EC11K encoders have a different resolution than other EC11 encoders.
// When using the default resolution of 4, if you notice your encoder skipping
// every other tick, lower the resolution to 2.
#define ENCODER_RESOLUTION 2

View File

@ -0,0 +1,25 @@
{
"keyboard_name": "Zima",
"url": "splitkb.com",
"maintainer": "splitkb.com, drashna",
"width": 3,
"height": 4,
"layouts": {
"LAYOUT_ortho_4x3": {
"layout": [
{"label":"K00 (B0,B4)", "x":0, "y":1},
{"label":"K01 (B0,B5)", "x":1, "y":1},
{"label":"K02 (B0,B6)", "x":2, "y":1},
{"label":"K10 (B1,B4)", "x":0, "y":2},
{"label":"K11 (B1,B5)", "x":1, "y":2},
{"label":"K12 (B1,B6)", "x":2, "y":2},
{"label":"K20 (B2,B4)", "x":0, "y":3},
{"label":"K21 (B2,B5)", "x":1, "y":3},
{"label":"K22 (B2,B6)", "x":2, "y":3},
{"label":"K30 (B3,B4)", "x":0, "y":4},
{"label":"K31 (B3,B5)", "x":1, "y":4},
{"label":"K32 (B3,B6)", "x":2, "y":4}
]
}
}
}

View File

@ -0,0 +1,37 @@
/* Copyright 2019 Thomas Baart
*
* 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_ortho_4x3( /* Base */
KC_MUTE, TG(1), TG(2),
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6,
KC_P1, KC_P2, KC_P3
),
[1] = LAYOUT_ortho_4x3( /* Layer 1 */
RESET, _______, XXXXXXX,
AU_ON, AU_OFF, XXXXXXX,
CK_TOGG, XXXXXXX, CK_UP,
CK_RST, XXXXXXX, CK_DOWN
),
[2] = LAYOUT_ortho_4x3( /* Layer 2*/
RGB_TOG, RGB_MOD, _______,
RGB_HUI, RGB_SAI, RGB_VAI,
RGB_HUD, RGB_SAD, RGB_VAD,
HPT_TOG, HPT_FBK, HPT_CONT
)
};

View File

@ -0,0 +1,7 @@
# The default keymap for zima
This includes support for the OLED and Encoder. However, the actual code is found in the `zima.c` file. This can be replaced by adding your own `oled_task_user(void)` and `encoder_update_user` functinons. These will replace what is in the keyboard, and allow you to customize these features.
The reason that this is done this way, is so that this functionality will work on the [QMK Configurator](https://config.qmk.fm/#/splitkb/zima/LAYOUT_ortho_4x3)
For reference, the code used for the oled and encoder defaults is in [zima.c](https://github.com/qmk/qmk_firmware/tree/master/keyboards/splitkb/zima/zima.c).

View File

@ -0,0 +1,17 @@
# Zima
![Zima](https://cdn.shopify.com/s/files/1/0227/9171/6941/products/Zima_Clear_Side.jpg?v=1596531772)
A feature-packed twelve key macropad the size of a creditcard.
* Keyboard Maintainer: [Thomas Baart](https://github.com/splitkb)
* Hardware Supported: Onboard ATmega32u4 with speaker, encoder, RGB underglow, OLED and haptic support, with a Type C connector
* Hardware Availability: [splitkb.com](https://splitkb.com/collections/keyboard-kits/products/zima)
Make example for this keyboard (after setting up your build environment):
make splitkb/zima:default
Keyboard can be put into bootloader mode by pressing the button to the right of the USB port on the underside of the PCB.
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,28 @@
# MCU name
MCU = atmega32u4
# Bootloader selection
BOOTLOADER = atmel-dfu
# Build Options
# change yes to no to disable
#
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
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
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
NKRO_ENABLE = no # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = yes # Audio output
ENCODER_ENABLE = yes # ENables the use of one or more encoders
OLED_DRIVER_ENABLE = yes # Enables the use of OLED displays
HAPTIC_ENABLE += DRV2605L # Supported but not included by defaut
LTO_ENABLE = yes

View File

@ -0,0 +1,112 @@
/* Copyright 2019 Thomas Baart
*
* 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 "zima.h"
#include <stdio.h>
#ifdef HAPTIC_ENABLE
# include "haptic.h"
extern haptic_config_t haptic_config;
#endif
#ifdef OLED_DRIVER_ENABLE
static bool is_asleep = false;
static uint32_t oled_timer;
void suspend_power_down_kb(void) {
is_asleep = true;
suspend_power_down_user();
}
void suspend_wakeup_init_kb(void) {
is_asleep = false;
suspend_wakeup_init_user();
}
__attribute__((weak)) oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; }
__attribute__((weak)) void oled_task_user(void) {
if (is_asleep) {
oled_off();
return;
}
if (timer_elapsed32(oled_timer) < 30000) {
oled_on();
oled_scroll_off();
oled_write_P(PSTR("SplitKB's Zima"), false);
char layer[2] = {0};
snprintf(layer, sizeof(layer), "%d", get_highest_layer(layer_state));
oled_write_P(PSTR(" L:"), false);
oled_write_ln(layer, false);
oled_write_ln_P(PSTR("--------------"), false);
if (rgblight_is_enabled()) {
oled_write_P(PSTR("HSV: "), false);
char rgbs[14];
snprintf(rgbs, sizeof(rgbs), "%3d, %3d, %3d", rgblight_get_hue(), rgblight_get_sat(), rgblight_get_val());
oled_write_ln(rgbs, false);
} else {
oled_write_ln_P(PSTR("RGB LIGHT DISABLED"), false);
}
# ifdef AUDIO_ENABLE
oled_write_P(PSTR("Audio:"), false);
is_audio_on() ? oled_write_P(PSTR(" on"), false) : oled_write_P(PSTR("off"), false);
# ifdef AUDIO_CLICKY
oled_write_P(PSTR(" Clicky:"), false);
(is_clicky_on() && is_audio_on()) ? oled_write_P(PSTR(" on"), false) : oled_write_P(PSTR("off"), false);
# endif
# endif
} else {
if (timer_elapsed32(oled_timer) < 120000) {
oled_on();
// clang-format off
static const char PROGMEM qmk_logo[] = {
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0};
// clang-format on
oled_write_ln_P(qmk_logo, false);
oled_scroll_right();
} else {
oled_off();
}
}
}
bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
oled_timer = timer_read32();
return process_record_user(keycode, record);
}
#endif
#ifdef ENCODER_ENABLE
__attribute__((weak)) void encoder_update_user(uint8_t index, bool clockwise) {
if (clockwise) {
tap_code16(KC_VOLU);
} else {
tap_code16(KC_VOLD);
}
# ifdef OLED_DRIVER_ENABLE
oled_timer = timer_read32();
# endif
# if defined(AUDIO_ENABLE) && defined(AUDIO_CLICKY)
if (is_audio_on() && is_clicky_on()) clicky_play();
# endif
# ifdef HAPTIC_ENABLE
if (haptic_config.enable) haptic_play();
# endif
}
#endif

View File

@ -0,0 +1,29 @@
/* Copyright 2019 Thomas Baart
*
* 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_ortho_4x3( \
k00, k01, k02, \
k03, k04, k05, \
k06, k07, k08, \
k09, k10, k11 \
) { \
{k00, k01, k02}, \
{k03, k04, k05}, \
{k06, k07, k08}, \
{k09, k10, k11} }