From 59f5f57d524173ece07c50400f54bbb20edffc08 Mon Sep 17 00:00:00 2001 From: Justine Smithies Date: Sat, 9 Dec 2023 17:27:00 +0000 Subject: Initial commit --- config.h | 30 ++++++++++++ halconf.h | 7 +++ info.json | 120 +++++++++++++++++++++++++++++++++++++++++++++++ jmspicotkl.c | 111 +++++++++++++++++++++++++++++++++++++++++++ keymaps/default/keymap.c | 42 +++++++++++++++++ mcuconf.h | 10 ++++ readme.md | 47 +++++++++++++++++++ rules.mk | 2 + 8 files changed, 369 insertions(+) create mode 100644 config.h create mode 100644 halconf.h create mode 100644 info.json create mode 100644 jmspicotkl.c create mode 100644 keymaps/default/keymap.c create mode 100644 mcuconf.h create mode 100644 readme.md create mode 100644 rules.mk diff --git a/config.h b/config.h new file mode 100644 index 0000000..5307073 --- /dev/null +++ b/config.h @@ -0,0 +1,30 @@ +// Copyright 2023 Justine Smithies (@JustineSmithies) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define I2C1_SCL_PIN GP1 +#define I2C1_SDA_PIN GP0 +#define I2C_DRIVER I2CD0 + +#define OLED_DISPLAY_128X64 +#define OLED_IC OLED_IC_SSD1306 +#define OLED_DISPLAY_ADDRESS 0x3C +#define OLED_BRIGHTNESS 255 +#define OLED_TIMEOUT 0 // 60000ms is default + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT diff --git a/halconf.h b/halconf.h new file mode 100644 index 0000000..39fbe3e --- /dev/null +++ b/halconf.h @@ -0,0 +1,7 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next \ No newline at end of file diff --git a/info.json b/info.json new file mode 100644 index 0000000..5856944 --- /dev/null +++ b/info.json @@ -0,0 +1,120 @@ +{ + "manufacturer": "Justine Smithies", + "keyboard_name": "jmspicotkl", + "maintainer": "JustineSmithies", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "oled": true, + "nkro": true + }, + "matrix_pins": { + "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP10", "GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19"], + "rows": ["GP20", "GP21", "GP22", "GP26", "GP27", "GP28"] + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0000", + "vid": "0xFEED" + }, + "layouts": { + "LAYOUT_tkl_ansi": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + {"matrix": [0, 7], "x": 6.5, "y": 0}, + {"matrix": [0, 8], "x": 7.5, "y": 0}, + {"matrix": [0, 9], "x": 8.5, "y": 0}, + {"matrix": [0, 10], "x": 9.5, "y": 0}, + {"matrix": [0, 11], "x": 11, "y": 0}, + {"matrix": [0, 12], "x": 12, "y": 0}, + {"matrix": [0, 13], "x": 13, "y": 0}, + {"matrix": [0, 14], "x": 14, "y": 0}, + {"matrix": [0, 15], "x": 15.25, "y": 0}, + {"matrix": [0, 16], "x": 16.25, "y": 0}, + {"matrix": [0, 17], "x": 17.25, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1.25}, + {"matrix": [1, 1], "x": 1, "y": 1.25}, + {"matrix": [1, 2], "x": 2, "y": 1.25}, + {"matrix": [1, 3], "x": 3, "y": 1.25}, + {"matrix": [1, 4], "x": 4, "y": 1.25}, + {"matrix": [1, 5], "x": 5, "y": 1.25}, + {"matrix": [1, 6], "x": 6, "y": 1.25}, + {"matrix": [1, 7], "x": 7, "y": 1.25}, + {"matrix": [1, 8], "x": 8, "y": 1.25}, + {"matrix": [1, 9], "x": 9, "y": 1.25}, + {"matrix": [1, 10], "x": 10, "y": 1.25}, + {"matrix": [1, 11], "x": 11, "y": 1.25}, + {"matrix": [1, 12], "x": 12, "y": 1.25}, + {"matrix": [1, 14], "x": 13, "y": 1.25, "w": 2}, + {"matrix": [1, 15], "x": 15.25, "y": 1.25}, + {"matrix": [1, 16], "x": 16.25, "y": 1.25}, + {"matrix": [1, 17], "x": 17.25, "y": 1.25}, + {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5}, + {"matrix": [2, 2], "x": 1.5, "y": 2.25}, + {"matrix": [2, 3], "x": 2.5, "y": 2.25}, + {"matrix": [2, 4], "x": 3.5, "y": 2.25}, + {"matrix": [2, 5], "x": 4.5, "y": 2.25}, + {"matrix": [2, 6], "x": 5.5, "y": 2.25}, + {"matrix": [2, 7], "x": 6.5, "y": 2.25}, + {"matrix": [2, 8], "x": 7.5, "y": 2.25}, + {"matrix": [2, 9], "x": 8.5, "y": 2.25}, + {"matrix": [2, 10], "x": 9.5, "y": 2.25}, + {"matrix": [2, 11], "x": 10.5, "y": 2.25}, + {"matrix": [2, 12], "x": 11.5, "y": 2.25}, + {"matrix": [2, 13], "x": 12.5, "y": 2.25}, + {"matrix": [2, 14], "x": 13.5, "y": 2.25, "w": 1.5}, + {"matrix": [2, 15], "x": 15.25, "y": 2.25}, + {"matrix": [2, 16], "x": 16.25, "y": 2.25}, + {"matrix": [2, 17], "x": 17.25, "y": 2.25}, + {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75}, + {"matrix": [3, 2], "x": 1.75, "y": 3.25}, + {"matrix": [3, 3], "x": 2.75, "y": 3.25}, + {"matrix": [3, 4], "x": 3.75, "y": 3.25}, + {"matrix": [3, 5], "x": 4.75, "y": 3.25}, + {"matrix": [3, 6], "x": 5.75, "y": 3.25}, + {"matrix": [3, 7], "x": 6.75, "y": 3.25}, + {"matrix": [3, 8], "x": 7.75, "y": 3.25}, + {"matrix": [3, 9], "x": 8.75, "y": 3.25}, + {"matrix": [3, 10], "x": 9.75, "y": 3.25}, + {"matrix": [3, 11], "x": 10.75, "y": 3.25}, + {"matrix": [3, 12], "x": 11.75, "y": 3.25}, + {"matrix": [3, 14], "x": 12.75, "y": 3.25, "w": 2.25}, + {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25}, + {"matrix": [4, 2], "x": 2.25, "y": 4.25}, + {"matrix": [4, 3], "x": 3.25, "y": 4.25}, + {"matrix": [4, 4], "x": 4.25, "y": 4.25}, + {"matrix": [4, 5], "x": 5.25, "y": 4.25}, + {"matrix": [4, 6], "x": 6.25, "y": 4.25}, + {"matrix": [4, 7], "x": 7.25, "y": 4.25}, + {"matrix": [4, 8], "x": 8.25, "y": 4.25}, + {"matrix": [4, 9], "x": 9.25, "y": 4.25}, + {"matrix": [4, 10], "x": 10.25, "y": 4.25}, + {"matrix": [4, 11], "x": 11.25, "y": 4.25}, + {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75}, + {"matrix": [4, 16], "x": 16.25, "y": 4.25}, + {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25}, + {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 3], "x": 2.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25}, + {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25}, + {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25}, + {"matrix": [5, 13], "x": 12.5, "y": 5.25, "w": 1.25}, + {"matrix": [5, 14], "x": 13.75, "y": 5.25, "w": 1.25}, + {"matrix": [5, 15], "x": 15.25, "y": 5.25}, + {"matrix": [5, 16], "x": 16.25, "y": 5.25}, + {"matrix": [5, 17], "x": 17.25, "y": 5.25} + ] + } + } +} diff --git a/jmspicotkl.c b/jmspicotkl.c new file mode 100644 index 0000000..77870f9 --- /dev/null +++ b/jmspicotkl.c @@ -0,0 +1,111 @@ +/* Copyright 2023 Justine Smithies + * + * 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 . + */ + +#include "quantum.h" + +#ifdef OLED_ENABLE + +static uint32_t oled_logo_timer = 0; +static bool clear_logo = true; +static const char PROGMEM my_logo[] = { + 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, 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, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,193,193, 1, 1,193,193, 1, 1, 1, 1, 1, 1,193,193, 1, 1, 1, 1,193,193,193,193,193,193, 1, 1, 1, 1,255, 0, 0, 0, 0,192,192,192,192,192,192, 0, 0, 0, 0,192,192,192,192,192,192, 0, 0, 0, 0,192,192,192,192, 0, 0, 0, 0, 0, 0,192,192,192,192, 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, 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, 0, 0, 0, 0, 48, 48,192,192,192,192, 63, 63, 0, 0,255,255, 3, 3, 12, 12, 3, 3,255,255, 0, 0,195,195,204,204,204,204, 48, 48, 0, 0, 0, 0,255, 0, 0, 0, 0,255,255, 12, 12, 12, 12, 3, 3, 0, 0,192,192,255,255,192,192, 0, 0, 63, 63,192,192,192,192, 51, 51, 0, 0, 63, 63,192,192,192,192, 63, 63, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 12, 12, 12, 12,252,252, 12, 12, 12, 12, 0, 0,252,252,192,192, 48, 48, 12, 12, 0, 0,252,252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0,252,252,204,204,204,204, 48, 48, 0, 0,240,240, 12, 12, 12, 12,240,240, 0, 0,252,252, 0, 0,192,192, 0, 0,252,252, 0, 0,252,252,204,204,204,204, 12, 12, 0, 0,252,252,204,204,204,204, 48, 48, 0, 0,252,252,204,204,204,204, 12, 12, 0, 0,252,252, 12, 12, 12, 12,240,240, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 15, 15, 0, 0, 3, 3, 12, 12, 0, 0, 15, 15, 12, 12, 12, 12, 12, 12, 0, 0, 0, 0,255, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 12, 12, 12, 12, 3, 3, 0, 0, 15, 15, 3, 3, 0, 0, 3, 3, 15, 15, 0, 0, 15, 15, 12, 12, 12, 12, 12, 12, 0, 0, 15, 15, 0, 0, 3, 3, 12, 12, 0, 0, 15, 15, 12, 12, 12, 12, 12, 12, 0, 0, 15, 15, 12, 12, 12, 12, 3, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 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, 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, 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, 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, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, +}; + +#endif + +#ifdef OLED_ENABLE + +void init_timer(void){ + oled_logo_timer = timer_read32(); +}; + +void user_oled_magic(void) { + // Host Keyboard Layer Status + oled_write_P(PSTR("Layer: "), false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("0\n"), false); + break; + case 1: + oled_write_P(PSTR("1\n"), false); + break; + default: + // Or use the write_ln shortcut over adding '\n' to the end of your string + oled_write_ln_P(PSTR("Undefined"), false); + } + + oled_write_P(PSTR("\n"), false); + // Host Keyboard LED Status + led_t led_state = host_keyboard_led_state(); + //oled_write_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false); + oled_write_P(PSTR("Caps lock: "), false); + oled_write_P(led_state.caps_lock ? PSTR("On ") : PSTR("Off"), false); + oled_write_P(PSTR("\n"), false); + oled_write_P(PSTR("Scroll lock: "), false); + oled_write_P(led_state.scroll_lock ? PSTR("On ") : PSTR("Off"), false); + + #ifdef WPM_ENABLE + static char wpm_str[10]; + // Write WPM + oled_write_P(PSTR("\n"), false); + sprintf(wpm_str, "WPM: %03d", get_current_wpm()); + oled_write_P(PSTR("\n"), false); + oled_write(wpm_str, false); + #endif +} + +void render_logo(void) { + oled_write_raw_P(my_logo, sizeof(my_logo)); +} + +void clear_screen(void) { + if (clear_logo){ + for (uint8_t i = 0; i < OLED_DISPLAY_HEIGHT; ++i) { + for (uint8_t j = 0; j < OLED_DISPLAY_WIDTH; ++j) { + oled_write_raw_byte(0x0, i*OLED_DISPLAY_WIDTH + j); + } + } + clear_logo = false; + } +} + +void keyboard_post_init_kb(void) { + init_timer(); + + keyboard_post_init_user(); +} + +# define SHOW_LOGO 5000 +bool oled_task_kb(void) { + if (!oled_task_user()) { return false; } + if ((timer_elapsed32(oled_logo_timer) < SHOW_LOGO)){ + render_logo(); + }else{ + clear_screen(); + user_oled_magic(); + } + return false; +} + +#endif diff --git a/keymaps/default/keymap.c b/keymaps/default/keymap.c new file mode 100644 index 0000000..d7ff6ca --- /dev/null +++ b/keymaps/default/keymap.c @@ -0,0 +1,42 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐ + * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│ + * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘ + * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐ + * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│ + * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤ + * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│ + * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘ + * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │ + * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐ + * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │ + * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐ + * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl│ │ ← │ ↓ │ → │ + * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘ + */ + [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_SCRL, 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, LT(1,KC_APP), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT_tkl_ansi( + QK_REBOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_MUTE, KC_AUDIO_VOL_DOWN, KC_AUDIO_VOL_UP, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, + KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO + ) +}; + diff --git a/mcuconf.h b/mcuconf.h new file mode 100644 index 0000000..98b9a28 --- /dev/null +++ b/mcuconf.h @@ -0,0 +1,10 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C0 TRUE +#define RP_I2C_USE_I2C1 FALSE diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d7220e1 --- /dev/null +++ b/readme.md @@ -0,0 +1,47 @@ +# jmspicotkl + +*Raspberry Pi Pico TKL keyboard with oled status display powered by QMK* + +* Keyboard Maintainer: [Justine Smithies](https://fosstodon.org/@JustineSmithies) + +## **BOM** +|Item |Count|Example| +|:--- |:---:|:---:| +|Micro 5Pin Male to USB 2.0 A Female With Screw Panel Mount Cable |1|[Link](https://www.ebay.co.uk/itm/231984473033?hash=item36035a23c9:g:ppYAAOSweBFaqoEh)| +|Raspberry Pi Pico |1|[Link](https://thepihut.com/collections/pico/products/raspberry-pi-pico)| +|0.96" SSD1306 128x64 Blue |1|[Link](https://www.ebay.co.uk/itm/313603433645?hash=item490438a4ad:g:7cIAAOSwFxlgFY5O)| +|1N4148 Diodes |100|[Link](https://www.ebay.co.uk/itm/313646674409?_trkparms=ispr%3D1&hash=item4906cc71e9:g:kZ8AAOSwxhNhIR6I&amdata=enc%3AAQAGAAAA4HNlZhtmMFCOq5AkzQH0g1bp9XaWKNkLGLOiWFiZxlmCq9DjLAMrg2mvwAyB2RHHrE3dDniqW%2BobKu4v26C3tfEyxvQ2PFxOeH2b29ldf5OfLvKByZQTxMN6oRU2uo9crlDv12TqKz3%2Fgx8%2Bp7mJj1xhxXUTjohUxtKXcReOvlKYzMl0mm8w2Ee9CNXhOk6dhgVcm%2FXnX7wU%2BQSw8NeLLqB1UowcjkWe20YgPIaIAmb9q9IOY5xcMTRZiXKsU77FcZD4aGHLpsCFzptt7cWOkYZCqHfl4BTQDhImGcBxoyI%2B%7Ctkp%3ABFBMgMuwqf1f)| +|Kailh Box Thick Click Jade or your own preference |90|[Link](https://mechbox.co.uk/collections/switches-packs-of-10/products/novelkeys-x-kailh-box-thick-click-jade-switch-10-switches?variant=40657871274146)| +|MX Keycaps of your choice but I recommend WASD --> |87|[Link](https://www.wasdkeyboards.com/87-key-custom-cherry-mx-keycap-set.html)| +|Custom made stainless steel plate |1|See the remarks below for info +|Everglide Panda GH60 stablizers |1 pack|[Link](https://www.amazon.co.uk/Everglide-Mounted-Stabilizer-Mechanical-Keyboard/dp/B09C4WRLHK/ref=sr_1_6?crid=B1RT91QW1W2F&keywords=Everglide%2BPanda%2BBlack%2BWhite%2BGold%2BPlated%2BPlate%2BMounted&qid=1648913546&sprefix=everglide%2Bpanda%2Bblack%2Bwhite%2Bgold%2Bplated%2Bplate%2Bmounted%2B%2Caps%2C85&sr=8-6&th=1)| + +On top of that you'll be needing: +* Soldering iron +* Solder wire (anything between 0.5mm to 1.2mm, preferable with lead 'Pb') +* Sharp craft knife or wire stripper for cutting sections of insulation out of the wires +* Shapie marker + +### **Remarks** + +* My plate was made by using the [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/) to make my layout then copied and pasted the raw data into the [Builder](http://www.builder.swillkb.com/) so that I could then order my custom made stainless steel plate from Lasergist. +* I used wire from cat7 cable to wire the switch matrix and used a sharp craft knife to cut them to length for the rows and the columns. I then placed and marked the sections to have the insultation removed with a shapie marker where they are to be soldered to the switches. Using the knife remove the marked insulation being careful not to cut through the wire. This part can take a while and is quite laborious to be honest so you may want to do this over a few days. + +# **Build guide** + +Make example for this keyboard (after setting up your build environment): + + make jmspicotkl:default + +Flashing example for this keyboard: + + just copy the newly created uf2 file onto your Pico once it's in the bootloader. + +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 + +Enter the bootloader in 2 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead diff --git a/rules.mk b/rules.mk new file mode 100644 index 0000000..132ed66 --- /dev/null +++ b/rules.mk @@ -0,0 +1,2 @@ +WPM_ENABLE = yes +NO_USB_STARTUP_CHECK = yes -- cgit v1.2.3