Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add keyboard support for duckboard #10318

Merged
merged 24 commits into from
Sep 25, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
6a78eec
Adding duckboard to QMK
doodboard Sep 15, 2020
d01d509
added duckboard under doodboard
doodboard Sep 15, 2020
1de4892
changed debouncing delay to debounce
doodboard Sep 15, 2020
88434df
Update keyboards/doodboard/duckboard/config.h
doodboard Sep 21, 2020
61b4018
Update keyboards/doodboard/duckboard/config.h
doodboard Sep 21, 2020
c1f7430
Update keyboards/doodboard/duckboard/kb.h
doodboard Sep 21, 2020
a4375e9
Update keyboards/doodboard/duckboard/keymaps/default/keymap.c
doodboard Sep 21, 2020
9eedbe3
Update keyboards/doodboard/duckboard/rules.mk
doodboard Sep 21, 2020
674db25
Update keyboards/doodboard/duckboard/kb.h
doodboard Sep 21, 2020
9a85cea
Update keyboards/doodboard/duckboard/kb.c
doodboard Sep 21, 2020
c124c94
Update code per review
doodboard Sep 21, 2020
2f928d2
Merge branch 'duckboard' of https://github.com/doodboard/qmk_firmware…
doodboard Sep 21, 2020
9ac382b
folder name errod
doodboard Sep 21, 2020
b15d06a
Update keyboards/doodboard/duckboard/config.h
doodboard Sep 21, 2020
1f9a682
Update keyboards/doodboard/duckboard/rules.mk
doodboard Sep 21, 2020
fa9a597
Update keyboards/doodboard/duckboard/rules.mk
doodboard Sep 21, 2020
b0303d6
Update keyboards/doodboard/duckboard/config.h
doodboard Sep 21, 2020
8797519
Create info.json
doodboard Sep 21, 2020
4f5e142
Merge branch 'duckboard' of https://github.com/doodboard/qmk_firmware…
doodboard Sep 21, 2020
c20929f
Update keyboards/doodboard/duckboard/duckboard.h
doodboard Sep 21, 2020
f926bbc
Update keyboards/doodboard/duckboard/info.json
doodboard Sep 21, 2020
2d374f3
Update keyboards/doodboard/duckboard/info.json
doodboard Sep 21, 2020
e70260c
Update keyboards/doodboard/duckboard/duckboard.h
doodboard Sep 21, 2020
208d0f2
Update keyboards/doodboard/duckboard/readme.md
doodboard Sep 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions keyboards/doodboard/duckboard/config.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/* Copyright 2020 doodboard
*
* 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 0xFF44
#define DEVICE_VER 0x0001
#define MANUFACTURER doodboard
#define PRODUCT duckboard

/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 5

/* key matrix pins */
#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
#define MATRIX_COL_PINS { F7, B1, B3, B2, B6 }
#define UNUSED_PINS

#define ENCODERS_PAD_A { F5 }
#define ENCODERS_PAD_B { F6 }
#define ENCODER_RESOLUTION 2

/* media key slowdown for windows */
#define TAP_CODE_DELAY 20

/* COL2ROW or ROW2COL */
#define DIODE_DIRECTION COL2ROW

/* number of backlight levels */

/* ws2812 RGB LED */
#define RGB_DI_PIN D3

#ifdef RGBLIGHT_ENABLE
#define RGBLED_NUM 8 // Number of LEDs
#endif

/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
17 changes: 17 additions & 0 deletions keyboards/doodboard/duckboard/duckboard.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/* Copyright 2020 doodboard
*
* 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 "duckboard.h"
34 changes: 34 additions & 0 deletions keyboards/doodboard/duckboard/duckboard.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/* Copyright 2020 doodboard
*
* 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

doodboard marked this conversation as resolved.
Show resolved Hide resolved
#include "quantum.h"

#define LAYOUT( \
K01, K02, K03, K04, \
K11, K12, K13, \
K21, K22, K23, K24, \
K31, K32, K33, \
K40, K41, K42, K43, K44 \
) { \
{ KC_NO, K01, K02, K03, K04 }, \
{ KC_NO, K11, K12, K13, KC_NO }, \
{ KC_NO, K21, K22, K23, K24 }, \
{ KC_NO, K31, K32, K33, KC_NO }, \
{ K40, K41, K42, K43, K44 } \
}
36 changes: 36 additions & 0 deletions keyboards/doodboard/duckboard/info.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"keyboard_name": "duckboard",
"url": "",
"maintainer": "doodboard",
"width": 5,
"height": 5,
"layouts": {
"LAYOUT": {
"layout": [
{"x": 1, "y": 0},
{"x": 2, "y": 0},
{"x": 3, "y": 0},
{"x": 4, "y": 0},

{"x": 1, "y": 1},
{"x": 2, "y": 1},
{"x": 3, "y": 1},

{"x": 1, "y": 2},
{"x": 2, "y": 2},
{"x": 3, "y": 2},
{"x": 4, "y": 2},

{"x": 1, "y": 3},
{"x": 2, "y": 3},
{"x": 3, "y": 3},

{"x": 0, "y": 4},
{"x": 1, "y": 4},
{"x": 2, "y": 4},
{"x": 3, "y": 4},
{"x": 4, "y": 4}
]
}
}
}
118 changes: 118 additions & 0 deletions keyboards/doodboard/duckboard/keymaps/default/keymap.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/* Copyright 2020 doodboard
*
* 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(
TG(1), KC_PSLS, KC_PAST, KC_PMNS,
KC_P7, KC_P8, KC_P9,
KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_P1, KC_P2, KC_P3,
KC_BSPC, KC_MUTE, KC_P0, KC_PDOT, KC_PENT),
[1] = LAYOUT(
TG(1), KC_TRNS, KC_TRNS, KC_TRNS,
KC_HOME, KC_UP, KC_PGUP,
KC_LEFT, KC_TRNS, KC_RGHT, KC_TRNS,
KC_END, KC_DOWN, KC_PGDN,
TG(2), KC_TRNS, KC_INS, KC_DEL, KC_TRNS),
[2] = LAYOUT(
KC_TRNS, RGB_TOG, RGB_MOD, KC_TRNS,
RGB_HUI, RGB_SAI, RGB_VAI,
RGB_HUD, RGB_SAD, RGB_VAD, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS,
TG(2), RESET, KC_TRNS, KC_TRNS, KC_TRNS),
};

void encoder_update_user(uint8_t index, bool clockwise) {
if (index == 0) { /* First encoder */
if (clockwise) {
tap_code(KC_VOLU);
} else {
tap_code(KC_VOLD);
}
}
}


#ifdef OLED_DRIVER_ENABLE
oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_270; }


// WPM-responsive animation stuff here
#define IDLE_FRAMES 2
#define IDLE_SPEED 40 // below this wpm value your animation will idle

#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing
#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024

uint32_t anim_timer = 0;
uint32_t anim_sleep = 0;
uint8_t current_idle_frame = 0;

// Credit to u/Pop-X- for the initial code. You can find his commit here https://github.com/qmk/qmk_firmware/pull/9264/files#diff-303f6e3a7a5ee54be0a9a13630842956R196-R333.
static void render_anim(void) {
static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
{
0, 0,192,192,192,192,192,192,192,248,248, 30, 30,254,254,248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,127,127,255,255,255,255,255,159,159,135,135,129,129,129, 97, 97, 25, 25, 7, 7, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 97, 97,127, 1, 1, 97, 97,127, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0
},
{
0, 0,128,128,128,128,128,128,128,240,240, 60, 60,252,252,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 7, 7, 7, 7, 7,255,255,254,254,255,255,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255,255,255,255,255,255,255, 63, 63, 15, 15, 3, 3, 3,195,195, 51, 51, 15, 15, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 99, 99,127, 3, 3, 99, 99,127, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0
}
};

//assumes 1 frame prep stage
void animation_phase(void) {
current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE);
}

if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
anim_timer = timer_read32();
animation_phase();
}
}

void oled_task_user(void) {
render_anim();
oled_set_cursor(0,6);
oled_write_P(PSTR("DUCK\nBOARD\n"), false);
oled_write_P(PSTR("-----\n"), false);
// Host Keyboard Layer Status
oled_write_P(PSTR("MODE\n"), false);
oled_write_P(PSTR("\n"), false);

switch (get_highest_layer(layer_state)) {
case 0:
oled_write_P(PSTR("BASE\n"), false);
break;
case 1:
oled_write_P(PSTR("FUNC\n"), false);
break;
case 2:
oled_write_P(PSTR("RGB\n"), false);
break;
}
}
#endif

void keyboard_post_init_user(void) {
//Customise these values to debug
//debug_enable=true;
//debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
}
17 changes: 17 additions & 0 deletions keyboards/doodboard/duckboard/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# duckboard

An 18-key numpad with rotary encoder and OLED support.

* Keyboard Maintainer: [doodboard](https://github.com/doodboard)
* Hardware Supported: duckboard PCB
* Hardware Availability: Private Group Buy

Make example for this keyboard (after setting up your build environment):

make doodboard/duckboard:default

Flashing example for this keyboard:

make doodboard/duckboard: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).
25 changes: 25 additions & 0 deletions keyboards/doodboard/duckboard/rules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# MCU name
MCU = atmega32u4

# Bootloader selection
BOOTLOADER = caterina

# 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 = yes # 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 = yes # USB Nkey Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
BLUETOOTH_ENABLE = no # Enable Bluetooth
AUDIO_ENABLE = no # Audio output

ENCODER_ENABLE = yes
OLED_DRIVER_ENABLE = yes